sms.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. from uuid import UUID
  2. from fastapi import APIRouter, Depends, HTTPException
  3. from sqlalchemy import delete, select
  4. from sqlalchemy.orm import Session
  5. from app.api import deps
  6. from app.api.utils import update_object_from_payload
  7. from app.models import (
  8. Project,
  9. Sms,
  10. User,
  11. )
  12. from app.schemas.requests import SmsCreateRequest, SmsUpdateRequest
  13. from app.schemas.responses import SMSResponse
  14. router = APIRouter(prefix="/project/{project_id}", tags=["project", "sms"])
  15. @router.get("/sms", response_model=list[SMSResponse])
  16. async def list_project_sms(
  17. project_id: UUID,
  18. current_user: User = Depends(deps.get_current_user),
  19. session: Session = Depends(deps.get_session),
  20. ):
  21. """List sms from project"""
  22. p = session.get(Project, project_id)
  23. if p is None:
  24. raise HTTPException(status_code=404, detail="Project not found")
  25. results = session.execute(select(Sms).where(Sms.project_id == project_id))
  26. return results.scalars().all()
  27. @router.post("/sms", response_model=SMSResponse)
  28. async def create_sms(
  29. project_id: UUID,
  30. new_sms: SmsCreateRequest,
  31. current_user: User = Depends(deps.get_current_user),
  32. session: Session = Depends(deps.get_session),
  33. ):
  34. """Create a new to the project"""
  35. p = session.get(Project, project_id)
  36. if p is None:
  37. raise HTTPException(status_code=404, detail="Project not found")
  38. sms = Sms(project_id=project_id, **new_sms.model_dump())
  39. session.add(sms)
  40. session.commit()
  41. return sms
  42. @router.post("/sms/{sms_id}", response_model=SMSResponse)
  43. async def update_sms(
  44. project_id: UUID,
  45. sms_id: UUID,
  46. new_sms: SmsUpdateRequest,
  47. current_user: User = Depends(deps.get_current_user),
  48. session: Session = Depends(deps.get_session),
  49. ):
  50. """Update an sms from the project"""
  51. sms = session.get(Sms, sms_id)
  52. if (sms is None) or (sms.project_id != str(project_id)):
  53. raise HTTPException(status_code=404, detail="Sms not found")
  54. update_object_from_payload(sms, new_sms.model_dump(exclude_unset=True))
  55. session.commit()
  56. session.refresh(sms)
  57. return sms
  58. @router.delete("/sms/{sms_id}")
  59. async def delete_sms(
  60. project_id: UUID,
  61. sms_id: UUID,
  62. current_user: User = Depends(deps.get_current_user),
  63. session: Session = Depends(deps.get_session),
  64. ):
  65. """Delete a sms from the project"""
  66. session.execute(delete(Sms).where((Sms.id == sms_id) & (Sms.project_id == str(project_id))))
  67. session.commit()