|
@@ -1,8 +1,6 @@
|
|
|
-from typing import Annotated
|
|
|
|
|
-import datetime
|
|
|
|
|
from uuid import UUID
|
|
from uuid import UUID
|
|
|
|
|
|
|
|
-from fastapi import APIRouter, Depends, HTTPException, Query
|
|
|
|
|
|
|
+from fastapi import APIRouter, Depends, HTTPException
|
|
|
from sqlalchemy import delete, select
|
|
from sqlalchemy import delete, select
|
|
|
from sqlalchemy.orm import Session
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
|
@@ -16,10 +14,10 @@ from app.models import (
|
|
|
from app.schemas.requests import SmsCreateRequest, SmsUpdateRequest
|
|
from app.schemas.requests import SmsCreateRequest, SmsUpdateRequest
|
|
|
from app.schemas.responses import SMSResponse
|
|
from app.schemas.responses import SMSResponse
|
|
|
|
|
|
|
|
-router = APIRouter()
|
|
|
|
|
|
|
+router = APIRouter(prefix="/project/{project_id}", tags=["project", "sms"])
|
|
|
|
|
|
|
|
|
|
|
|
|
-@router.get("/project/{project_id}/sms", response_model=list[SMSResponse])
|
|
|
|
|
|
|
+@router.get("/sms", response_model=list[SMSResponse])
|
|
|
async def list_project_sms(
|
|
async def list_project_sms(
|
|
|
project_id: UUID,
|
|
project_id: UUID,
|
|
|
current_user: User = Depends(deps.get_current_user),
|
|
current_user: User = Depends(deps.get_current_user),
|
|
@@ -34,7 +32,7 @@ async def list_project_sms(
|
|
|
return results.scalars().all()
|
|
return results.scalars().all()
|
|
|
|
|
|
|
|
|
|
|
|
|
-@router.post("/project/{project_id}/sms", response_model=SMSResponse)
|
|
|
|
|
|
|
+@router.post("/sms", response_model=SMSResponse)
|
|
|
async def create_sms(
|
|
async def create_sms(
|
|
|
project_id: UUID,
|
|
project_id: UUID,
|
|
|
new_sms: SmsCreateRequest,
|
|
new_sms: SmsCreateRequest,
|
|
@@ -51,7 +49,7 @@ async def create_sms(
|
|
|
return sms
|
|
return sms
|
|
|
|
|
|
|
|
|
|
|
|
|
-@router.post("/project/{project_id}/sms/{sms_id}", response_model=SMSResponse)
|
|
|
|
|
|
|
+@router.post("/sms/{sms_id}", response_model=SMSResponse)
|
|
|
async def update_sms(
|
|
async def update_sms(
|
|
|
project_id: UUID,
|
|
project_id: UUID,
|
|
|
sms_id: UUID,
|
|
sms_id: UUID,
|
|
@@ -69,7 +67,7 @@ async def update_sms(
|
|
|
return sms
|
|
return sms
|
|
|
|
|
|
|
|
|
|
|
|
|
-@router.delete("/project/{project_id}/sms/{sms_id}")
|
|
|
|
|
|
|
+@router.delete("/sms/{sms_id}")
|
|
|
async def delete_sms(
|
|
async def delete_sms(
|
|
|
project_id: UUID,
|
|
project_id: UUID,
|
|
|
sms_id: UUID,
|
|
sms_id: UUID,
|
|
@@ -79,63 +77,3 @@ async def delete_sms(
|
|
|
"""Delete a sms from the project"""
|
|
"""Delete a sms from the project"""
|
|
|
session.execute(delete(Sms).where((Sms.id == sms_id) & (Sms.project_id == str(project_id))))
|
|
session.execute(delete(Sms).where((Sms.id == sms_id) & (Sms.project_id == str(project_id))))
|
|
|
session.commit()
|
|
session.commit()
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-@router.get("/sms/to-send", response_model=list[SMSResponse])
|
|
|
|
|
-async def list_sms_to_send(
|
|
|
|
|
- current_user: User = Depends(deps.get_current_user),
|
|
|
|
|
- session: Session = Depends(deps.get_session),
|
|
|
|
|
- max_delay: Annotated[
|
|
|
|
|
- int | None, Query(description="the maximum delay a sms should be send with")
|
|
|
|
|
- ] = 10,
|
|
|
|
|
-):
|
|
|
|
|
- """List sms that should be send by now"""
|
|
|
|
|
-
|
|
|
|
|
- now = datetime.datetime.now()
|
|
|
|
|
- min_sending_time = now - datetime.timedelta(minutes=max_delay)
|
|
|
|
|
- results = session.execute(
|
|
|
|
|
- select(Sms).where(
|
|
|
|
|
- (Sms.sending_time > min_sending_time)
|
|
|
|
|
- & (Sms.sending_time < now)
|
|
|
|
|
- & (Sms.send_time == None) # noqa: E711
|
|
|
|
|
- )
|
|
|
|
|
- )
|
|
|
|
|
- return results.scalars().all()
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-@router.post("/sms/send-now/{sms_id}", response_model=SMSResponse)
|
|
|
|
|
-async def send_sms_now(
|
|
|
|
|
- sms_id: UUID,
|
|
|
|
|
- current_user: User = Depends(deps.get_current_user),
|
|
|
|
|
- session: Session = Depends(deps.get_session),
|
|
|
|
|
-):
|
|
|
|
|
- """Update the SMS to be sent now"""
|
|
|
|
|
- sms = session.get(Sms, sms_id)
|
|
|
|
|
- if sms is None:
|
|
|
|
|
- raise HTTPException(status_code=404, detail="SMS not found")
|
|
|
|
|
- elif sms.send_time is not None:
|
|
|
|
|
- raise HTTPException(status_code=400, detail="SMS has already been sent")
|
|
|
|
|
- else:
|
|
|
|
|
- sms.send_time = datetime.datetime.now()
|
|
|
|
|
- session.commit()
|
|
|
|
|
- return sms
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-@router.get("/sms/not-send", response_model=list[SMSResponse])
|
|
|
|
|
-async def list_not_sent(
|
|
|
|
|
- current_user: User = Depends(deps.get_current_user),
|
|
|
|
|
- session: Session = Depends(deps.get_session),
|
|
|
|
|
-):
|
|
|
|
|
- """List sms that are not sent"""
|
|
|
|
|
- results = session.execute(select(Sms).where((Sms.send_time == None))) # noqa: E711
|
|
|
|
|
- return results.scalars().all()
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-@router.get("/sms/future", response_model=list[SMSResponse])
|
|
|
|
|
-async def list_future_sms(
|
|
|
|
|
- current_user: User = Depends(deps.get_current_user),
|
|
|
|
|
- session: Session = Depends(deps.get_session),
|
|
|
|
|
-):
|
|
|
|
|
- """List sms that should be sent in the future"""
|
|
|
|
|
- results = session.execute(select(Sms).where(Sms.sending_time > datetime.datetime.now()))
|
|
|
|
|
- return results.scalars().all()
|
|
|