from flask import Flask, request, jsonify from uuid import uuid4 import uuid import datetime import requests class Message: def __init__(self, text: str, datetime_sent: datetime, uuid_: uuid, user_id: uuid): if uuid_ is None: self.uuid_ = uuid4() else: self.uuid_ = uuid.UUID(uuid_) self.text = text self.datetime_sent = datetime_sent self.user_id = uuid.UUID(user_id) def to_dict(self): return { 'text': self.text, 'datetime_sent': self.datetime_sent, 'user_id': self.user_id, 'uuid': self.uuid_ } def to_dict_for_users(self): return { 'title': self.text, 'datetime_sent': self.datetime_sent, 'uuid': self.uuid_ } def to_dict_with_info(self, user: dict): return { 'title': self.text, 'datetime_sent': self.datetime_sent, 'user_id': self.user_id, 'user_info': user, 'uuid': self.uuid_ } messages = [ Message(text='Hi!', datetime_sent=datetime.datetime.now(), uuid_='4add0525-1857-477d-ad35-56790d400b72', user_id='94b171ea-39f6-4a67-9c67-061743f67cfd'), Message(text='Hello this is a message', datetime_sent=datetime.datetime.now(), uuid_='dd69758d-89e8-49b5-86bf-54ae2adb64e8', user_id='724a3192-70dd-4909-9b0f-c9060a4ab1bd'), Message(text='Test', datetime_sent=datetime.datetime.now(), uuid_='92389e8d-4365-457e-b37e-78abbc07f194', user_id='94b171ea-39f6-4a67-9c67-061743f67cfd'), Message(text='Anyone here?', datetime_sent=datetime.datetime.now(), uuid_='f3a1c526-aca2-47e2-afd3-a1c2eac92458', user_id='724a3192-70dd-4909-9b0f-c9060a4ab1bd'), Message(text='Mambo', datetime_sent=datetime.datetime.now(), uuid_='00abbdb5-e480-4842-bc32-f916894757eb', user_id='46672ea5-3d7b-4137-a0ac-efd898ca4db6') ] def list_jsonify(): return jsonify([message.to_dict() for message in messages]) app = Flask(__name__) users_url = 'http://userService:20001/' @app.route('/', methods=['GET']) def get_all(): return list_jsonify(), 200 @app.route('/info', methods=['GET']) def get_all_full(): users: list[dict] = requests.get(users_url).json() response = [] for message in messages: for user in users: if message.user_id == uuid.UUID(user.get('uuid')): response.append(message.to_dict_with_info(user)) return response, 200 @app.route('/by-user/<uuid:user_uuid>', methods=['GET']) def get_by_user_id(user_uuid): return [message.to_dict_for_users() for message in messages if message.user_id == user_uuid], 200 @app.route('/info/<uuid:uuid_>', methods=['GET']) def get_one_full(uuid_): for message in messages: if message.uuid_ == uuid_: response = requests.get(users_url + str(message.user_id)) return message.to_dict_with_info(response.json()), 200 return f'Сообщение с uuid {uuid_} не найдено', 404 @app.route('/', methods=['POST']) def create(): data = request.json text = data.get('text', None) datetime_sent = datetime.datetime.now() user_id = data.get('user_id', None) checking = requests.get(users_url + f'/check/{user_id}') print(checking) if checking.status_code == 200: new_message = Message(text, datetime_sent, None, user_id) messages.append(new_message) return get_one(new_message.uuid_) if checking.status_code == 404: return f'Пользователь с uuid {user_id} не существует', 404 return 'Неизвестная ошибка', 500 @app.route('/<uuid:uuid_>', methods=['PUT']) def update_by_id(uuid_): data = request.json new_text = data.get('text', None) for message in messages: print(message.uuid_) if message.uuid_ == uuid_: if new_text is not None: message.text = new_text return get_one(message.uuid_) return f'Сообщение с uuid {uuid_} не найдено', 404 @app.route('/<uuid:uuid_>', methods=['DELETE']) def delete(uuid_): for message in messages: if message.uuid_ == uuid_: messages.remove(message) return 'Сообщение успешно удалено', 200 return f'Сообщение с uuid {uuid_} не найдено', 404 @app.route('/<uuid:uuid_>', methods=['GET']) def get_one(uuid_): for message in messages: if message.uuid_ == uuid_: return message.to_dict(), 200 return f'Сообщение с uuid {uuid_} не найдено', 404 if __name__ == '__main__': app.run(host='0.0.0.0', port=20002, debug=True)