dingdanquanliucheng/backend/app/api/reminders.py
2026-05-26 11:36:57 +08:00

95 lines
3.3 KiB
Python

from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from backend.app.api.deps import require_roles
from backend.app.db import get_db_session
from backend.app.schemas.common import success_payload
from backend.app.services.reminder_service import reminder_service
router = APIRouter(prefix="/api/reminders", tags=["reminders"])
@router.get("")
def list_reminders(
reminder_type: str | None = Query(default=None),
status: str | None = Query(default=None),
receiver_user_id: int | None = Query(default=None),
page_no: int = Query(default=1),
page_size: int = Query(default=20),
session: Session = Depends(get_db_session),
current_user: dict = Depends(require_roles("salesman", "manager", "admin")),
) -> dict:
filters = {
"reminder_type": reminder_type,
"status": status,
"receiver_user_id": receiver_user_id,
"page_no": page_no,
"page_size": page_size,
}
if current_user.get("role_code") == "salesman":
filters["receiver_user_id"] = current_user.get("user_id")
return success_payload(reminder_service.list_reminders(session, filters))
@router.get("/dashboard")
def reminder_dashboard(
session: Session = Depends(get_db_session),
current_user: dict = Depends(require_roles("salesman", "manager", "admin")),
) -> dict:
filters = {"page_no": 1, "page_size": 200}
if current_user.get("role_code") == "salesman":
filters["receiver_user_id"] = current_user.get("user_id")
reminders = reminder_service.list_reminders(session, filters)
return success_payload(
{
"summary": {
"total": reminders["total"],
"pending": len([item for item in reminders["list"] if item["status"] == "pending"]),
"read": len([item for item in reminders["list"] if item["status"] == "read"]),
},
"list": reminders["list"],
"checked_at": "",
}
)
@router.post("/{reminder_id}/read")
def read_reminder(
reminder_id: int,
session: Session = Depends(get_db_session),
current_user: dict = Depends(require_roles("salesman", "manager", "admin")),
) -> dict:
return success_payload(reminder_service.read_reminder(reminder_id, session, current_user))
@router.post("/arrears/check")
def check_arrears_reminders(
session: Session = Depends(get_db_session),
current_user: dict = Depends(require_roles("manager", "admin")),
) -> dict:
return success_payload(reminder_service.check_arrears(session))
@router.post("/inactive-customers/check")
def check_inactive_customer_reminders(
session: Session = Depends(get_db_session),
current_user: dict = Depends(require_roles("manager", "admin")),
) -> dict:
return success_payload(reminder_service.check_inactive_customers(session))
@router.post("/logistics-timeout/check")
def check_logistics_timeout_reminders(
session: Session = Depends(get_db_session),
current_user: dict = Depends(require_roles("manager", "admin")),
) -> dict:
return success_payload(reminder_service.check_logistics_timeout(session))
@router.post("/check-all")
def check_all_reminders(
session: Session = Depends(get_db_session),
current_user: dict = Depends(require_roles("manager", "admin")),
) -> dict:
return success_payload(reminder_service.check_all(session))