По приведённому условию язык приходит только в теле авторизованного PATCH /user. После валидации контроллер сохраняет data.language в поле пользователя MongoDB.
Я имею ввиду как он в бэк попадает
По приведённому условию язык приходит только в теле авторизованного PATCH /user. После валидации контроллер сохраняет data.language в поле пользователя MongoDB.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Я имею ввиду как он в бэк попадает
Клиент → PATCH /user + Authorization: Bearer body: { "language": "en" | "ru" | "es" }
UserController.update
validateUpdate → user.language = data.language
MongoDB: поле language у пользователя
Больше ниоткуда:
- при create / login язык не пишется;
- геолокация / IP / Accept-Language бэкенд не смотрит;
- сам бэкенд значение не угадывает.
Пока клиент не сделал этот PATCH после получения JWT — в БД языка нет.
Ответ
По приведённому условию язык приходит только в теле авторизованного PATCH /user. После валидации контроллер сохраняет data.language в поле пользователя MongoDB.
Клиент получает JWT, затем отправляет выбранный язык вместе с Authorization: Bearer. Бэкенд принимает только допустимые значения en, ru или es и обновляет пользователя, определённого по токену.
Регистрация и вход здесь язык не устанавливают, а IP и Accept-Language не используются. Поэтому отсутствие PATCH означает отсутствие сохранённого значения. Если нужен fallback, его следует явно определить как отдельное правило, а не считать, что сервер уже угадывает язык.