Spaces:
Sleeping
Sleeping
| """ | |
| Progress Report API Endpoints | |
| Handles: | |
| - Creating progress reports with location verification | |
| - Listing reports with filters | |
| - Updating and deleting reports | |
| - Image management via polymorphic linking | |
| - Statistics aggregation | |
| """ | |
| from fastapi import APIRouter, Depends, Query, status | |
| from sqlalchemy.orm import Session | |
| from typing import List, Optional | |
| from uuid import UUID | |
| from app.api.deps import get_db, get_current_user | |
| from app.models.user import User | |
| from app.schemas.ticket_progress import ( | |
| TicketProgressReportCreate, | |
| TicketProgressReportUpdate, | |
| TicketProgressReportResponse, | |
| TicketProgressReportListResponse, | |
| ProgressReportStats, | |
| ) | |
| from app.services.progress_report_service import ProgressReportService | |
| router = APIRouter(prefix="/progress-reports", tags=["Progress Reports"]) | |
| def create_progress_report( | |
| data: TicketProgressReportCreate, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user), | |
| ): | |
| """Create a new progress report""" | |
| return ProgressReportService.create_progress_report( | |
| db=db, | |
| data=data, | |
| reported_by_user_id=current_user.id | |
| ) | |
| def list_progress_reports( | |
| ticket_id: Optional[UUID] = Query(None, description="Filter by ticket ID"), | |
| reported_by_user_id: Optional[UUID] = Query(None, description="Filter by reporter"), | |
| with_issues_only: bool = Query(False, description="Show only reports with issues"), | |
| skip: int = Query(0, ge=0, description="Pagination offset"), | |
| limit: int = Query(100, ge=1, le=500, description="Pagination limit"), | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user), | |
| ): | |
| """List progress reports""" | |
| reports, total = ProgressReportService.list_progress_reports( | |
| db=db, | |
| ticket_id=ticket_id, | |
| reported_by_user_id=reported_by_user_id, | |
| with_issues_only=with_issues_only, | |
| skip=skip, | |
| limit=limit | |
| ) | |
| return { | |
| "items": reports, | |
| "total": total, | |
| "skip": skip, | |
| "limit": limit, | |
| } | |
| def get_progress_stats( | |
| ticket_id: Optional[UUID] = Query(None, description="Filter by ticket ID"), | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user), | |
| ): | |
| """Get progress report statistics""" | |
| return ProgressReportService.get_progress_stats(db=db, ticket_id=ticket_id) | |
| def get_progress_report( | |
| report_id: UUID, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user), | |
| ): | |
| """Get progress report by ID""" | |
| return ProgressReportService.get_progress_report(db=db, report_id=report_id) | |
| def update_progress_report( | |
| report_id: UUID, | |
| data: TicketProgressReportUpdate, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user), | |
| ): | |
| """Update progress report""" | |
| return ProgressReportService.update_progress_report( | |
| db=db, | |
| report_id=report_id, | |
| data=data, | |
| current_user_id=current_user.id | |
| ) | |
| def delete_progress_report( | |
| report_id: UUID, | |
| db: Session = Depends(get_db), | |
| current_user: User = Depends(get_current_user), | |
| ): | |
| """Delete progress report""" | |
| ProgressReportService.delete_progress_report( | |
| db=db, | |
| report_id=report_id, | |
| current_user_id=current_user.id | |
| ) | |
| return None | |