diff --git a/README.md b/README.md index 98deb08..e2fa0a3 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ # Chat -> Chat - это анонимный асинхронный мессенджер +> **Chat** - это анонимный асинхронный мессенджер + +**Chat** написан *за 10 часов* как тестовое задание перед одним из моих собеседований. Я выполнял [это техническое задание](./Техническое%20задание.md) ## Стек - Frontend: - [TypeScript](https://www.typescriptlang.org) - - [React 19](https://react.dev) + - [React](https://react.dev) 19 - [Next.js](https://nextjs.org) 15 (App Router) - [Tailwind CSS](https://tailwindcss.com/) - [Yup](https://github.com/jquense/yup) diff --git a/Техническое задание.md b/Техническое задание.md new file mode 100644 index 0000000..03295c9 --- /dev/null +++ b/Техническое задание.md @@ -0,0 +1,23 @@ +# NodeJS Мессенджер + +## Основные требования к логике работы приложения: +1. Реализовать при помощи *любой* БД хранение последних 20 сообщений, которые были отправлены пользователями сайта + > Реализовывать регистрацию или какую бы то ни было идентификацию пользователя не надо +2. Сообщения должны приходить по WebSocket всем активным пользователям сайта в режиме live в виде "дельты" + > Как только произошел POST запрос, это же сообщение рассылается всем активным пользователям +3. Отправку сообщения отдельным POST запросом + > Других REST запросов быть на сайте не должно +4. Как только развернулся клиент, он должен установить WebSocket соединение с backend-ом и запросить snapshot всех актуальных сообщений на данный момент и впоследствии их редактировать с каждой новой "дельтой" + +## Требования к оформлению: +1. Использовать **React** + *любые другие библиотеки* +2. *Дизайн может быть простым* и даже минималистичным, но *с логичным расположением* кнопок и появлением сообщений +3. Любыми анимациями или улучшенным визуалом можно пренебречь, но будет плюсом, если такое будет реализованно + + +## На что будет обращено внимание: +- ***Реализация REST/WS части*** +- Отказоустойчивость ws соединения + > То есть сообщения не должны теряться. Не должно быть такого, чтоб была необходимость обновлять сайт, чтоб увидеть новые сообщения +- Добавление/удаление сообщений на бэке должно быть выполнено за O(1) по времени +- Вещание должно быть выполнено за O(N) N - кол-во активных слушателей \ No newline at end of file