from bottle import Bottle, request, response from json import dumps, loads from simple_chat_api.db_handler.db_handler import User, Message from simple_chat_api.endpoints.auth import user_guard from simple_chat_api.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('/', 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('/', 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)