Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
161 changes: 65 additions & 96 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,129 +1,98 @@
# LifeLine-ICT
LifeLine-ICT
Project Summary
LifeLine-ICT is a digital infrastructure management platform designed to support university ICT departments. The system tracks strategic ICT projects, inventory assets, IoT deployments, and maintenance activities to ensure digital services remain reliable for students and researchers. This repository contains the code for the IoT device layer, backend APIs, and documentation required for faculties to adapt the platform to their own campuses.

## Project Summary
High-Level Architecture
The solution consists of five collaborating layers:

LifeLine-ICT is a digital infrastructure management platform that supports the
Uganda University ICT department. The system tracks strategic ICT projects,
inventory assets, IoT deployments, and the maintenance activities that keep
digital services reliable for students and researchers. The repository contains
code for the IoT device layer, the backend APIs, and supporting documentation so
faculties can adapt the platform to their own campuses.
IoT Layer: ESP32-based sensor nodes that send telemetry to a lightweight Flask logger (iot/logging).

### High-Level Architecture
Backend APIs: A FastAPI service (backend/app) providing CRUD endpoints for projects, resources, locations, maintenance tickets, and sensor sites.

The solution comprises five collaborating layers:
GIS & Analytics: Future modules intended to combine telemetry and asset data for dashboards and risk assessments.

- **IoT layer** – ESP32-based sensor nodes send telemetry to a lightweight Flask
logger (`iot/logging`).
- **Backend APIs** – A FastAPI service (`backend/app`) exposes CRUD endpoints for
projects, resources, locations, maintenance tickets, and sensor sites.
- **GIS & Analytics** – Future modules will combine telemetry and asset data to
power dashboards and risk assessments.
- **Frontend** – Web dashboards and mobile apps consume the backend APIs.
- **Deployment** – Infrastructure-as-code scripts will package the stack for on
campus or cloud hosting.
Frontend: Web dashboards and mobile applications that consume the backend APIs.

Consult `docs/backend_crud_plan.md` for the architectural rationale that guided
issue `#5` (CRUD API implementation).
Deployment: Infrastructure-as-code scripts to package the stack for on-campus or cloud hosting.

### Module Overview
Refer to docs/backend_crud_plan.md for the architectural rationale regarding the CRUD API implementation.

- `iot/` – Firmware sketches and logging scripts for field sensors.
- `backend/` – FastAPI application, domain models, services, and tests.
- `docs/` – Supplemental guides and design notes.
- Additional directories (frontend, gis, deployment) will be filled as the
broader initiative matures.
Module Overview
iot/: Firmware sketches and logging scripts for field sensors.

## Backend Service (Issue #5 Deliverable)
backend/: FastAPI application, domain models, services, and tests.

### Prerequisites
docs/: Supplemental guides and design notes.

- Python 3.11+
- `pip` or `uv` for dependency management
- Optional: `uvicorn` CLI for local development
Planned Directories: Frontend, GIS, and Deployment modules will be added as the initiative matures.

### Installation
Backend Service
Prerequisites
Python 3.11+

```bash
pip or uv for dependency management

Optional: uvicorn CLI for local development

Installation
Bash
python -m venv .venv
source .venv/bin/activate
pip install -r backend/requirements.txt
```

### Running the API

```bash
Running the API
Bash
uvicorn backend.app.main:app --reload
```

The service listens on `http://127.0.0.1:8000` by default. OpenAPI
documentation is available at `http://127.0.0.1:8000/docs`.

### Core Endpoints

| Entity | Base Path | Notes |
| --- | --- | --- |
| Projects | `/api/v1/projects` | CRUD with pagination & search |
| ICT Resources | `/api/v1/resources` | Validates project/location references and enforces ticket rules |
| Locations | `/api/v1/locations` | CRUD with geo metadata |
| Maintenance Tickets | `/api/v1/maintenance-tickets` | Requires resolution metadata when closing a ticket |
| Sensor Sites | `/api/v1/sensor-sites` | Links IoT deployments to resources, projects, and locations |

Each list endpoint accepts `limit`, `offset`, and `search` query parameters and
returns pagination metadata to keep API consumers informed.

### Running Tests

```bash
The service runs on http://127.0.0.1:8000 by default. Interactive OpenAPI documentation is available at http://127.0.0.1:8000/docs.

Core Endpoints
Entity Base Path Notes
Projects /api/v1/projects CRUD with pagination and search functionality.
ICT Resources /api/v1/resources Validates project/location references and enforces ticket rules.
Locations /api/v1/locations CRUD with geographic metadata.
Maintenance Tickets /api/v1/maintenance-tickets Requires resolution metadata when closing a ticket.
Sensor Sites /api/v1/sensor-sites Links IoT deployments to resources, projects, and locations.
All list endpoints support limit, offset, and search query parameters and return pagination metadata.

Running Tests
Bash
pytest backend/tests
```

The suite provisions an in-memory SQLite database and covers both service-level
rules (such as blocking resource deletion while tickets remain open) and API
contracts.
The test suite utilizes an in-memory SQLite database and covers service-level rules, such as preventing resource deletion while maintenance tickets remain open.

### Database Migrations
Database Migrations
This project uses Alembic for database migrations.

This project uses [Alembic](https://alembic.sqlalchemy.org/en/latest/) for database migrations.
To create a new migration:

To create a new migration, run:
Bash
alembic revision --autogenerate -m "migration_message"
To apply migrations:

```bash
alembic revision --autogenerate -m "<migration_message>"
```

To apply migrations to the database, run:

```bash
Bash
alembic upgrade head
```
Data Model Highlights
The backend models capture several key relationships:

Projects aggregate ICT resources and sensor sites.

### Data Model Highlights
Resources can link to projects and locations and host sensor deployments.

The backend models capture the following relationships:
Maintenance Tickets are assigned to resources and require closure notes upon resolution.

- Projects aggregate ICT resources and sensor sites.
- Resources optionally link to projects and locations, and can host sensor
deployments.
- Maintenance tickets belong to resources and require closure notes when marked
resolved.
Contributing
Create a new issue or select an existing one from the issue tracker.

Consult the service-layer docstrings for detailed business rules and
institutional context.
Branch from main: git checkout -b feature/your-feature-name.

## Contributing
Maintain the layered structure (api, services, repositories, models) to keep the codebase organized.

1. Create an issue or pick an existing one (see `issues.md`).
2. Branch from `main`: `git checkout -b feature/your-feature`.
3. Follow the layered structure (`api`, `services`, `repositories`, `models`) to
keep contributions organised.
4. Write tests and run `pytest backend/tests` before opening a pull request.
5. Document behaviour changes in code docstrings or the project docs.
Write tests and verify they pass using pytest backend/tests before opening a pull request.

## License
Document any behavior changes in code docstrings or project documentation.

MIT, Apache
License
This project is dual-licensed under MIT and Apache licenses.

## Maintainers
Maintainers
Muwanga Erasto Kosea

Muwanga Erasto Kosea, Ouma Ronald
Ouma Ronald
Loading