# Travel App Backend A FastAPI-based backend application for a travel planning and management system. ## Features - **User Management**: Create and manage user accounts - **Destination Management**: Add, update, and browse travel destinations - **Trip Planning**: Create and manage travel trips with destinations, dates, and budgets - **RESTful API**: Full CRUD operations for all resources - **Database Integration**: SQLite database with SQLAlchemy ORM - **API Documentation**: Automatic OpenAPI documentation ## Tech Stack - **Framework**: FastAPI - **Database**: SQLite - **ORM**: SQLAlchemy - **Migrations**: Alembic - **Validation**: Pydantic - **Server**: Uvicorn ## Installation 1. Install dependencies: ```bash pip install -r requirements.txt ``` 2. Run database migrations: ```bash alembic upgrade head ``` 3. Start the server: ```bash uvicorn main:app --reload ``` The API will be available at `http://localhost:8000` ## API Documentation - **Interactive Docs**: http://localhost:8000/docs - **ReDoc**: http://localhost:8000/redoc - **OpenAPI JSON**: http://localhost:8000/openapi.json ## API Endpoints ### Root - `GET /` - API information and links - `GET /health` - Health check endpoint ### Users - `GET /api/users/` - List all users - `GET /api/users/{user_id}` - Get user by ID - `POST /api/users/` - Create new user - `PUT /api/users/{user_id}` - Update user ### Destinations - `GET /api/destinations/` - List all destinations - `GET /api/destinations/{destination_id}` - Get destination by ID - `POST /api/destinations/` - Create new destination - `PUT /api/destinations/{destination_id}` - Update destination - `DELETE /api/destinations/{destination_id}` - Delete destination ### Trips - `GET /api/trips/` - List all trips - `GET /api/trips/{trip_id}` - Get trip by ID - `GET /api/trips/user/{user_id}` - Get trips for specific user - `POST /api/trips/` - Create new trip - `PUT /api/trips/{trip_id}` - Update trip - `DELETE /api/trips/{trip_id}` - Delete trip ## Database Schema ### Users - `id`: Primary key - `email`: Unique email address - `full_name`: User's full name - `hashed_password`: Encrypted password - `is_active`: Account status - `created_at`: Account creation timestamp - `updated_at`: Last update timestamp ### Destinations - `id`: Primary key - `name`: Destination name - `country`: Country name - `city`: City name - `description`: Destination description - `latitude`: GPS latitude - `longitude`: GPS longitude - `rating`: Destination rating (0-5) - `image_url`: Destination image URL - `created_at`: Creation timestamp - `updated_at`: Last update timestamp ### Trips - `id`: Primary key - `title`: Trip title - `description`: Trip description - `user_id`: Foreign key to Users table - `destination_id`: Foreign key to Destinations table - `start_date`: Trip start date - `end_date`: Trip end date - `budget`: Trip budget - `status`: Trip status (planned, ongoing, completed, cancelled) - `created_at`: Creation timestamp - `updated_at`: Last update timestamp ## Development ### Running with Ruff ```bash ruff check . ruff format . ``` ### Database Migrations ```bash # Create new migration alembic revision --autogenerate -m "Description" # Apply migrations alembic upgrade head # Rollback migration alembic downgrade -1 ``` ## Storage The application uses `/app/storage/db/` directory for SQLite database storage. ## CORS Configuration The API is configured to allow all origins (*) for development purposes.