139 lines
4.6 KiB
Python
139 lines
4.6 KiB
Python
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)
|