Backend API dla Construction Manager - aplikacji do zarządzania projektami budowlanymi, materiałami i magazynami.
Projekt wykorzystuje Hexagonal Architecture (Ports & Adapters) z następującymi warstwami:
- Domain: Encje domenowe, Value Objects, Repository interfaces
- Application: Use Cases, DTOs, walidacja biznesowa
- Infrastructure: Adaptery (SQLAlchemy, FastAPI), external services
- Shared: Wspólne utilities, exceptions, config
construction-backend/
├── src/
│ ├── domain/ # Core business logic
│ │ ├── entities/ # Construction, Material, Category, StorageItem
│ │ ├── value_objects/ # ConstructionStatus, UnitEnum
│ │ └── repositories/ # Repository interfaces (ports)
│ ├── application/ # Use cases & business rules
│ │ ├── use_cases/ # ConstructionUseCases, MaterialUseCases, CategoryUseCases, StorageItemUseCases
│ │ └── dtos/ # Data Transfer Objects
│ ├── infrastructure/ # Adapters & implementations
│ │ ├── database/ # SQLAlchemy models & repository impl
│ │ └── api/ # FastAPI routes & controllers
│ └── shared/ # Common utilities, exceptions, config
├── tests/ # Test files
├── alembic/ # Database migrations
├── mock_data/ # Mock data for testing
└── main.py # Application entry point
- Category - Kategorie materiałów
- Construction - Projekty budowlane (budowy)
- Material - Materiały budowlane z przypisaną kategorią
- StorageItem - Pozycje magazynowe (łączy Construction ↔ Material + ilości)
- Backend: FastAPI 0.115+
- ORM: SQLAlchemy 2.0+
- Database: SQLite
- Migrations: Alembic
- Testing: pytest
- AI Integration: OpenAI API (analiza dokumentów)
- File Uploads: Lokalne przechowywanie plików
- Utworzenie wirtualnego środowiska:
python -m venv venv- Aktywacja wirtualnego środowiska:
# Na macOS/Linux:
source venv/bin/activate
# Na Windows:
venv\Scripts\activate- Instalacja zależności:
pip install -r requirements.txt- Konfiguracja środowiska:
cp env.example .env
# Edytuj .env z odpowiednimi wartościami (opcjonalnie)Aplikacja używa SQLite jako bazy danych - nie wymaga dodatkowej konfiguracji!
- Migracje bazy danych:
alembic upgrade head- Uruchomienie aplikacji:
python main.pyAPI będzie dostępne pod adresem: http://localhost:8000
GET /api/v1/constructions/- Lista wszystkich budów (z paginacją)GET /api/v1/constructions/public- Lista wszystkich budów (public endpoint)GET /api/v1/constructions/{construction_id}- Pobierz budowę po IDPOST /api/v1/constructions/- Utwórz nową budowę (obsługuje JSON i multipart/form-data z plikiem)PUT /api/v1/constructions/{construction_id}- Aktualizuj budowęDELETE /api/v1/constructions/{construction_id}- Usuń budowęGET /api/v1/constructions/search- Wyszukaj budowy (z filtrowaniem po statusie)GET /api/v1/constructions/statistics- Pobierz statystyki dla wszystkich budówPOST /api/v1/constructions/{construction_id}/analyze-document- Analizuj dokument (zdjęcie/PDF) używając AIPOST /api/v1/constructions/{construction_id}/upload-image- Prześlij zdjęcie dla budowyGET /api/v1/constructions/images/{filename}- Pobierz zdjęcie budowy
GET /api/v1/materials/- Lista wszystkich materiałów (z paginacją)GET /api/v1/materials/public- Lista wszystkich materiałów (public endpoint)GET /api/v1/materials/{material_id}- Pobierz materiał po IDPOST /api/v1/materials/- Utwórz nowy materiałPOST /api/v1/materials/bulk- Utwórz wiele materiałów jednocześniePUT /api/v1/materials/{material_id}- Aktualizuj materiałDELETE /api/v1/materials/{material_id}- Usuń materiałGET /api/v1/materials/search- Wyszukaj materiały (z filtrowaniem po kategorii)GET /api/v1/materials/category/{category_id}- Pobierz materiały po kategoriiGET /api/v1/materials/by-construction/{construction_id}- Pobierz materiały dla danej budowy
GET /api/v1/storage-items/construction/{construction_id}- Pobierz pozycje magazynowe dla budowyGET /api/v1/storage-items/construction/{construction_id}/materials- Pobierz listę materiałów z informacjami dla budowyGET /api/v1/storage-items/construction/{construction_id}/material/{material_id}- Pobierz pozycję magazynową po ID budowy i materiałuPOST /api/v1/storage-items/- Utwórz nową pozycję magazynowąPOST /api/v1/storage-items/construction/{construction_id}/bulk- Utwórz wiele pozycji magazynowych dla budowyPUT /api/v1/storage-items/construction/{construction_id}/material/{material_id}- Aktualizuj pozycję magazynowąDELETE /api/v1/storage-items/construction/{construction_id}/material/{material_id}- Usuń pozycję magazynowąGET /api/v1/storage-items/material/{material_id}- Pobierz pozycje magazynowe dla materiału
GET /api/v1/categories/- Lista wszystkich kategorii (z paginacją)GET /api/v1/categories/public- Lista wszystkich kategorii (public endpoint)GET /api/v1/categories/{category_id}- Pobierz kategorię po IDPOST /api/v1/categories/- Utwórz nową kategorięPUT /api/v1/categories/{category_id}- Aktualizuj kategorięDELETE /api/v1/categories/{category_id}- Usuń kategorięGET /api/v1/categories/search- Wyszukaj kategorie
GET /- Root endpoint z informacjami o APIGET /health- Health check endpointGET /api/v1/health- Health check endpoint API
http://localhost:8000/docs(Swagger UI)http://localhost:8000/redoc(ReDoc)
- Catalog Items API - Kompletna dokumentacja API dla składników
- Recipe Ingredients API - Dokumentacja API dla składników przepisów
- Recipe with Ingredients API - Dokumentacja API dla przepisów ze składnikami
# Uruchomienie testów
pytest
# Z coverage
pytest --cov=src tests/- Zarządzanie budowami (CRUD)
- Zarządzanie materiałami budowlanymi (CRUD)
- Zarządzanie kategoriami materiałów (CRUD)
- Zarządzanie pozycjami magazynowymi (CRUD)
- Wyszukiwanie i filtrowanie
- Analiza dokumentów z użyciem AI (OpenAI)
- Upload i przechowywanie zdjęć budów
- Statystyki dla budów
- Bulk operations (masowe operacje)
- Etap 1: Web API & Hexagonal Architecture (zakończony)
- Etap 2: SSR Frontend & Job Scheduling (Celery + Redis)
- Etap 3: SPA Frontend Support
- Etap 4: Cloud Integration (AWS Lambda)