157 lines
4.8 KiB
Markdown

# Small Business Inventory Management System
A FastAPI-based inventory management system designed for small businesses. This API provides comprehensive inventory management capabilities including product management, inventory movement tracking, supplier and category organization, user authentication, and reporting.
## Features
- **Product Management**: Create, update, and delete products with details such as SKU, barcode, price, and stock levels
- **Category & Supplier Management**: Organize products by categories and suppliers
- **Inventory Movement Tracking**: Track all inventory changes (stock in, stock out, adjustments, returns)
- **User Authentication**: Secure API access with JWT-based authentication
- **Reports**: Generate inventory insights including low stock alerts, inventory valuation, and movement history
- **Health Monitoring**: Monitor API and database health
## Tech Stack
- **Framework**: FastAPI
- **Database**: SQLite with SQLAlchemy ORM
- **Migrations**: Alembic
- **Authentication**: JWT tokens with OAuth2
- **Validation**: Pydantic models
## Getting Started
### Prerequisites
- Python 3.8+
- pip (Python package manager)
### Installation
1. Clone the repository:
```
git clone https://github.com/yourusername/smallbusinessinventorymanagementsystem.git
cd smallbusinessinventorymanagementsystem
```
2. Create a virtual environment:
```
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
```
3. Install dependencies:
```
pip install -r requirements.txt
```
4. Initialize the database:
```
alembic upgrade head
```
5. Run the application:
```
uvicorn main:app --reload
```
The API will be available at http://localhost:8000
### Environment Variables
The application uses the following environment variables:
| Variable | Description | Default |
|----------|-------------|---------|
| SECRET_KEY | Secret key for JWT token generation | *Random generated key* |
| ACCESS_TOKEN_EXPIRE_MINUTES | JWT token expiration time in minutes | 11520 (8 days) |
| DEBUG | Enable debug mode | False |
| ENVIRONMENT | Environment name (development, production) | development |
## API Documentation
Once the application is running, you can access the interactive API documentation at:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
## API Endpoints
The API is organized around the following resources:
### Authentication
- `POST /api/v1/auth/login/access-token` - Get access token
- `POST /api/v1/auth/login/test-token` - Test access token
### Users
- `GET /api/v1/users` - List all users (admin only)
- `POST /api/v1/users` - Create new user (admin only)
- `GET /api/v1/users/me` - Get current user
- `PUT /api/v1/users/me` - Update current user
- `GET /api/v1/users/{user_id}` - Get user by ID (admin only)
- `PUT /api/v1/users/{user_id}` - Update user (admin only)
### Products
- `GET /api/v1/products` - List all products
- `POST /api/v1/products` - Create new product
- `GET /api/v1/products/{product_id}` - Get product by ID
- `PUT /api/v1/products/{product_id}` - Update product
- `DELETE /api/v1/products/{product_id}` - Delete product
- `PATCH /api/v1/products/{product_id}/stock` - Update product stock
### Categories
- `GET /api/v1/categories` - List all categories
- `POST /api/v1/categories` - Create new category
- `GET /api/v1/categories/{category_id}` - Get category by ID
- `PUT /api/v1/categories/{category_id}` - Update category
- `DELETE /api/v1/categories/{category_id}` - Delete category
### Suppliers
- `GET /api/v1/suppliers` - List all suppliers
- `POST /api/v1/suppliers` - Create new supplier
- `GET /api/v1/suppliers/{supplier_id}` - Get supplier by ID
- `PUT /api/v1/suppliers/{supplier_id}` - Update supplier
- `DELETE /api/v1/suppliers/{supplier_id}` - Delete supplier
### Inventory Movements
- `GET /api/v1/inventory/movements` - List inventory movements
- `POST /api/v1/inventory/movements` - Create inventory movement
- `GET /api/v1/inventory/movements/{movement_id}` - Get movement by ID
- `DELETE /api/v1/inventory/movements/{movement_id}` - Delete movement
### Reports
- `GET /api/v1/reports/low-stock` - Get low stock products
- `GET /api/v1/reports/inventory-value` - Get inventory value
- `GET /api/v1/reports/movement-summary` - Get movement summary
### Health Check
- `GET /api/v1/health` - Check API health
## Default Admin User
On first run, the system creates a default admin user:
- Email: admin@example.com
- Password: admin
**Important:** Change the default admin password in production environments.
## Development
### Running Tests
```
# TODO: Add test commands
```
### Code Formatting
The project uses Ruff for code formatting and linting:
```
ruff check .
ruff format .
```
## License
This project is licensed under the MIT License - see the LICENSE file for details.