Overview
The Solicitud Transporte API is built using a modern, layered architecture pattern that separates concerns and enables maintainability and scalability. The system manages transportation requests and missions for the ONI Justicia organization.
Technology Stack
FastAPI
Modern Python web framework for building APIs with automatic OpenAPI documentation
SQL Server
Primary relational database for transactional data using pymssql driver
MongoDB
NoSQL database for logging and flexible document storage using pymongo
Application Layers
The application follows a clean, layered architecture:1. Router Layer (routers/)
The router layer handles HTTP requests and responses. Each router corresponds to a specific resource or domain entity.
Key Responsibilities
Key Responsibilities
- Request validation using Pydantic models
- HTTP endpoint definition and routing
- Response formatting and status codes
- Authentication and authorization (future)
solicitud_router.py- Transport request management (main.py:31)mision_router.py- Mission operations (main.py:33)vehiculo_router.py- Vehicle catalog (main.py:29)motorista_router.py- Driver management (main.py:30)
2. Service Layer (services/)
The service layer contains the business logic and orchestrates operations across multiple data sources.
All services inherit from
BaseService which provides common utilities for database access and data serialization (services/base_service.py:14)3. Database Layer (database/)
Provides abstraction for database operations with connection pooling and error handling.
- SQL Server
- MongoDB
File:
database/sql_connection.pyThe SQLServerManager class provides:- Connection pooling via context managers (sql_connection.py:68)
- Parameterized queries to prevent SQL injection (sql_connection.py:107)
- Automatic commit/rollback handling (sql_connection.py:184)
- CRUD helper methods (sql_connection.py:346)
4. Model Layer (models/)
Pydantic models define the data structure and validation rules for API requests and responses.
Request Models
EstadoSolicitudCreate(estado_solicitud_model.py:16)EstadoSolicitudUpdate(estado_solicitud_model.py:92)- Validation decorators for business rules
Response Models
EstadoSolicitudResponse(estado_solicitud_model.py:133)EstadoSolicitudListResponse(estado_solicitud_model.py:151)- Automatic serialization of database types
Database Design
The system uses a normalized relational database schema with the following key tables:Core Tables
Solicitud (Transport Requests)
Solicitud (Transport Requests)
Primary table for transportation requests (DevSolicitudTransporte:372)Key Fields:
CodigoSolicitud- Auto-generated code (SOL-YYYY-MM-########)IdUsuarioSolicitante- Requesting userIdDepartamentoSolicitante- Requesting departmentIdUsuarioAprobador- Approving authorityFechaServicioRequerido- Required service dateHoraServicioRequerido- Required service timeIdEstadoSolicitud- Current state (FK)
- One-to-many with
Mision(missions) - One-to-many with
HistoricoEstadoSolicitud(state history) - One-to-many with
DetalleLugarSolicitud(locations)
Mision (Missions)
Mision (Missions)
Represents actual transportation assignments (DevSolicitudTransporte:523)Key Fields:
IdSolicitud- Parent requestIdVehiculoAsignado- Assigned vehicleIdMotoristaAsignado- Assigned driverIdLugarOrigen/IdLugarDestino- Origin/destinationFechaProgramada- Scheduled dateKilometrajeInicio/KilometrajeFin- Odometer readingsCombustibleConsumidoGalones- Fuel consumption
EstadoSolicitud (Request States)
EstadoSolicitud (Request States)
Catalog of possible request states (DevSolicitudTransporte:35)Key Fields:
Codigo- Unique state code (e.g., PENDIENTE_APROBACION)Nombre- Display nameColor- UI color representationEsEstadoFinal- Whether this is a terminal stateOrden- Display order in workflow
EstadoMision (Mission States)
EstadoMision (Mission States)
Catalog of possible mission states (DevSolicitudTransporte:18)Key Fields:
Codigo- Unique state code (e.g., PROGRAMADA, EN_EJECUCION)Nombre- Display nameDescripcion- State description
Supporting Tables
- Vehiculo - Vehicle catalog with maintenance tracking (DevSolicitudTransporte:477)
- Perfil - User profiles linked to Usuario table (DevSolicitudTransporte:208)
- Departamento - Organizational departments (DevSolicitudTransporte:252)
- Lugares - Location registry with GPS coordinates (DevSolicitudTransporte:73)
Configuration Management
The application uses environment variables for configuration, loaded viaconfig.py:
Middleware & Error Handling
The application implements several middleware components:CORS Middleware
Configured to allow all origins for development (main.py:57):Global Exception Handlers
Folder Structure
Design Patterns
Singleton Pattern
Database managers use singleton pattern to reuse connections (sql_connection.py:501)
Repository Pattern
Service layer abstracts data access from business logic
Dependency Injection
Configuration injected via
get_settings() function (config.py:197)Context Manager
Database connections managed with Python context managers (sql_connection.py:68)
The architecture supports horizontal scaling by using connection pooling and stateless service design.
Next Steps
Workflow States
Learn about request and mission state transitions
Error Handling
Understand error responses and validation