51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
from fastapi import APIRouter, Depends
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.auth.service import get_current_user
|
|
from app.database.session import get_db
|
|
from app.messages.repository import get_message_by_id
|
|
from app.media.schemas import AttachmentCreateRequest, AttachmentRead, ChatAttachmentRead, UploadUrlRequest, UploadUrlResponse
|
|
from app.media.service import generate_upload_url, list_attachments_for_chat, store_attachment_metadata
|
|
from app.realtime.service import realtime_gateway
|
|
from app.users.models import User
|
|
|
|
router = APIRouter(prefix="/media", tags=["media"])
|
|
|
|
|
|
@router.post("/upload-url", response_model=UploadUrlResponse)
|
|
async def create_upload_url(
|
|
payload: UploadUrlRequest,
|
|
_current_user: User = Depends(get_current_user),
|
|
) -> UploadUrlResponse:
|
|
return await generate_upload_url(payload)
|
|
|
|
|
|
@router.post("/attachments", response_model=AttachmentRead)
|
|
async def create_attachment_metadata(
|
|
payload: AttachmentCreateRequest,
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
) -> AttachmentRead:
|
|
attachment = await store_attachment_metadata(db, user_id=current_user.id, payload=payload)
|
|
message = await get_message_by_id(db, attachment.message_id)
|
|
if message:
|
|
await realtime_gateway.publish_chat_updated(chat_id=message.chat_id)
|
|
return attachment
|
|
|
|
|
|
@router.get("/chats/{chat_id}/attachments", response_model=list[ChatAttachmentRead])
|
|
async def list_chat_attachments_endpoint(
|
|
chat_id: int,
|
|
limit: int = 100,
|
|
before_id: int | None = None,
|
|
db: AsyncSession = Depends(get_db),
|
|
current_user: User = Depends(get_current_user),
|
|
) -> list[ChatAttachmentRead]:
|
|
return await list_attachments_for_chat(
|
|
db,
|
|
user_id=current_user.id,
|
|
chat_id=chat_id,
|
|
limit=limit,
|
|
before_id=before_id,
|
|
)
|