152 lines
4.8 KiB
Markdown
152 lines
4.8 KiB
Markdown
# E-Commerce API Backend
|
|
|
|
A complete e-commerce backend API built with FastAPI and SQLite. This API provides all the essential features needed for an e-commerce platform including user management, product catalog, shopping cart, orders, and reviews.
|
|
|
|
## Features
|
|
|
|
- **User Management**: Registration, authentication, profile management
|
|
- **Product Catalog**: Products with categories, search, and filtering
|
|
- **Shopping Cart**: Add, update, remove items, and checkout
|
|
- **Order Management**: Create orders, track status, and view history
|
|
- **Reviews**: Product ratings and comments
|
|
- **Admin Functions**: Manage products, categories, and order statuses
|
|
|
|
## Tech Stack
|
|
|
|
- **Framework**: FastAPI
|
|
- **Database**: SQLite with SQLAlchemy ORM
|
|
- **Authentication**: JWT (JSON Web Tokens)
|
|
- **Migrations**: Alembic
|
|
- **Validation**: Pydantic
|
|
- **Linting**: Ruff
|
|
|
|
## API Documentation
|
|
|
|
The API is self-documented with OpenAPI and provides interactive documentation at:
|
|
|
|
- Swagger UI: `/docs`
|
|
- ReDoc: `/redoc`
|
|
|
|
## API Endpoints
|
|
|
|
### Authentication
|
|
|
|
- `POST /api/v1/auth/register` - Register a new user
|
|
- `POST /api/v1/auth/login` - Login to get access token
|
|
|
|
### Users
|
|
|
|
- `GET /api/v1/users/me` - Get current user profile
|
|
- `PUT /api/v1/users/me` - Update current user profile
|
|
- `GET /api/v1/users/{user_id}` - Get user by ID (admin or self only)
|
|
|
|
### Products
|
|
|
|
- `GET /api/v1/products` - List products with filtering options
|
|
- `POST /api/v1/products` - Create a new product (admin only)
|
|
- `GET /api/v1/products/{id}` - Get product by ID
|
|
- `PUT /api/v1/products/{id}` - Update product (admin only)
|
|
- `DELETE /api/v1/products/{id}` - Delete product (admin only)
|
|
|
|
### Categories
|
|
|
|
- `GET /api/v1/categories` - List all categories
|
|
- `POST /api/v1/categories` - Create a new category (admin only)
|
|
- `GET /api/v1/categories/{id}` - Get category by ID
|
|
- `PUT /api/v1/categories/{id}` - Update category (admin only)
|
|
- `DELETE /api/v1/categories/{id}` - Delete category (admin only)
|
|
|
|
### Shopping Cart
|
|
|
|
- `GET /api/v1/cart` - Get current user's cart
|
|
- `POST /api/v1/cart/items` - Add item to cart
|
|
- `PUT /api/v1/cart/items/{product_id}` - Update cart item quantity
|
|
- `DELETE /api/v1/cart/items/{product_id}` - Remove item from cart
|
|
- `DELETE /api/v1/cart` - Clear cart
|
|
|
|
### Orders
|
|
|
|
- `GET /api/v1/orders` - List user's orders
|
|
- `POST /api/v1/orders` - Create a new order
|
|
- `GET /api/v1/orders/{order_id}` - Get order by ID
|
|
- `PUT /api/v1/orders/{order_id}` - Update order status (admin only)
|
|
- `DELETE /api/v1/orders/{order_id}` - Cancel order (pending orders only)
|
|
|
|
### Reviews
|
|
|
|
- `GET /api/v1/reviews/product/{product_id}` - Get reviews for a product
|
|
- `POST /api/v1/reviews` - Create a product review
|
|
- `PUT /api/v1/reviews/{review_id}` - Update a review
|
|
- `DELETE /api/v1/reviews/{review_id}` - Delete a review
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
|
|
- Python 3.8+
|
|
- pip
|
|
|
|
### Installation
|
|
|
|
1. Clone the repository
|
|
2. Install dependencies:
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### Running the Application
|
|
|
|
```bash
|
|
uvicorn main:app --reload
|
|
```
|
|
|
|
### Database Migrations
|
|
|
|
Initialize the database with:
|
|
|
|
```bash
|
|
alembic upgrade head
|
|
```
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
/
|
|
├── alembic.ini # Alembic configuration
|
|
├── main.py # FastAPI application entry point
|
|
├── requirements.txt # Project dependencies
|
|
├── app/ # Application package
|
|
│ ├── api/ # API endpoints
|
|
│ │ ├── deps.py # API dependencies
|
|
│ │ ├── router.py # Main API router
|
|
│ │ └── endpoints/ # API endpoint modules
|
|
│ ├── core/ # Core modules
|
|
│ │ ├── config.py # Configuration settings
|
|
│ │ └── security.py # Security utilities
|
|
│ ├── crud/ # CRUD operations
|
|
│ ├── db/ # Database setup
|
|
│ │ ├── base.py # Base model imports
|
|
│ │ ├── deps.py # Database dependencies
|
|
│ │ └── session.py # Database session
|
|
│ ├── models/ # SQLAlchemy models
|
|
│ ├── schemas/ # Pydantic schemas
|
|
│ ├── services/ # Business logic services
|
|
│ └── utils/ # Utility functions
|
|
└── migrations/ # Alembic migrations
|
|
├── env.py # Migration environment
|
|
├── script.py.mako # Migration script template
|
|
└── versions/ # Migration versions
|
|
```
|
|
|
|
## Authentication
|
|
|
|
The API uses JWT for authentication. To authenticate:
|
|
|
|
1. Register a user with `POST /api/v1/auth/register`
|
|
2. Get a token with `POST /api/v1/auth/login`
|
|
3. Include the token in the `Authorization` header of your requests:
|
|
`Authorization: Bearer {your_token}`
|
|
|
|
## Health Check
|
|
|
|
A health check endpoint is available at `/health` to verify the API is running correctly. |