Automated Action 9e56bda916 Implement Multimodal Ticketing System with FastAPI and SQLite
This commit includes:
- Project structure and FastAPI setup
- SQLAlchemy models for users, vehicles, schedules, and tickets
- Alembic migrations
- User authentication and management
- Vehicle and schedule management
- Ticket purchase and cancellation with time restrictions
- Comprehensive API documentation
2025-06-17 11:08:42 +00:00

3.5 KiB

Multimodal Ticketing System

A backend system built with FastAPI that allows users to purchase tickets for different transportation modes (cars, buses, trains).

Features

  • User registration and authentication
  • User profile management
  • Vehicle management (cars, buses, trains)
  • Schedule management for different vehicles
  • Ticket purchasing with time restrictions
  • Ticket cancellation with time restrictions
  • View active tickets and ticket history

Requirements

  • Python 3.8+
  • SQLite database

Environment Variables

The application uses the following environment variables:

Variable Description Default
SECRET_KEY JWT secret key "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
ACCESS_TOKEN_EXPIRE_MINUTES Token expiration time in minutes 30

Installation

  1. Clone the repository:
git clone <repository-url>
cd multimodalticketingsystem
  1. Create a virtual environment and activate it:
python -m venv venv
source venv/bin/activate  # On Windows, use `venv\Scripts\activate`
  1. Install the required dependencies:
pip install -r requirements.txt
  1. Run the database migrations:
alembic upgrade head
  1. Start the application:
uvicorn main:app --reload

The API will be available at http://localhost:8000.

API Documentation

The API documentation is available at:

API Endpoints

Authentication

  • POST /api/v1/auth/register - Register a new user
  • POST /api/v1/auth/login - Login and get access token

Users

  • GET /api/v1/users/me - Get current user profile
  • PUT /api/v1/users/me - Update current user profile

Vehicles

  • GET /api/v1/vehicles - List all vehicles
  • POST /api/v1/vehicles - Create a new vehicle
  • GET /api/v1/vehicles/{vehicle_id} - Get vehicle details
  • PUT /api/v1/vehicles/{vehicle_id} - Update a vehicle
  • DELETE /api/v1/vehicles/{vehicle_id} - Delete a vehicle (soft delete)

Schedules

  • GET /api/v1/vehicles/schedules - List all schedules
  • POST /api/v1/vehicles/schedules - Create a new schedule
  • GET /api/v1/vehicles/schedules/{schedule_id} - Get schedule details
  • PUT /api/v1/vehicles/schedules/{schedule_id} - Update a schedule
  • DELETE /api/v1/vehicles/schedules/{schedule_id} - Delete a schedule (soft delete)

Tickets

  • POST /api/v1/tickets - Purchase a ticket
  • GET /api/v1/tickets - List all tickets for current user
  • GET /api/v1/tickets/active - List active tickets for current user
  • GET /api/v1/tickets/history - List ticket history for current user
  • GET /api/v1/tickets/{ticket_id} - Get ticket details by ID
  • GET /api/v1/tickets/by-ticket-number/{ticket_number} - Get ticket details by ticket number
  • PUT /api/v1/tickets/{ticket_id}/cancel - Cancel a ticket

Business Rules

  • Tickets cannot be purchased less than 10 minutes before departure time
  • Tickets cannot be cancelled less than 3 minutes before departure time
  • Train tickets include a seat number, while car and bus tickets do not
  • When a ticket is cancelled, the seat becomes available for purchase again

Database Structure

The system uses the following database models:

  • Users: Store user information
  • Vehicles: Store different types of vehicles (cars, buses, trains)
  • Schedules: Store departure and arrival information for vehicles
  • Tickets: Store ticket information linked to users and schedules