from flask import Flask, jsonify, request from uuid import uuid4 import uuid import requests class User: def __init__(self, name, surname, uuid_: uuid): if uuid_ is None: self.uuid_: uuid = uuid4() else: self.uuid_: uuid = uuid.UUID(uuid_) self.name: str = name self.surname: str = surname def to_dict(self): return { "uuid": self.uuid_, "name": self.name, "surname": self.surname } def to_dict_with_messages(self, messages: list): return { "uuid": self.uuid_, "name": self.name, "surname": self.surname, "messages": messages } app = Flask(__name__) users: list[User] = [ User(name='Dr.', surname='Kino', uuid_='94b171ea-39f6-4a67-9c67-061743f67cfd'), User(name='Caspian', surname='Holstrom', uuid_='724a3192-70dd-4909-9b0f-c9060a4ab1bd'), User(name='Admin', surname='Admin', uuid_='46672ea5-3d7b-4137-a0ac-efd898ca4db6') ] messages_url = 'http://messageService:20002/' def list_jsonify(): return jsonify([user.to_dict() for user in users]) @app.route('/', methods=['GET']) def get_all(): return list_jsonify(), 200 @app.route('/<uuid:uuid_>', methods=['GET']) def get_one(uuid_): for user in users: if user.uuid_ == uuid_: return user.to_dict(), 200 return f'Пользователь с uuid {uuid_} не найден', 404 @app.route('/info/<uuid:uuid_>', methods=['GET']) def get_one_with_messages(uuid_): for user in users: if user.uuid_ == uuid_: response = requests.get(messages_url + f'by-user/{uuid_}') print(response.json()) return user.to_dict_with_messages(response.json()), 200 return f'Пользователь с uuid {uuid_} не найден', 404 @app.route('/check/<uuid:uuid_>', methods=['GET']) def check_exist(uuid_): for user in users: if user.uuid_ == uuid_: return '', 200 return '', 404 @app.route('/', methods=['POST']) def create(): data = request.json name = data.get('name', None) surname = data.get('surname', None) if name is None or surname is None: return 'Недостаточно информации для создания пользователя', 404 new_user = User(name, surname, None) users.append(new_user) return get_one(new_user.uuid_) @app.route('/<uuid:uuid_>', methods=['PUT']) def update_by_id(uuid_): data = request.json new_name = data.get('name', None) new_surname = data.get('surname', None) for user in users: if user.uuid_ == uuid_: if new_name is not None: user.name = new_name if new_surname is not None: user.surname = new_surname return get_one(user.uuid_) return f'Пользователь с uuid {uuid_} не найден', 404 @app.route('/<uuid:uuid_>', methods=['DELETE']) def delete(uuid_): for user in users: if user.uuid_ == uuid_: users.remove(user) return 'Пользователь удален', 200 return f'Пользователь с uuid {uuid_} не найден', 404 if __name__ == '__main__': app.run(host='0.0.0.0', port=20001, debug=True)