Files
itdontfitgsapi/messages.py
2025-09-23 22:58:29 -04:00

66 lines
1.9 KiB
Python

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"}