6.5 KiB
6.5 KiB
Healthcare Management System Backend
A comprehensive backend API for a healthcare management system built with FastAPI and SQLite.
Features
- User Authentication and Authorization
- Patient Management
- Doctor Management
- Appointment Scheduling
- Medical Records Management
- Doctor Availability Scheduling
Tech Stack
- Framework: FastAPI
- Database: SQLite with SQLAlchemy ORM
- Migrations: Alembic
- Authentication: JWT Tokens
- Password Hashing: BCrypt
- Linting: Ruff
Project Structure
├── alembic.ini # Alembic configuration
├── main.py # Application entry point
├── app/ # Main application package
│ ├── api/ # API endpoints
│ │ ├── api_v1/ # API version 1
│ │ │ ├── endpoints/ # API endpoint modules
│ │ │ │ ├── login.py # Authentication endpoints
│ │ │ │ ├── users.py # User management endpoints
│ │ │ │ ├── patients.py # Patient management endpoints
│ │ │ │ ├── doctors.py # Doctor management endpoints
│ │ │ │ └── appointments.py # Appointment management endpoints
│ │ │ └── api.py # API router
│ │ └── deps.py # Dependency injection
│ ├── core/ # Core application modules
│ │ ├── config.py # Application configuration
│ │ └── security.py # Security utilities
│ ├── crud/ # CRUD operations
│ │ ├── base.py # Base CRUD class
│ │ ├── crud_user.py # User CRUD operations
│ │ ├── crud_patient.py # Patient CRUD operations
│ │ ├── crud_doctor.py # Doctor CRUD operations
│ │ └── crud_appointment.py # Appointment CRUD operations
│ ├── db/ # Database setup
│ │ ├── base.py # Base class for models
│ │ ├── base_class.py # Imports all models for Alembic
│ │ └── session.py # Database session setup
│ ├── models/ # SQLAlchemy models
│ │ ├── user.py # User model
│ │ ├── patient.py # Patient model
│ │ ├── doctor.py # Doctor model
│ │ ├── appointment.py # Appointment model
│ │ ├── medical_record.py # Medical record model
│ │ └── doctor_schedule.py # Doctor schedule model
│ └── schemas/ # Pydantic models (schemas)
│ ├── user.py # User schemas
│ ├── patient.py # Patient schemas
│ ├── doctor.py # Doctor schemas
│ ├── appointment.py # Appointment schemas
│ ├── medical_record.py # Medical record schemas
│ ├── doctor_schedule.py # Doctor schedule schemas
│ └── token.py # Token schemas
└── migrations/ # Alembic migrations
├── versions/ # Migration versions
│ └── 001_initial_migration.py # Initial migration
├── env.py # Alembic environment
├── README # Alembic README
└── script.py.mako # Alembic script template
Environment Variables
The application uses the following environment variables:
Name | Description | Default Value |
---|---|---|
SECRET_KEY | Secret key for JWT token generation and verification | development_secret_key |
ACCESS_TOKEN_EXPIRE_MINUTES | JWT token expiration time in minutes | 60 |
JWT_SECRET | Secret key for JWT token generation | Same as SECRET_KEY |
Getting Started
Prerequisites
- Python 3.8+
- pip (Python package installer)
Installation
- Clone the repository:
git clone https://github.com/yourusername/healthcare-management-system-backend.git
cd healthcare-management-system-backend
- Install dependencies:
pip install -r requirements.txt
- Initialize the database:
# Create the database directory
mkdir -p /app/storage/db
# Run the migrations
alembic upgrade head
- Start the application:
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
API Documentation
Once the application is running, you can access the interactive API documentation at:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
API Endpoints
Authentication
- POST /api/v1/login/access-token: Get access token (OAuth2 compatible)
Users
- GET /api/v1/users/: Get all users (admin only)
- POST /api/v1/users/: Create a new user (admin only)
- GET /api/v1/users/me: Get current user information
- PUT /api/v1/users/me: Update current user information
- GET /api/v1/users/{user_id}: Get user by ID
- PUT /api/v1/users/{user_id}: Update user by ID (admin only)
Patients
- GET /api/v1/patients/: Get all patients
- POST /api/v1/patients/: Create a new patient
- GET /api/v1/patients/{patient_id}: Get patient by ID
- PUT /api/v1/patients/{patient_id}: Update patient by ID
- DELETE /api/v1/patients/{patient_id}: Delete patient by ID (admin only)
Doctors
- GET /api/v1/doctors/: Get all doctors
- POST /api/v1/doctors/: Create a new doctor
- GET /api/v1/doctors/{doctor_id}: Get doctor by ID
- PUT /api/v1/doctors/{doctor_id}: Update doctor by ID
- DELETE /api/v1/doctors/{doctor_id}: Delete doctor by ID (admin only)
Appointments
- GET /api/v1/appointments/: Get all appointments
- POST /api/v1/appointments/: Create a new appointment
- GET /api/v1/appointments/{appointment_id}: Get appointment by ID
- PUT /api/v1/appointments/{appointment_id}: Update appointment by ID
- DELETE /api/v1/appointments/{appointment_id}: Delete appointment by ID
- POST /api/v1/appointments/{appointment_id}/status: Update appointment status
Development
Running Tests
pytest
Linting
ruff check .
Autofixing Linting Issues
ruff check --fix .
License
This project is licensed under the MIT License - see the LICENSE file for details.