Спроектируйте и реализуйте приложение для получения и обработки сообщений от клиента.
Кроме основного задания, выберите из списка дополнительные требования. У каждого требования есть определённая сложность, от которой зависит количество баллов. Необходимо выбрать такое количество заданий, чтобы общая сумма баллов была больше или равна 4
. Выбор заданий никак не ограничен: можно выбрать все простые или одно среднее и два простых, или одно продвинутое, или решить все.
Реализовать сервис, который обрабатывает поступающие запросы от клиентов.
Условия и требования:
- Подключенный клиент добавляется в «общий» чат, где находятся ранее подключенные клиенты.
- После подключения новому клиенту доступны последние N cообщений из общего чата (20, по умолчанию).
- Повторно подключенный клиент имеет возможность просмотреть все ранее непрочитанные сообщения до момента последнего опроса (как из общего чата, так и приватные).
- По умолчанию сервер стартует на локальном хосте (127.0.0.1) и на 8000 порту (возможность задать любой).
Список возможных методов для взаимодействия (можно изменять)
- Подключиться к общему чату.
POST /connect
- Получить статус и информацию о чатах.
GET /status
- Отправить сообщение в общий чат или определенному пользователю в приватный чат.
POST /send
Реализовать сервис, который умеет подключаться к серверу для обмена сообщениями с другими клиентами.
Условия и требования:
- После подключения клиент может отправлять сообщения в «общий» чат.
- Возможность отправки сообщения в приватном чате (1-to-1) любому участнику из общего чата.
- (1 балл) Период жизни доставленных сообщений — 1 час (по умолчанию).
- (1 балл) Клиент может отправлять не более 20 (по умолчанию) сообщений в общий чат в течение определенного периода — 1 час (по умолчанию). В конце каждого периода лимит обнуляется.
- (1 балл) Возможность комментировать сообщения.
- (2 балла) Возможность создавать сообщения с заранее указанным временем отправки; созданные, но не отправленные сообщения можно отменить.
- (2 балла) Возможность пожаловаться на пользователя. При достижении лимита в 3 предупреждения, пользователь становится «забанен» — невозможность отправки сообщений в течение 4 часов (по умолчанию).
- (3 балла) Возможность отправлять файлы различного формата (объёмом не более 5Мб, по умолчанию).
- (3 балла) Возможность создавать кастомные приватные чаты и приглашать в него других пользователей. Неприглашенный пользователь может «войти» в такой чат только по сгенерированной ссылке и после подтверждения владельцем чата.
- (4 балла) Пользователь может подключиться с двух и более клиентов одновременно. Состояния должны синхронизироваться между клиентами.
- **(5 баллов) Реализовать кастомную реализацию для взаимодействия по протоколу
http
(можно использоватьasyncio.streams
);
- Опишите документацию по разработанному API.
- Используйте концепции ООП.
- Используйте аннотацию типов.
- Предусмотрите обработку исключительных ситуаций.
- Приведите стиль кода в соответствие pep8, flake8, mypy.
- Логируйте результаты действий.
- Покройте написанный код тестами.
- Можно использовать внешние библиотеки, но не фреймворки (описать в requirements.txt).
- Можно не проектировать БД: информацию хранить в памяти и/или десериализовать/сериализировать в файл (формат на выбор) и восстанавливать при старте сервера.
- Нет необходимости разрабатывать UI для клиента: можно выводить информацию в консоль или использовать лог-файлы.
- API может быть, как вызов по команде/флагу для консольного приложения или эндпойнт для http-сервиса.