feat(repairs): add status timeline and public link preparation

This commit is contained in:
Schubert Ferenc 2026-07-04 12:25:06 +02:00
parent e9ec207617
commit 09cce1f2b6
22 changed files with 1027 additions and 28 deletions

View file

@ -60,7 +60,9 @@ def get_dashboard_summary(
repairs = [
MetricCard(label="Neue Reparaturen", value=RepairRepository.count_by_status(db, "new")),
MetricCard(label="In Diagnose", value=RepairRepository.count_by_status(db, "diagnosis")),
MetricCard(label="Warten auf Kunde", value=RepairRepository.count_by_status(db, "waiting_for_customer")),
MetricCard(label="Wartet auf Kunde", value=RepairRepository.count_by_status(db, "waiting_for_customer")),
MetricCard(label="In Reparatur", value=RepairRepository.count_by_status(db, "repair")),
MetricCard(label="Endprüfung", value=RepairRepository.count_by_status(db, "final_test")),
MetricCard(label="Abgeschlossen", value=RepairRepository.count_by_status(db, "completed")),
]

View file

@ -14,12 +14,18 @@ from app.schemas.repair import (
RepairIntakePayload,
RepairIntakeResponse,
RepairListResponse,
RepairNotificationOverviewResponse,
RepairPublicLinkCreateResponse,
RepairPublicLinkResponse,
RepairPublicStatusResponse,
RepairResponse,
RepairStatus,
RepairStatusHistoryResponse,
RepairStatusUpdate,
RepairUpdate,
)
from app.services.repair_notification_service import RepairNotificationService
from app.services.repair_public_link_service import RepairPublicLinkService
from app.services.repair_service import RepairService
router = APIRouter(tags=["Repairs"])
@ -123,6 +129,48 @@ def get_repair_history(
return RepairRepository.get_history(db, repair_id)
@router.get("/repairs/{repair_id}/public-link", response_model=RepairPublicLinkResponse)
def get_public_link(
repair_id: int,
db: Session = Depends(get_db),
current_user: User = Depends(require_permission("repairs.public_link.manage")),
):
db_repair = get_repair_or_404(db, repair_id)
return RepairPublicLinkService.get(db, db_repair)
@router.post("/repairs/{repair_id}/public-link", response_model=RepairPublicLinkCreateResponse, status_code=status.HTTP_201_CREATED)
def create_public_link(
repair_id: int,
request: Request,
db: Session = Depends(get_db),
current_user: User = Depends(require_permission("repairs.public_link.manage")),
):
db_repair = get_repair_or_404(db, repair_id)
return RepairPublicLinkService.create(db, db_repair, actor=current_user, request=request)
@router.delete("/repairs/{repair_id}/public-link", response_model=RepairPublicLinkResponse)
def revoke_public_link(
repair_id: int,
request: Request,
db: Session = Depends(get_db),
current_user: User = Depends(require_permission("repairs.public_link.manage")),
):
db_repair = get_repair_or_404(db, repair_id)
return RepairPublicLinkService.revoke(db, db_repair, actor=current_user, request=request)
@router.get("/repairs/{repair_id}/notifications", response_model=RepairNotificationOverviewResponse)
def get_repair_notifications(
repair_id: int,
db: Session = Depends(get_db),
current_user: User = Depends(require_permission("repairs.read")),
):
db_repair = get_repair_or_404(db, repair_id)
return RepairNotificationService.overview(db, db_repair)
@router.post("/public/repair-intake", response_model=RepairIntakeResponse, status_code=status.HTTP_201_CREATED)
def create_repair_intake(
payload: RepairIntakePayload,
@ -140,3 +188,11 @@ def create_repair_intake(
status=cast(RepairStatus, repair.status),
message="Reparaturanfrage übernommen",
)
@router.get("/public/repairs/status/{token}", response_model=RepairPublicStatusResponse)
def get_public_repair_status(
token: str,
db: Session = Depends(get_db),
):
return RepairPublicLinkService.public_status(db, token)