SaaS Invoicing Application

A SaaS invoicing application backend built with FastAPI and SQLite. This application provides a complete solution for managing customers, products/services, invoices, and payments with user authentication and authorization.

Features

  • User Management: Registration, authentication, and profile management
  • Customer Management: Store and manage customer information
  • Product/Service Catalog: Manage your products and services with pricing
  • Invoice Management: Create, update, and manage invoices
  • PDF Invoice Generation: Generate professional PDF invoices
  • Payment Tracking: Record and track payments for invoices
  • Multi-tenant Architecture: Each user has their own isolated data

Technology Stack

  • Backend: FastAPI
  • Database: SQLite with SQLAlchemy ORM
  • Authentication: JWT tokens
  • PDF Generation: WeasyPrint
  • Migrations: Alembic
  • Validation: Pydantic

Getting Started

Prerequisites

  • Python 3.8+
  • Pip package manager

Installation

  1. Clone the repository:
git clone <repository-url>
cd saasinvoicingapplication
  1. Set up a virtual environment:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. Install dependencies:
pip install -r requirements.txt
  1. Set up environment variables (or create a .env file):
SECRET_KEY=your-secret-key  # Change this in production!
  1. Run database migrations:
alembic upgrade head

Running the Application

Start the application with Uvicorn:

uvicorn main:app --reload

The API will be available at http://localhost:8000, and the interactive documentation at http://localhost:8000/docs.

API Documentation

The API is fully documented with OpenAPI and is available at the /docs endpoint. The main endpoints include:

  • Authentication: /api/v1/auth/*

    • Register: POST /api/v1/auth/register
    • Login: POST /api/v1/auth/login
    • JSON Login: POST /api/v1/auth/login/json
  • Users: /api/v1/users/*

    • Get current user: GET /api/v1/users/me
    • Update current user: PATCH /api/v1/users/me
  • Customers: /api/v1/customers/*

    • List customers: GET /api/v1/customers
    • Create customer: POST /api/v1/customers
    • Get customer: GET /api/v1/customers/{customer_id}
    • Update customer: PATCH /api/v1/customers/{customer_id}
    • Delete customer: DELETE /api/v1/customers/{customer_id}
  • Products: /api/v1/products/*

    • List products: GET /api/v1/products
    • Create product: POST /api/v1/products
    • Get product: GET /api/v1/products/{product_id}
    • Update product: PATCH /api/v1/products/{product_id}
    • Delete product: DELETE /api/v1/products/{product_id}
  • Invoices: /api/v1/invoices/*

    • List invoices: GET /api/v1/invoices
    • Create invoice: POST /api/v1/invoices
    • Get invoice: GET /api/v1/invoices/{invoice_id}
    • Update invoice: PATCH /api/v1/invoices/{invoice_id}
    • Delete invoice: DELETE /api/v1/invoices/{invoice_id}
    • Update status: PATCH /api/v1/invoices/{invoice_id}/status
    • Generate PDF: GET /api/v1/invoices/{invoice_id}/pdf
  • Payments: /api/v1/payments/*

    • List payments: GET /api/v1/payments
    • List invoice payments: GET /api/v1/payments/invoice/{invoice_id}
    • Create payment: POST /api/v1/payments
    • Get payment: GET /api/v1/payments/{payment_id}
    • Update payment: PATCH /api/v1/payments/{payment_id}
    • Delete payment: DELETE /api/v1/payments/{payment_id}

Environment Variables

The following environment variables can be configured:

  • SECRET_KEY: Secret key for JWT token encryption (required)
  • ACCESS_TOKEN_EXPIRE_MINUTES: Token expiration time in minutes (default: 60 * 24 * 7)
  • PROJECT_NAME: Application name (default: "SaaS Invoicing Application")
  • BACKEND_CORS_ORIGINS: CORS origins allowed (default: "*")

Project Structure

├── alembic.ini           # Alembic configuration
├── app/                  # Application package
│   ├── api/              # API endpoints
│   │   └── v1/           # API version 1
│   ├── core/             # Core functionality
│   ├── crud/             # CRUD operations
│   ├── db/               # Database setup
│   ├── models/           # SQLAlchemy models
│   ├── schemas/          # Pydantic schemas
│   ├── services/         # Business logic services
│   ├── templates/        # HTML templates for PDF generation
│   └── utils/            # Utility functions
├── migrations/           # Alembic migrations
│   ├── versions/         # Migration scripts
│   └── env.py            # Migration environment
├── main.py               # Application entry point
└── requirements.txt      # Project dependencies

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Description
Project: SaaS Invoicing Application
Readme 60 KiB
Languages
Python 99.4%
Mako 0.6%