Initial commit: SIBU 2.0 MISSION
This commit is contained in:
96
backend/app/api/reports.py
Normal file
96
backend/app/api/reports.py
Normal file
@ -0,0 +1,96 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from sqlmodel import Session, select
|
||||
from typing import List, Optional
|
||||
from uuid import UUID
|
||||
|
||||
from app.core.database import get_session
|
||||
from app.api.deps import get_current_admin, get_current_user_optional
|
||||
from app.models.report import Report
|
||||
from app.models.user import User
|
||||
from app.schemas.report import ReportCreate, ReportUpdate, ReportResponse
|
||||
|
||||
router = APIRouter(prefix="/api/reports", tags=["reports"])
|
||||
|
||||
@router.post("", response_model=ReportResponse, status_code=status.HTTP_201_CREATED)
|
||||
async def create_report(
|
||||
report_in: ReportCreate,
|
||||
session: Session = Depends(get_session),
|
||||
current_user: Optional[User] = Depends(get_current_user_optional)
|
||||
):
|
||||
"""Create a new user report."""
|
||||
report = Report(
|
||||
message=report_in.message,
|
||||
user_id=current_user.id if current_user else None
|
||||
)
|
||||
session.add(report)
|
||||
session.commit()
|
||||
session.refresh(report)
|
||||
|
||||
return ReportResponse(
|
||||
id=report.id,
|
||||
user_id=report.user_id,
|
||||
user_name=current_user.full_name if current_user else "Anónimo",
|
||||
message=report.message,
|
||||
status=report.status,
|
||||
created_at=report.created_at
|
||||
)
|
||||
|
||||
@router.get("", response_model=List[ReportResponse])
|
||||
async def get_reports(
|
||||
session: Session = Depends(get_session),
|
||||
admin_auth: bool = Depends(get_current_admin)
|
||||
):
|
||||
"""Get all reports (Admin only)."""
|
||||
statement = select(Report)
|
||||
results = session.exec(statement).all()
|
||||
|
||||
reports = []
|
||||
for report in results:
|
||||
user_name = "Anónimo"
|
||||
if report.user_id:
|
||||
user = session.get(User, report.user_id)
|
||||
if user:
|
||||
user_name = user.full_name
|
||||
|
||||
reports.append(ReportResponse(
|
||||
id=report.id,
|
||||
user_id=report.user_id,
|
||||
user_name=user_name,
|
||||
message=report.message,
|
||||
status=report.status,
|
||||
created_at=report.created_at
|
||||
))
|
||||
|
||||
return reports
|
||||
|
||||
@router.patch("/{report_id}", response_model=ReportResponse)
|
||||
async def update_report_status(
|
||||
report_id: UUID,
|
||||
report_update: ReportUpdate,
|
||||
session: Session = Depends(get_session),
|
||||
admin_auth: bool = Depends(get_current_admin)
|
||||
):
|
||||
"""Update report status (Admin only)."""
|
||||
report = session.get(Report, report_id)
|
||||
if not report:
|
||||
raise HTTPException(status_code=404, detail="Report not found")
|
||||
|
||||
report.status = report_update.status
|
||||
session.add(report)
|
||||
session.commit()
|
||||
session.refresh(report)
|
||||
|
||||
user_name = "Anónimo"
|
||||
if report.user_id:
|
||||
user = session.get(User, report.user_id)
|
||||
if user:
|
||||
user_name = user.full_name
|
||||
|
||||
return ReportResponse(
|
||||
id=report.id,
|
||||
user_id=report.user_id,
|
||||
user_name=user_name,
|
||||
message=report.message,
|
||||
status=report.status,
|
||||
created_at=report.created_at
|
||||
)
|
||||
Reference in New Issue
Block a user