116 lines
3.3 KiB
Python
116 lines
3.3 KiB
Python
|
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)
|