
- Fix unused imports in API endpoints - Add proper __all__ exports in model and schema modules - Add proper TYPE_CHECKING imports in models to prevent circular imports - Fix import order in migrations - Fix long lines in migration scripts - All ruff checks passing
133 lines
4.7 KiB
Markdown
133 lines
4.7 KiB
Markdown
# Small Business Inventory Management System
|
|
|
|
## Overview
|
|
This project is a comprehensive inventory management system designed for small businesses. It provides a robust REST API for managing products, categories, suppliers, and inventory transactions, along with analytics for business insights.
|
|
|
|
## Features
|
|
- **User Authentication**: Secure login and user management
|
|
- **Product Management**: CRUD operations for products with SKU, pricing, and stock levels
|
|
- **Category Management**: Organize products into categories
|
|
- **Supplier Management**: Track and manage your suppliers
|
|
- **Inventory Transactions**: Record purchases, sales, returns, and adjustments
|
|
- **Inventory Analytics**: Get insights into your inventory performance
|
|
- **Stock Alerts**: Identify low stock and out-of-stock products
|
|
|
|
## Tech Stack
|
|
- **Framework**: FastAPI
|
|
- **Database**: SQLite
|
|
- **ORM**: SQLAlchemy
|
|
- **Authentication**: JWT (JSON Web Tokens)
|
|
- **Migrations**: Alembic
|
|
|
|
## API Endpoints
|
|
|
|
### Authentication
|
|
- `POST /api/v1/auth/login` - Login to get access token
|
|
- `POST /api/v1/auth/test-token` - Verify access token
|
|
|
|
### Users
|
|
- `GET /api/v1/users/` - List all users (admin only)
|
|
- `POST /api/v1/users/` - Create a new user (admin only)
|
|
- `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
|
|
- `PUT /api/v1/users/{user_id}` - Update user (admin only)
|
|
|
|
### Categories
|
|
- `GET /api/v1/categories/` - List all categories
|
|
- `POST /api/v1/categories/` - Create a new category
|
|
- `GET /api/v1/categories/{id}` - Get category by ID
|
|
- `PUT /api/v1/categories/{id}` - Update category
|
|
- `DELETE /api/v1/categories/{id}` - Delete category (admin only)
|
|
|
|
### Suppliers
|
|
- `GET /api/v1/suppliers/` - List all suppliers
|
|
- `POST /api/v1/suppliers/` - Create a new supplier
|
|
- `GET /api/v1/suppliers/{id}` - Get supplier by ID
|
|
- `PUT /api/v1/suppliers/{id}` - Update supplier
|
|
- `DELETE /api/v1/suppliers/{id}` - Delete supplier (admin only)
|
|
|
|
### Products
|
|
- `GET /api/v1/products/` - List all products
|
|
- `POST /api/v1/products/` - Create a new product
|
|
- `GET /api/v1/products/{id}` - Get product by ID
|
|
- `PUT /api/v1/products/{id}` - Update product
|
|
- `DELETE /api/v1/products/{id}` - Delete product
|
|
- `GET /api/v1/products/by-category/{category_id}` - Get products by category
|
|
- `GET /api/v1/products/by-supplier/{supplier_id}` - Get products by supplier
|
|
- `GET /api/v1/products/low-stock` - Get low stock products
|
|
- `GET /api/v1/products/out-of-stock` - Get out of stock products
|
|
|
|
### Inventory Transactions
|
|
- `POST /api/v1/inventory-transactions/` - Create a new transaction
|
|
- `GET /api/v1/inventory-transactions/` - List all transactions
|
|
- `GET /api/v1/inventory-transactions/{id}` - Get transaction by ID
|
|
- `GET /api/v1/inventory-transactions/by-product/{product_id}` - Get transactions by product
|
|
- `GET /api/v1/inventory-transactions/by-type/{transaction_type}` - Get transactions by type
|
|
|
|
### Analytics
|
|
- `GET /api/v1/analytics/inventory-summary` - Get inventory summary
|
|
- `GET /api/v1/analytics/transaction-history` - Get transaction history
|
|
- `GET /api/v1/analytics/product-performance` - Get product performance
|
|
- `GET /api/v1/analytics/category-performance` - Get category performance
|
|
|
|
## Installation and Setup
|
|
|
|
### Prerequisites
|
|
- Python 3.8+
|
|
- pip
|
|
|
|
### Setting Up the Environment
|
|
1. Clone the repository:
|
|
```bash
|
|
git clone <repository-url>
|
|
cd smallbusinessinventorymanagementsystem
|
|
```
|
|
|
|
2. Install the required packages:
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
3. Create a `.env` file in the root directory (optional):
|
|
```
|
|
SECRET_KEY=your_secret_key_here
|
|
ACCESS_TOKEN_EXPIRE_MINUTES=43200 # 30 days
|
|
```
|
|
|
|
### Database Setup
|
|
1. The application uses SQLite by default, stored at `/app/storage/db/db.sqlite`.
|
|
|
|
2. Run the database migrations:
|
|
```bash
|
|
alembic upgrade head
|
|
```
|
|
|
|
### Running the Application
|
|
1. Start the FastAPI server:
|
|
```bash
|
|
uvicorn main:app --reload
|
|
```
|
|
|
|
2. Access the API documentation at:
|
|
- Swagger UI: http://localhost:8000/docs
|
|
- ReDoc: http://localhost:8000/redoc
|
|
|
|
## Environment Variables
|
|
| Variable | Description | Default |
|
|
|----------|-------------|---------|
|
|
| SECRET_KEY | Secret key for JWT encoding | "CHANGE_ME_IN_PRODUCTION" |
|
|
| ACCESS_TOKEN_EXPIRE_MINUTES | Token expiration time in minutes | 10080 (7 days) |
|
|
| SQLALCHEMY_DATABASE_URL | Database connection URL | "sqlite:///app/storage/db/db.sqlite" |
|
|
|
|
## Development
|
|
### Creating a Superuser
|
|
To create a superuser account, you can use the API or add a user directly to the database with the `is_superuser` flag set to `True`.
|
|
|
|
### Running Tests
|
|
```bash
|
|
pytest
|
|
```
|
|
|
|
## License
|
|
This project is licensed under the MIT License - see the LICENSE file for details. |