from fastapi import APIRouter, Depends, HTTPException, status, Request from sqlalchemy.orm import Session from typing import List from slowapi import Limiter from slowapi.util import get_remote_address from database import get_db, Message from schemas import MessageCreate, Message as MessageSchema from auth import verify_token # Create rate limiter instance limiter = Limiter(key_func=get_remote_address) router = APIRouter(prefix="/messages", tags=["messages"]) @router.get("", response_model=List[MessageSchema]) @router.get("/", response_model=List[MessageSchema]) @limiter.limit("30/minute") def get_messages( request: Request, token: str = Depends(verify_token), db: Session = Depends(get_db) ): """Get all messages""" messages = db.query(Message).order_by(Message.created_at.asc()).all() return messages @router.post("", response_model=MessageSchema) @router.post("/", response_model=MessageSchema) @limiter.limit("10/minute") def create_message( request: Request, message: MessageCreate, token: str = Depends(verify_token), db: Session = Depends(get_db) ): """Create a new message""" db_message = Message( message=message.message, sender=message.sender, item_id=message.item_id, amount=message.amount ) db.add(db_message) db.commit() db.refresh(db_message) return db_message @router.delete("/{message_id}") @limiter.limit("20/minute") def delete_message( request: Request, message_id: int, token: str = Depends(verify_token), db: Session = Depends(get_db) ): """Delete a message by ID""" message = db.query(Message).filter(Message.id == message_id).first() if not message: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail="Message not found" ) db.delete(message) db.commit() return {"message": "Message deleted successfully"}