# 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 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 . ```