feat: Add profitability calculation schemas and service functions

- Introduced Pydantic schemas for profitability calculations in `schemas/calculations.py`.
- Implemented service functions for profitability calculations in `services/calculations.py`.
- Added new exception class `ProfitabilityValidationError` for handling validation errors.
- Created repositories for managing project and scenario profitability snapshots.
- Developed a utility script for verifying authenticated routes.
- Added a new HTML template for the profitability calculator interface.
- Implemented a script to fix user ID sequence in the database.
This commit is contained in:
2025-11-12 22:22:29 +01:00
parent 6d496a599e
commit b1a6df9f90
15 changed files with 1654 additions and 0 deletions

11
main.py
View File

@@ -10,6 +10,7 @@ from middleware.metrics import MetricsMiddleware
from middleware.validation import validate_json
from routes.auth import router as auth_router
from routes.dashboard import router as dashboard_router
from routes.calculations import router as calculations_router
from routes.imports import router as imports_router
from routes.exports import router as exports_router
from routes.projects import router as projects_router
@@ -40,7 +41,16 @@ async def health() -> dict[str, str]:
return {"status": "ok"}
@app.get("/favicon.ico", include_in_schema=False)
async def favicon() -> Response:
static_directory = "static"
img_directory = f"{static_directory}/img"
favicon_img = "logo_32x32.png"
return StaticFiles(directory=img_directory).lookup_path(favicon_img)[0]
@app.on_event("startup")
# TODO: use lifespan events for startup/shutdown tasks
async def ensure_admin_bootstrap() -> None:
settings = get_settings()
admin_settings = settings.admin_bootstrap_settings()
@@ -93,6 +103,7 @@ async def ensure_admin_bootstrap() -> None:
app.include_router(dashboard_router)
app.include_router(calculations_router)
app.include_router(auth_router)
app.include_router(imports_router)
app.include_router(exports_router)