# API Documentation ## Base URL ``` http://localhost:8000/api ``` ## Authentication Most endpoints require JWT token. Include token as query parameter: ``` ?token=your_jwt_token ``` ## Response Format All responses follow this format: **Success:** ```json { "data": {...}, "status": "success", "code": 200 } ``` **Error:** ```json { "detail": "Error message", "status": "error", "code": 400 } ``` --- ## Auth Endpoints ### Register User **POST** `/auth/register` Request: ```json { "email": "user@example.com", "password": "password123", "full_name": "John Doe" } ``` Response: ```json { "id": 1, "email": "user@example.com", "full_name": "John Doe", "created_at": "2024-04-19T10:00:00" } ``` ### Login **POST** `/auth/login?email=user@example.com&password=password123` Response: ```json { "access_token": "eyJhbGc...", "token_type": "bearer", "user": { "id": 1, "email": "user@example.com", "full_name": "John Doe" } } ``` ### Verify Token **POST** `/auth/verify-token?token=your_token` Response: ```json { "user_id": 1, "valid": true } ``` --- ## User Endpoints ### Get Current User **GET** `/users/me?token=your_token` Response: ```json { "id": 1, "email": "user@example.com", "full_name": "John Doe", "phone": "+1234567890", "address": "123 Main St", "city": "New York", "postal_code": "10001", "country": "USA" } ``` ### Update Profile **PUT** `/users/me?token=your_token` Request: ```json { "full_name": "Updated Name", "phone": "+0987654321", "address": "456 Oak Ave", "city": "Los Angeles" } ``` --- ## Product Endpoints ### List Products **GET** `/products?limit=20&skip=0` Query Parameters: - `limit` - Results per page (default: 20) - `skip` - Pagination offset (default: 0) - `category_id` - Filter by category - `gender` - Filter by gender (men/women) - `on_sale` - Filter on sale items (true/false) - `featured` - Filter featured items (true/false) Response: ```json [ { "id": 1, "name": "Premium Running Shoes", "description": "High-performance running shoes", "price": 129.99, "discount_price": 89.99, "category_id": 1, "gender": "men", "brand": "Nike", "sizes": ["6", "7", "8", "9", "10"], "colors": ["Black", "White", "Blue"], "stock": 50, "images": ["url1", "url2"], "is_featured": true, "is_on_sale": true, "created_at": "2024-04-19T10:00:00" } ] ``` ### Get Product Details **GET** `/products/{product_id}` ### Search Products **GET** `/products/search?q=shoes&limit=10` ### Create Product (Admin) **POST** `/products` Request: ```json { "name": "New Shoe", "description": "Description", "price": 99.99, "discount_price": null, "category_id": 1, "gender": "men", "brand": "Brand", "sizes": ["8", "9", "10"], "colors": ["Black", "White"], "stock": 50, "images": ["url1"], "is_featured": false, "is_on_sale": false } ``` ### Update Product (Admin) **PUT** `/products/{product_id}` ### Delete Product (Admin) **DELETE** `/products/{product_id}` --- ## Category Endpoints ### List Categories **GET** `/categories` ### Get Category **GET** `/categories/{category_id}` ### Create Category (Admin) **POST** `/categories` ### Update Category (Admin) **PUT** `/categories/{category_id}` ### Delete Category (Admin) **DELETE** `/categories/{category_id}` --- ## Cart Endpoints ### Get Cart **GET** `/cart?token=your_token` ### Add to Cart **POST** `/cart/add?token=your_token` Request: ```json { "product_id": 1, "quantity": 1, "size": "10", "color": "Black" } ``` ### Update Cart Item **PUT** `/cart/{cart_item_id}?token=your_token` Request: ```json { "quantity": 2 } ``` ### Remove from Cart **DELETE** `/cart/{cart_item_id}?token=your_token` ### Clear Cart **DELETE** `/cart?token=your_token` --- ## Order Endpoints ### Create Order **POST** `/orders?token=your_token` Request: ```json { "shipping_address": "123 Main St", "shipping_city": "New York", "shipping_postal_code": "10001", "shipping_country": "USA" } ``` Response: ```json { "id": 1, "order_number": "ORD-20240419100000-ABC123", "status": "pending", "total_amount": 199.99, "items": [...] } ``` ### Get User Orders **GET** `/orders/user/orders?token=your_token` ### Get Order Details **GET** `/orders/{order_id}?token=your_token` --- ## Wishlist Endpoints ### Get Wishlist **GET** `/wishlist?token=your_token` ### Add to Wishlist **POST** `/wishlist/{product_id}?token=your_token` ### Remove from Wishlist **DELETE** `/wishlist/{product_id}?token=your_token` --- ## Contact Endpoint ### Send Contact Message **POST** `/contact` Request: ```json { "name": "John Doe", "email": "john@example.com", "subject": "Question about products", "message": "I have a question..." } ``` --- ## Error Codes - `200` - Success - `201` - Created - `400` - Bad Request - `401` - Unauthorized - `403` - Forbidden - `404` - Not Found - `422` - Validation Error - `500` - Server Error ## Rate Limiting Currently no rate limiting. Consider implementing in production. ## CORS CORS is enabled for: - http://localhost:5173 - http://localhost:3000 - Configuration in `config.py`