3.5 KiB
VERDICT: GREEN
Todo-sovellus FastAPI + SQLite, CRUD-endpointit ja testit
Overview
This project is a simple todo application built using the FastAPI framework and an SQLite database. It provides CRUD (Create, Read, Update, Delete) endpoints for managing tasks.
Files
| File | Purpose |
|---|---|
| models.py | Defines the data model for tasks using SQLAlchemy ORM. |
| schemas.py | Contains Pydantic models for input validation. |
| main.py | Implements FastAPI routes and database operations. |
| pyproject.toml | Project metadata and dependencies configuration. |
| test_main.py | Unit tests for all CRUD endpoints using FastAPI TestClient. |
| Dockerfile | Defines the build steps to create a Docker image of the application. |
Quick Start
git clone cd project uv sync uv run uvicorn main:app --reload
Docker
docker build -t todo-sovellus-fastapi---sqlite--crud-endpointit-ja-testit . docker run -p 8000:8000 todo-sovellus-fastapi---sqlite--crud-endpointit-ja-testit
API Endpoints
| Method | Path | Description |
|---|---|---|
| POST | /tasks/ | Create a new task. |
| GET | /tasks/ | List all tasks or filter by status. |
| GET | /tasks/{id} | Get a task by ID. |
| PUT | /tasks/{id} | Update an existing task. |
| DELETE | /tasks/{id} | Delete a task. |
Architecture
The project structure is logical and organized into separate files for models, schemas, main application logic, testing, and Docker configuration.
- models.py: Defines the
Taskmodel using SQLAlchemy ORM to interact with the SQLite database. - schemas.py: Contains Pydantic models (
TaskCreate,TaskResponse) for input validation and response formatting. - main.py: Implements FastAPI routes that handle CRUD operations. It uses dependency injection via
get_dbfunction to manage database sessions. - pyproject.toml: Specifies project metadata and dependencies such as FastAPI, Uvicorn, and SQLAlchemy.
- test_main.py: Contains unit tests for all CRUD endpoints using the FastAPI TestClient.
- Dockerfile: Defines the Docker image build process.
Risk Assessment
| Severity | Issue |
|---|---|
| LOW | SQL injection risks are mitigated by using ORM (SQLAlchemy) which prevents direct SQL execution. |
| MEDIUM | Input validation is done at the schema level with Pydantic, but there's no explicit check for sensitive data like passwords in TaskCreate. |
| HIGH | Error handling could be more graceful and informative to improve user experience and debugging. |
| LOW | Database connection management using SQLAlchemy sessionmaker is handled correctly. It ensures that sessions are properly opened and closed. |
| MEDIUM | Edge cases such as concurrent access or large datasets aren't explicitly handled, which might lead to performance issues. |
Maintanability
- Consistent Naming: Variable names like
task_id,db_taskfollow a consistent naming convention. - Clear Code Structure: Each operation (CRUD) has its own function in
main.py, and the code is structured clearly for readability. - New Developer Understanding: A new developer would find it easy to understand the project due to organized file structure, clear comments, and well-defined responsibilities.
Overall Assessment
SHIP IT
The project demonstrates a good balance between functionality and maintainability. The use of FastAPI, SQLAlchemy, and Pydantic ensures that the application is both performant and secure. The addition of unit tests further enhances confidence in the reliability and correctness of the codebase.