# Invoice Generation Service This is a FastAPI application for generating and managing invoices. It allows you to create, read, update, and delete invoices without requiring user signup. ## Features - Generate invoices with automatic invoice number generation - Store invoice details in SQLite database - Retrieve invoice information by ID or invoice number - Update invoice details and status - Delete invoices - Health check endpoint ## Technical Stack - **Framework**: FastAPI - **Database**: SQLite with SQLAlchemy ORM - **Migrations**: Alembic - **Validation**: Pydantic - **Linting**: Ruff ## Project Structure ``` . ├── alembic.ini # Alembic configuration file ├── app # Application package │ ├── api # API routes │ │ └── routes # API route modules │ │ ├── __init__.py # Routes initialization │ │ └── invoices.py # Invoice routes │ ├── core # Core functionality │ │ ├── config.py # Application settings │ │ ├── database.py # Database connection setup │ │ └── utils.py # Utility functions │ ├── models # SQLAlchemy models │ │ ├── __init__.py # Models initialization │ │ └── invoice.py # Invoice and InvoiceItem models │ └── schemas # Pydantic schemas │ ├── __init__.py # Schemas initialization │ └── invoice.py # Invoice-related schemas ├── main.py # Application entry point ├── migrations # Alembic migrations │ ├── env.py # Alembic environment │ ├── script.py.mako # Migration script template │ └── versions # Migration scripts │ └── ef0aaab3a275_initial_database_tables.py # Initial migration ├── requirements.txt # Project dependencies └── pyproject.toml # Ruff configuration ``` ## API Endpoints ### Health Check - `GET /health`: Check if the service is running ### Invoice Management - `POST /api/v1/invoices`: Create a new invoice - `GET /api/v1/invoices`: List all invoices (with pagination) - `GET /api/v1/invoices/{invoice_id}`: Get a specific invoice by ID - `POST /api/v1/invoices/find`: Find an invoice by invoice number - `PATCH /api/v1/invoices/{invoice_id}`: Update an invoice - `PATCH /api/v1/invoices/{invoice_id}/status`: Update invoice status - `DELETE /api/v1/invoices/{invoice_id}`: Delete an invoice ## Setup and Installation 1. Clone the repository 2. Install dependencies: ``` pip install -r requirements.txt ``` 3. Run migrations: ``` alembic upgrade head ``` 4. Start the application: ``` uvicorn main:app --reload ``` ## API Documentation Once the application is running, you can access: - Interactive API documentation at `/docs` (Swagger UI) - Alternative API documentation at `/redoc` (ReDoc) ## Invoice Number Format Invoices are automatically assigned a unique invoice number with the format: - `INV-YYYYMM-XXXXXX`, where: - `INV` is a fixed prefix - `YYYYMM` is the year and month (e.g., 202307 for July 2023) - `XXXXXX` is a random alphanumeric string