-
Notifications
You must be signed in to change notification settings - Fork 49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Sprint 3 #67
Sprint 3 #67
Conversation
Я создавал форк по инструкции, автоматические тесты проходят и 2 предыдущих спринта всё было нормально Данные в форме изменения профиля добавлю |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Здравствуйте. (Нужно развернуть общий комментарий ↓)
Посмотрите на гитхабе все комментарии к коду (нужно прокрутить вниз страницу там)
Работа проделана огромная:
Readme
хорошо оформлен- Проект задеплоен и отлично работает
- Отлично, что нет
EOF
ошибок в гите - Хорошая структура папок и файлов
- Отлично, что указываете понятный текст ошибки под инпутом
- Хорошая логика удаления пользователя из чата
- Хорошая логика сокетов
но есть некоторые недочеты:
- Клик по стрелке возле инпута сообщения не отправляет сообщение в чат https://disk.yandex.ru/i/dyaP7mku9z9O8g
- Скрин https://disk.yandex.ru/i/8LX-AWdsISRUig Я могу добавить пустое сообщение в чат, а валидация не должна мне этого давать
- По заданию требуется: При обновлении страницы с определённым URL должна отображаться та же самая страница. Если я перезагружаю страницу в профиле, то должен попадать в профиль. На Нетлифай это у Вас не работает
https://ya-praktikum.tech/api/v2
везде повторяется в запросах. Нужно вынести в константуBASE_URL
и импортировать везде в коде проекта, добавляя в конце изменяющуюся часть (эндпоит). Это обычная практика, чтобы одним движением можно было сменить адрес, но не менять эндпоинты.- Для любых запросов на сервер в самом конце цепочки запроса нужно осуществлять проверку на возможные ошибки с помощью
catch
. JSON.parse
может выкинуть исключение, если данные невалидные. Стоит добавить блокtry/catch
для отлова возможной ошибки
Можно лучше (Это совет. Необязательно к исправлению)
- Если типизация повторяется в каждом методе (функции), то нужно типизировать сам метод (функцию), а не дублировать типизацию аргументов. Код станет чище
- Нужна возможность менять картинку чата
- Должна быть возможность удалить сам чат
- При редактировании профиля нужно вставлять в инпуты все актуальные данные пользователя, чтобы он мог изменить одну букву без необходимости опять впечатывать все его данные. А то это только расстроит пользователя, и он не будет использовать этот сервис больше.
}) | ||
|
||
|
||
app.listen(3000, () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Можно лучше
Лучше дать возможность поменять порт из консоли, если понадобится: const PORT = process.env.PORT || 3000;
. Если не задан порт, тогда будет 3000
по умолчанию.
src/services/AuthService.ts
Outdated
} | ||
|
||
export class AuthService { | ||
baseURL: string = 'https://ya-praktikum.tech/api/v2/auth' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://ya-praktikum.tech/api/v2
везде повторяется в запросах. Нужно вынести в константу BASE_URL
и импортировать везде в коде проекта, добавляя в конце изменяющуюся часть (эндпоит). Это обычная практика, чтобы одним движением можно было сменить адрес, но не менять эндпоинты.
А еще лучше поместить этот базовый урл 1 раз внутрь класса HTTPTransport
, а в конструктор экземпляров передавать только эндпоинт
new HTTPTransport('/auth/');
src/services/ChatService.ts
Outdated
} | ||
|
||
export class ChatService { | ||
baseURL: string = 'https://ya-praktikum.tech/api/v2/chats' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://ya-praktikum.tech/api/v2
везде повторяется в запросах. Нужно вынести в константу BASE_URL
и импортировать везде в коде проекта, добавляя в конце изменяющуюся часть (эндпоит). Это обычная практика, чтобы одним движением можно было сменить адрес, но не менять эндпоинты.
А еще лучше поместить этот базовый урл 1 раз внутрь класса HTTPTransport
, а в конструктор экземпляров передавать только эндпоинт
new HTTPTransport('/auth/');
src/services/UserService.ts
Outdated
import HTTPTransport from '@/core/HTTPTransport.ts' | ||
|
||
export class UserService { | ||
baseURL: string = 'https://ya-praktikum.tech/api/v2/user' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://ya-praktikum.tech/api/v2
везде повторяется в запросах. Нужно вынести в константу BASE_URL
и импортировать везде в коде проекта, добавляя в конце изменяющуюся часть (эндпоит). Это обычная практика, чтобы одним движением можно было сменить адрес, но не менять эндпоинты.
А еще лучше поместить этот базовый урл 1 раз внутрь класса HTTPTransport
, а в конструктор экземпляров передавать только эндпоинт
new HTTPTransport('/auth/');
@@ -0,0 +1,4 @@ | |||
export default (resourceURL: string) => { | |||
const url = resourceURL.replaceAll('/', '%2F') | |||
return `https://ya-praktikum.tech/api/v2/resources/${url}` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://ya-praktikum.tech/api/v2
везде повторяется в запросах. Нужно вынести в константу BASE_URL
и импортировать везде в коде проекта, добавляя в конце изменяющуюся часть (эндпоит). Это обычная практика, чтобы одним движением можно было сменить адрес, но не менять эндпоинты.
Для картинок такой же урл базовый
if (resp.status === 200) { | ||
router.go(routes.login) | ||
} | ||
}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Для любых запросов на сервер в самом конце цепочки запроса нужно осуществлять проверку на возможные ошибки с помощью catch
.
Нужно исправить это везде по коду в конце запросов.
src/utils/connectToMessageSocket.ts
Outdated
}, 10000) | ||
|
||
socket.addEventListener('message', (event) => { | ||
const data = JSON.parse(event.data) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
JSON.parse
может выкинуть исключение, если данные невалидные. Стоит добавить блок try/catch
для отлова возможной ошибки
src/utils/connectToMessageSocket.ts
Outdated
const data = JSON.parse(event.data) | ||
|
||
if (Array.isArray(data)) { | ||
store.set('messages', JSON.parse(event.data)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
JSON.parse(event.data)
4 раза используете в коде тут. Нужно было 1 раз распасить и в переменную записать
И у Вас уже есть эта переменная в виде data
на 36й строчке
src/utils/connectToMessageSocket.ts
Outdated
} | ||
if (data.type === 'message') { | ||
const messages = store.getState().messages | ||
const message: MessageItemProps = JSON.parse(event.data) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
JSON.parse(event.data)
4 раза используете в коде тут. Нужно было 1 раз распасить и в переменную записать
И у Вас уже есть эта переменная в виде data
на 36й строчке
src/utils/connectToMessageSocket.ts
Outdated
} | ||
if (data.type === 'user connected') { | ||
const messages = store.getState().messages | ||
const message: MessageItemProps = JSON.parse(event.data) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
JSON.parse(event.data)
4 раза используете в коде тут. Нужно было 1 раз распасить и в переменную записать
И у Вас уже есть эта переменная в виде data
на 36й строчке #
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Поздравляю! Ваша работа принята.
Вы отлично потрудились.
Удачного дальнейшего обучения.
No description provided.