simplechat/backend_py/messages.py

37 lines
1.2 KiB
Python

from bottle import Bottle, request, response
from json import dumps, loads
from db_handler import User, Message
from auth import user_guard
from utils import read_keys_from_request
app = Bottle()
def serialize_message(messages: list[Message]) -> str:
return dumps({getattr(msg, "id"):
{key: getattr(msg, key)
for key in msg.__dict__.keys() if key[0] != '_' and key != 'id'}
for msg in messages})
@app.route('/<room>', method=['POST'])
@user_guard()
def recive_msg(user: User, room: str):
msg = read_keys_from_request(keys=["content"])
if not msg:
response.status = 400
return {"error": "Missing 'content' in request body"}
new_msg = request.db_connector.add_msg_to_room(room, msg["content"], user.name)
return serialize_message([new_msg])
@app.route('/<room>', method=['GET'])
@user_guard()
def return_msgs(user: User, room: str):
since = request.query.get('since', None)
if since:
try:
since = int(since)
except ValueError:
response.status = 400
return {"error": "Invalid 'since' parameter"}
messages = request.db_connector.get_messages_from_room(room, since)
return serialize_message(messages)