todo-app / README.md
Shurem's picture
migration version issue fixed
c76eb37
|
Raw
History Blame Contribute Delete
3.49 kB
---
title: Todo App Backend
emoji: πŸš€
colorFrom: blue
colorTo: green
sdk: docker
sdk_version: "20.10.0"
app_file: app/main.py
pinned: false
---
# Todo App - Backend with FastAPI + SQLModel
**Task**: T001-T009
**Spec**: 002-authentication
## Tech Stack
- **Framework**: FastAPI
- **ORM**: SQLModel (SQLAlchemy + Pydantic)
- **Database**: Neon Serverless PostgreSQL
- **Auth**: JWT with python-jose, BCrypt with passlib
- **Migrations**: Alembic
- **Package Manager**: uv (for fast dependency installation)
## Setup
1. **Create virtual environment**:
```bash
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
```
2. **Install dependencies**:
```bash
pip install -r requirements.txt
```
3. **Configure environment**:
```bash
cp .env.example .env
# Edit .env with your Neon DATABASE_URL and JWT_SECRET_KEY
```
4. **Run migrations**:
```bash
alembic upgrade head
```
5. **Start development server**:
```bash
uvicorn app.main:app --reload --port 8000
```
## API Documentation
When server is running:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- Health: http://localhost:8000/health
## Project Structure
```
backend/
β”œβ”€β”€ app/
β”‚ β”œβ”€β”€ main.py # FastAPI app entry point
β”‚ β”œβ”€β”€ database.py # SQLModel session management
β”‚ β”œβ”€β”€ models/ # SQLModel database models
β”‚ β”œβ”€β”€ schemas/ # Pydantic request/response schemas
β”‚ β”œβ”€β”€ auth/ # Authentication utilities
β”‚ └── api/ # API route handlers
β”œβ”€β”€ migrations/ # Alembic migrations
β”œβ”€β”€ tests/ # Pytest tests
└── requirements.txt # Python dependencies
```
## Testing
```bash
pytest
```
## Environment Variables
Required in `.env`:
- `DATABASE_URL` - Neon PostgreSQL connection string
- `JWT_SECRET_KEY` - Secret key for JWT signing (32+ bytes)
- `JWT_ALGORITHM` - JWT algorithm (default: HS256)
- `JWT_ACCESS_TOKEN_EXPIRE_MINUTES` - Token expiration (default: 60)
- `ALLOWED_ORIGINS` - CORS allowed origins (default: http://localhost:3000)
See `.env.example` for details.
## Deployment with Docker
This application can be deployed using Docker. The Dockerfile uses the **uv package manager** for fast dependency installation.
### Prerequisites
- Docker installed on your system
- Docker Compose (optional)
### Building the Docker Image
```bash
# Build the Docker image
docker build -t todo-app .
# Run the container
docker run -p 8000:8000 todo-app
```
### Using Docker Compose (Optional)
Create a `docker-compose.yml` file:
```yaml
version: '3.8'
services:
todo-app:
build: .
ports:
- "8000:8000"
environment:
- ENV=production
- DATABASE_URL=your_database_url
- JWT_SECRET_KEY=your_jwt_secret
```
Then run:
```bash
docker-compose up
```
## About uv Package Manager
This project uses [uv](https://github.com/astral-sh/uv) as the package manager, which is a fast Python package installer and resolver.
uv is used in the Dockerfile for significantly faster dependency installation compared to pip.
Key benefits of uv:
- Up to 100x faster than pip install
- Built with Rust for performance
- Drop-in replacement for pip
- Efficient dependency resolution