mirror of
http://88.130.71.182:3000/BlitTech/deals24togo_be.git
synced 2026-06-13 08:41:02 +00:00
75 lines
2.1 KiB
Python
75 lines
2.1 KiB
Python
"""Contact / message endpoints."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Depends, Query
|
|
|
|
from app.middleware.auth import get_current_user
|
|
from app.schemas.message import (
|
|
MessageCreate,
|
|
MessageListResponse,
|
|
MessageMarkRead,
|
|
MessageResponse,
|
|
)
|
|
from app.services.agency_service import AgencyService
|
|
from app.services.message_service import MessageService
|
|
|
|
router = APIRouter(prefix="/messages", tags=["Messages"])
|
|
|
|
|
|
@router.post("/", response_model=MessageResponse, status_code=201)
|
|
def send_message(body: MessageCreate):
|
|
"""Public endpoint — anyone can send a message about a listing."""
|
|
svc = MessageService()
|
|
return svc.send_message(body.model_dump())
|
|
|
|
|
|
@router.get("/", response_model=MessageListResponse)
|
|
def list_messages(
|
|
read: Optional[bool] = None,
|
|
page: int = Query(1, ge=1),
|
|
page_size: int = Query(20, ge=1, le=100),
|
|
user: dict = Depends(get_current_user),
|
|
):
|
|
"""List messages for the current user's agency."""
|
|
agency_svc = AgencyService()
|
|
agency = agency_svc.get_agency_by_user(user["id"])
|
|
|
|
svc = MessageService()
|
|
return svc.list_messages(
|
|
agency_id=agency["id"],
|
|
user_id=user["id"],
|
|
user_role=user["role"],
|
|
read_filter=read,
|
|
page=page,
|
|
page_size=page_size,
|
|
)
|
|
|
|
|
|
@router.get("/unread-count")
|
|
def unread_count(user: dict = Depends(get_current_user)):
|
|
agency_svc = AgencyService()
|
|
agency = agency_svc.get_agency_by_user(user["id"])
|
|
|
|
svc = MessageService()
|
|
count = svc.get_unread_count(agency["id"])
|
|
return {"unread_count": count}
|
|
|
|
|
|
@router.patch("/{message_id}/read", response_model=MessageResponse)
|
|
def mark_message_read(
|
|
message_id: str,
|
|
body: MessageMarkRead,
|
|
user: dict = Depends(get_current_user),
|
|
):
|
|
svc = MessageService()
|
|
return svc.mark_read(message_id, user["id"], user["role"], body.read)
|
|
|
|
|
|
@router.delete("/{message_id}")
|
|
def delete_message(message_id: str, user: dict = Depends(get_current_user)):
|
|
svc = MessageService()
|
|
return svc.delete_message(message_id, user["id"], user["role"])
|