
- Set up project structure with FastAPI - Implement user and account management - Add send and receive money functionality - Set up transaction processing system - Add JWT authentication - Configure SQLAlchemy with SQLite - Set up Alembic for database migrations - Create comprehensive API documentation
186 lines
4.1 KiB
Markdown
186 lines
4.1 KiB
Markdown
# Fintech Payment Service
|
|
|
|
A FastAPI backend for fintech payment services, providing APIs for users, accounts, and money transfer operations.
|
|
|
|
## Features
|
|
|
|
- **User Management**: Create and manage user accounts
|
|
- **Account Management**: Create and manage financial accounts
|
|
- **Transaction Processing**:
|
|
- Send money to external accounts
|
|
- Receive money from external sources
|
|
- Make internal transfers between accounts
|
|
- View transaction history
|
|
- **Security**: JWT authentication for secure API access
|
|
|
|
## Tech Stack
|
|
|
|
- **Framework**: FastAPI
|
|
- **Database**: SQLite
|
|
- **ORM**: SQLAlchemy
|
|
- **Migrations**: Alembic
|
|
- **Authentication**: JWT (JSON Web Tokens)
|
|
- **Password Hashing**: Bcrypt
|
|
|
|
## API Endpoints
|
|
|
|
### Authentication
|
|
|
|
- `POST /api/v1/login/access-token` - Get access token
|
|
|
|
### Users
|
|
|
|
- `POST /api/v1/users/` - Create a new user
|
|
- `GET /api/v1/users/me` - Get current user info
|
|
- `PUT /api/v1/users/me` - Update current user info
|
|
- `GET /api/v1/users/{user_id}` - Get user by ID
|
|
|
|
### Accounts
|
|
|
|
- `GET /api/v1/accounts/` - List user accounts
|
|
- `POST /api/v1/accounts/` - Create a new account
|
|
- `GET /api/v1/accounts/{account_id}` - Get account details
|
|
- `PUT /api/v1/accounts/{account_id}` - Update account details
|
|
- `DELETE /api/v1/accounts/{account_id}` - Delete an account
|
|
|
|
### Transactions
|
|
|
|
- `GET /api/v1/transactions/` - List user transactions
|
|
- `GET /api/v1/transactions/account/{account_id}` - List account transactions
|
|
- `POST /api/v1/transactions/deposit` - Create a deposit
|
|
- `POST /api/v1/transactions/withdrawal` - Create a withdrawal
|
|
- `POST /api/v1/transactions/transfer` - Transfer between accounts
|
|
- `POST /api/v1/transactions/receive` - Receive money from external source
|
|
- `POST /api/v1/transactions/send` - Send money to external destination
|
|
- `GET /api/v1/transactions/{transaction_id}` - Get transaction details
|
|
|
|
### Health Check
|
|
|
|
- `GET /api/v1/health` - Check API health
|
|
|
|
## Setup Instructions
|
|
|
|
### Prerequisites
|
|
|
|
- Python 3.8+
|
|
- pip
|
|
|
|
### Installation
|
|
|
|
1. Clone the repository:
|
|
```bash
|
|
git clone <repository-url>
|
|
cd fintechpaymentservice
|
|
```
|
|
|
|
2. Install dependencies:
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
3. Set up environment variables:
|
|
```bash
|
|
# Create a .env file with the following variables
|
|
SECRET_KEY=your_secret_key_here
|
|
ALGORITHM=HS256
|
|
ACCESS_TOKEN_EXPIRE_MINUTES=30
|
|
```
|
|
|
|
4. Run database migrations:
|
|
```bash
|
|
alembic upgrade head
|
|
```
|
|
|
|
5. Start the server:
|
|
```bash
|
|
uvicorn main:app --reload
|
|
```
|
|
|
|
6. Access the API documentation:
|
|
- Swagger UI: http://localhost:8000/docs
|
|
- ReDoc: http://localhost:8000/redoc
|
|
|
|
## Usage Examples
|
|
|
|
### Create a User
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8000/api/v1/users/" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"email": "user@example.com",
|
|
"first_name": "John",
|
|
"last_name": "Doe",
|
|
"password": "securepassword"
|
|
}'
|
|
```
|
|
|
|
### Get Access Token
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8000/api/v1/login/access-token" \
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|
-d "username=user@example.com&password=securepassword"
|
|
```
|
|
|
|
### Create an Account
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8000/api/v1/accounts/" \
|
|
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"account_type": "savings",
|
|
"currency": "USD"
|
|
}'
|
|
```
|
|
|
|
### Receive Money
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8000/api/v1/transactions/receive" \
|
|
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"receiver_account_id": 1,
|
|
"external_sender_info": "Bank XYZ - Account 12345",
|
|
"amount": 500.00,
|
|
"currency": "USD",
|
|
"description": "Salary payment"
|
|
}'
|
|
```
|
|
|
|
### Send Money
|
|
|
|
```bash
|
|
curl -X POST "http://localhost:8000/api/v1/transactions/send" \
|
|
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"sender_account_id": 1,
|
|
"external_receiver_info": "Bank ABC - Account 67890",
|
|
"amount": 100.00,
|
|
"currency": "USD",
|
|
"description": "Utility bill payment"
|
|
}'
|
|
```
|
|
|
|
## Development
|
|
|
|
### Running Tests
|
|
|
|
```bash
|
|
pytest
|
|
```
|
|
|
|
### Code Linting
|
|
|
|
```bash
|
|
ruff check .
|
|
```
|
|
|
|
### Code Formatting
|
|
|
|
```bash
|
|
ruff format .
|
|
``` |