131 lines
4.1 KiB
Markdown
131 lines
4.1 KiB
Markdown
# Business Models Python Port
|
|
|
|
This directory contains a Python port of the business models from the Rust codebase, using SQLModel for database integration.
|
|
|
|
## Overview
|
|
|
|
This project includes:
|
|
|
|
1. Python port of Rust business models using SQLModel
|
|
2. FastAPI server with OpenAPI/Swagger documentation
|
|
3. CRUD operations for all models
|
|
4. Convenience endpoints for common operations
|
|
|
|
The models ported from Rust to Python include:
|
|
|
|
- **Currency**: Represents a monetary value with amount and currency code
|
|
- **Customer**: Represents a customer who can purchase products or services
|
|
- **Product**: Represents a product or service offered
|
|
- **ProductComponent**: Represents a component of a product
|
|
- **SaleItem**: Represents an item in a sale
|
|
- **Sale**: Represents a sale of products or services
|
|
|
|
## Structure
|
|
|
|
- `models.py`: Contains the SQLModel definitions for all business models
|
|
- `example.py`: Demonstrates how to use the models with a sample application
|
|
- `install_and_run.sh`: Bash script to install dependencies using `uv` and run the example
|
|
- `api.py`: FastAPI server providing CRUD operations for all models
|
|
- `server.sh`: Bash script to start the FastAPI server
|
|
|
|
## Requirements
|
|
|
|
- Python 3.7+
|
|
- [uv](https://github.com/astral-sh/uv) for dependency management
|
|
|
|
## Installation
|
|
|
|
The project uses `uv` for dependency management. To install dependencies and run the example:
|
|
|
|
```bash
|
|
./install_and_run.sh
|
|
```
|
|
|
|
## API Server
|
|
|
|
The project includes a FastAPI server that provides CRUD operations for all models and some convenience endpoints.
|
|
|
|
### Starting the Server
|
|
|
|
To start the API server:
|
|
|
|
```bash
|
|
./server.sh
|
|
```
|
|
|
|
This script will:
|
|
1. Create a virtual environment if it doesn't exist
|
|
2. Install the required dependencies using `uv`
|
|
3. Start the FastAPI server with hot reloading enabled
|
|
|
|
### API Documentation
|
|
|
|
Once the server is running, you can access the OpenAPI documentation at:
|
|
|
|
- Swagger UI: http://localhost:8000/docs
|
|
- ReDoc: http://localhost:8000/redoc
|
|
|
|
### Available Endpoints
|
|
|
|
The API provides the following endpoints:
|
|
|
|
#### Currencies
|
|
- `GET /currencies/`: List all currencies
|
|
- `POST /currencies/`: Create a new currency
|
|
- `GET /currencies/{currency_id}`: Get a specific currency
|
|
- `PUT /currencies/{currency_id}`: Update a currency
|
|
- `DELETE /currencies/{currency_id}`: Delete a currency
|
|
|
|
#### Customers
|
|
- `GET /customers/`: List all customers
|
|
- `POST /customers/`: Create a new customer
|
|
- `GET /customers/{customer_id}`: Get a specific customer
|
|
- `PUT /customers/{customer_id}`: Update a customer
|
|
- `DELETE /customers/{customer_id}`: Delete a customer
|
|
- `GET /customers/{customer_id}/sales/`: Get all sales for a customer
|
|
|
|
#### Products
|
|
- `GET /products/`: List all products
|
|
- `POST /products/`: Create a new product
|
|
- `GET /products/{product_id}`: Get a specific product
|
|
- `PUT /products/{product_id}`: Update a product
|
|
- `DELETE /products/{product_id}`: Delete a product
|
|
- `GET /products/available/`: Get all available products
|
|
- `POST /products/{product_id}/components/`: Add a component to a product
|
|
- `GET /products/{product_id}/components/`: Get all components for a product
|
|
|
|
#### Sales
|
|
- `GET /sales/`: List all sales
|
|
- `POST /sales/`: Create a new sale
|
|
- `GET /sales/{sale_id}`: Get a specific sale
|
|
- `PUT /sales/{sale_id}`: Update a sale
|
|
- `DELETE /sales/{sale_id}`: Delete a sale
|
|
- `PUT /sales/{sale_id}/status/{status}`: Update the status of a sale
|
|
- `POST /sales/{sale_id}/items/`: Add an item to a sale
|
|
- `GET /sales/{sale_id}/items/`: Get all items for a sale
|
|
|
|
## Dependencies
|
|
|
|
- SQLModel: For database models and ORM functionality
|
|
- Pydantic: For data validation (used by SQLModel)
|
|
- FastAPI: For creating the API server
|
|
- Uvicorn: ASGI server for running FastAPI applications
|
|
|
|
## Example Usage
|
|
|
|
The `example.py` script demonstrates:
|
|
|
|
1. Creating an SQLite database
|
|
2. Defining and creating tables for the models
|
|
3. Creating sample data (customers, products, sales)
|
|
4. Performing operations on the data
|
|
5. Querying and displaying the data
|
|
|
|
To run the example manually (after activating the virtual environment):
|
|
|
|
```bash
|
|
# From the py directory
|
|
python example.py
|
|
|
|
# Or from the parent directory
|
|
cd py && python example.py |