mirror of
http://88.130.71.182:3000/BlitTech/deals24togo_be.git
synced 2026-06-12 23:33:21 +00:00
Initial commit
This commit is contained in:
74
app/api/v1/endpoints/messages.py
Normal file
74
app/api/v1/endpoints/messages.py
Normal file
@@ -0,0 +1,74 @@
|
||||
"""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"])
|
||||
Reference in New Issue
Block a user