65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
from db.session import get_db
|
|
from core.deps import get_current_user, get_current_admin
|
|
from domains.notifications.schemas import (
|
|
NotificationResponse,
|
|
NotificationAction,
|
|
NotificationCreate
|
|
)
|
|
from domains.notifications.service import (
|
|
list_my_notifications,
|
|
respond_to_notification,
|
|
send_public_notification
|
|
)
|
|
from domains.users.repo import get_all_users
|
|
|
|
router = APIRouter(
|
|
prefix="/notifications",
|
|
tags=["notifications"]
|
|
)
|
|
|
|
@router.get("/", response_model=list[NotificationResponse])
|
|
async def my_notifications(
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(get_current_user)
|
|
):
|
|
return await list_my_notifications(db, user.id)
|
|
|
|
@router.post("/{notification_id}/respond", response_model=NotificationResponse)
|
|
async def respond_notification(
|
|
notification_id: str,
|
|
payload: NotificationAction,
|
|
db: AsyncSession = Depends(get_db),
|
|
user=Depends(get_current_user)
|
|
):
|
|
try:
|
|
return await respond_to_notification(
|
|
db,
|
|
notification_id,
|
|
user.id,
|
|
payload.is_accepted
|
|
)
|
|
except ValueError as e:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=str(e)
|
|
)
|
|
|
|
@router.post("/public")
|
|
async def broadcast_notification(
|
|
title: str,
|
|
description: str,
|
|
db: AsyncSession = Depends(get_db),
|
|
admin=Depends(get_current_admin)
|
|
):
|
|
users = await get_all_users(db)
|
|
user_ids = [u.id for u in users]
|
|
return await send_public_notification(
|
|
db,
|
|
title,
|
|
description,
|
|
admin.id,
|
|
user_ids
|
|
)
|