37 lines
1.2 KiB
Python
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) |