Refactor and enhance CalMiner application

- Updated README.md to reflect new features and usage instructions.
- Removed deprecated Dashboard.html component and integrated dashboard functionality directly into the main application.
- Revised architecture documentation for clarity and added module map and request flow diagrams.
- Enhanced maintenance model to include equipment association and cost tracking.
- Updated requirements.txt to include new dependencies (httpx, pandas, numpy).
- Improved consumption, maintenance, production, and reporting routes with better validation and response handling.
- Added unit tests for maintenance and production routes, ensuring proper CRUD operations and validation.
- Enhanced reporting service to calculate and return detailed summary statistics.
- Redesigned Dashboard.html for improved user experience and integrated Chart.js for visualizing simulation results.
This commit is contained in:
2025-10-20 20:53:55 +02:00
parent fee857637f
commit e73a987d25
19 changed files with 794 additions and 184 deletions

View File

@@ -1,10 +1,13 @@
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List, Optional
from pydantic import BaseModel
from fastapi import APIRouter, Depends, status
from pydantic import BaseModel, PositiveFloat
from sqlalchemy.orm import Session
from config.database import SessionLocal
from models.consumption import Consumption
router = APIRouter(prefix="/api/consumption", tags=["Consumption"])
@@ -16,22 +19,25 @@ def get_db():
db.close()
# Pydantic schemas
class ConsumptionCreate(BaseModel):
class ConsumptionBase(BaseModel):
scenario_id: int
amount: float
amount: PositiveFloat
description: Optional[str] = None
class ConsumptionRead(ConsumptionCreate):
class ConsumptionCreate(ConsumptionBase):
pass
class ConsumptionRead(ConsumptionBase):
id: int
class Config:
orm_mode = True
@router.post("/", response_model=ConsumptionRead)
async def create_consumption(item: ConsumptionCreate, db: Session = Depends(get_db)):
@router.post("/", response_model=ConsumptionRead, status_code=status.HTTP_201_CREATED)
def create_consumption(item: ConsumptionCreate, db: Session = Depends(get_db)):
db_item = Consumption(**item.dict())
db.add(db_item)
db.commit()
@@ -40,5 +46,5 @@ async def create_consumption(item: ConsumptionCreate, db: Session = Depends(get_
@router.get("/", response_model=List[ConsumptionRead])
async def list_consumption(db: Session = Depends(get_db)):
def list_consumption(db: Session = Depends(get_db)):
return db.query(Consumption).all()