Conversation
…ектов, а также тип Indexed для работы с объектами с динамическими ключами
Сегмент shared/lib/router: синглтон Router с History API, basePath и fallback на 404, Route с монтированием Block в контейнер по селектору, normalizeAppPath в path/. Реэкспорт из shared/lib. Made-with: Cursor
Файл shared/config/routes.ts: APP_PATHS для внутренних путей и appHref с учётом import.meta.env.BASE_URL при деплое в подкаталог. Made-with: Cursor
…ерез функцию connect
…з функцию bootstrapAppStore
…функцию connect и создана функция mapMessengerLayoutState для управления состоянием пользователя в боковой панели.
…бавлен блок для регистрации
… роутера. Изменены методы управления маршрутами
… для управления сессиями, входом и выходом пользователей, а также взаимодействия с API чатов.
…енты MessengerRouteBlock и AuthScreenBlock для интеграции новых функций.
… интерфейсы и компоненты формы редактирования профиля для поддержки новых данных.
…idebarChatListItem
…оненте MainLayout,
…овлена обработка события submit для передачи данных регистрации через это свойство.
…ти от статуса аутентификации пользователя.
…ено отображение аватара в SidebarChatSection.
…ства, добавлены новые параметры для поиска, изменено отображение заголовка
…а, добавлены новые стили для кнопки загрузки и метаданных аватара
…в, добавлены функции для обработки типов чатов, обновлены компоненты ChatHeader и ChatPage для отображения статуса пользователя.
…льные окна CreateDmModal и CreateGroupModal
…на поддержка полного URL
…няется в состоянии, если он был загружен
…ны модальные окна CreateDmModal и CreateGroupModal на более универсальные компоненты
…есено отдельно от редактирования профиля
aromanovnik
left a comment
There was a problem hiding this comment.
Здравствуйте, Максим! 👋 (Нужно развернуть общий комментарий ↓)
Работа выполнена очень хорошо:
Добавлен корректно работающий роутинг, реализовано HTTP API для чатов, авторизации и пользователей. Код отлично типизирован и структурирован. Все выглядит чисто и понятно. Отличная работа!
Тем не менее, есть несколько моментов, которые стоит доработать. 🔧 Подробнее в комментариях к коду.
Что нужно исправить:
- При выборе детального чата отображаются моковые данные. По заданию необходимо загружать реальные сообщения, которые были отправлены ранее, а не использовать заглушки.
- По заданию должна быть реализована возможность добавления и удаления пользователя из чата. Сейчас методы для этого есть, но они не используются.
- По заданию должна быть реализована работа с WebSocket для получения и отправки сообщений чатов в реальном времени.
Что можно улучшить:
- Все методы (
get,put,post,delete) одинаковы, отличается только тип метода запроса. Можно использовать фабричный метод, который будет возвращать соответствующий функционал в зависимости от типа запроса. - Для удобства и снижения вероятности ошибок при работе с HTTP-статусами стоит вынести их в
enum.
Напоминаю, что работа может быть принята только после исправления всех критических замечаний с пометкой Надо исправить.
Желаю успехов в доработке проекта!
| } | ||
|
|
||
| class HTTPTransport { | ||
| get = (url: string, options: HTTPRequestOptions = {}) => { |
There was a problem hiding this comment.
Можно лучше: Все методы (get, put, post, delete) одинаковы, отличается только тип метода запроса. Можно использовать фабричный метод, который будет возвращать соответствующий функционал в зависимости от типа запроса. Это улучшит структуру кода, повысит его повторное использование и упростит изменения в будущем, поскольку все изменения будут централизованы в одном месте.
type HTTPMethod = <R = unknown>(url: string, options?: Partial<RequestOptions<QueryParams>>) => Promise<R>;
export class HTTPTransport {
// Фабричный метод для создания HTTP-методов
private createMethod(method: METHODS): HTTPMethod {
return (url, options = {}) => this.request(url, { ...options, method });
}
// Методы HTTP
protected readonly get = this.createMethod(METHODS.GET);
protected readonly put = this.createMethod(METHODS.PUT);
protected readonly post = this.createMethod(METHODS.POST);
protected readonly delete = this.createMethod(METHODS.DELETE);
// Реализация метода request
private request<R>(
url: string,
options: RequestOptions<QueryParams>,
): Promise<R> {
// Логика выполнения HTTP-запроса
}
}There was a problem hiding this comment.
Добавил фабрику. Спасибо за идею
| }); | ||
|
|
||
| xhr.onload = function () { | ||
| if (xhr.status >= 200 && xhr.status < 300) { |
There was a problem hiding this comment.
Можно лучше: Для удобства и снижения вероятности ошибок при работе с HTTP-статусами стоит вынести их в enum. Это избавляет от “магических чисел” в коде, упрощает поддержку и помогает избежать опечаток. Пример:
export enum HttpStatus {
Ok = 200,
Created = 201,
NoContent = 204,
MultipleChoices = 300,
BadRequest = 400,
Unauthorized = 401,
Forbidden = 403,
NotFound = 404,
Conflict = 409,
InternalServerError = 500,
}There was a problem hiding this comment.
Доработал. Спасибо за рекомендацию, так почище и без магических чисел
| import type { ChatTimelineRowVm } from "@/shared/lib/utils"; | ||
| import { Block, type BlockOwnProps } from "@/shared/ui/block"; | ||
|
|
||
| import template from "./ChatThread.hbs?raw"; |
There was a problem hiding this comment.
Получение и отправка сообщений будет реализована в четвертом спринте (как нам объяснили - была пересмотрена программа). Поэтому в этом спринте использовал моки
| await this.loadChats(); | ||
| }, | ||
|
|
||
| async addUsersToChat(data: ChatsUsersRequest): Promise<void> { |
There was a problem hiding this comment.
Надо исправить: По заданию должна быть реализована возможность добавления и удаления пользователя из чата. Сейчас методы для этого есть, но они не используются.
There was a problem hiding this comment.
Добавил. Как-то упустил этот момент
| import type { ChatTimelineRowVm } from "@/shared/lib/utils"; | ||
| import { Block, type BlockOwnProps } from "@/shared/ui/block"; | ||
|
|
||
| import template from "./ChatThread.hbs?raw"; |
There was a problem hiding this comment.
Получение и отправка сообщений будет реализована в четвертом спринте (как нам объяснили - была пересмотрена программа). Поэтому в этом спринте использовал моки
…та в контроллере чатов. Обновлены API для поддержки новых запросов.
…поиска участников, оптимизирована работа с чипами.
…ия создания HTTP методов и улучшена типизация возвращаемых значений.
aromanovnik
left a comment
There was a problem hiding this comment.
🎉 Поздравляю! Работа принята!
Все недочёты успешно исправлены, и результат получился просто отличным!
Вы проделали огромную работу, и это действительно впечатляет!
Желаю успехов в дальнейшей учёбе и новых достижений! 🚀


Реализовано
Важные замечания.