66 lines
1.9 KiB
Python
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"}
|