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)
|