Разработчик TypeScript
Чтобы принять участие в стажировке вам нужно заполнить анкету откликнувшись по ссылке https://forms.gle/vQehgXjJqxDGoqzPA
Последняя часть вопросов в анкете отведена для ответов на задачи, которые описаны ниже на этой странице. Чаще всего в поле ответа нужно указать ссылку на gist с текстом ответа, либо ссылку на репозиторий, обращайте внимание на то, что нужно оставить в анкете в качестве результата. Если вместо требуемой ссылки вы приведете что-то другое, например текст ответа, ваш ответ с высокой вероятностью не будет засчитан.
Обязанности
- Разработка серверной части web-приложений (NestJS, Node.js, PostgreSQL)
- Разработка клиентских частей приложения на TypeScript, Vue.js, Quasar.
Требования
- Базовые знания JavaScript. Хорошо, если знаком также TypeScript.
- Теоретические знания хотя бы одного из фреймворков для разработки веб-приложений (можно не на JS).
- Готовность к изучению множества технологий разработки одновременно в свое личное время.
- Приветствуется владение чем-нибудь из перечисленного: SQL, HTML, CSS (также lesscss, sass), Linux CLI, Docker, git, WebStorm (или другие IDE/редакторы).
- Приветствуется базовая грамотность в Computer Science, включая базы данных, сетевые технологии, технологические стеки построения веб-приложений, устройства операционных систем (в первую очередь семейства Linux). Ориентиры: https://yollection.ru/road/backend, https://yollection.ru/road/frontend.
Задание 1. Разработать функцию определения счета в игре
Задача
В примере кода ниже генерируется список фиксаций состояния счета игры в течение матча.
Разработайте функцию getScore(gameStamps, offset), которая вернет счет на момент offset в списке gameStamps.
Нужно суметь понять суть написанного кода, заметить нюансы, разработать функцию вписывающуюся стилем в существующий код, желательно адекватной алгоритмической сложности.
const TIMESTAMPS_COUNT = 50000;
const PROBABILITY_SCORE_CHANGED = 0.0001;
const PROBABILITY_HOME_SCORE = 0.45;
const OFFSET_MAX_STEP = 3;
type Score = {
home: number;
away: number;
};
type Stamp = {
offset: number;
score: Score;
};
const emptyScoreStamp: Stamp = {
offset: 0,
score: {
home: 0,
away: 0,
},
};
export const generateStamps = (): Stamp[] => {
const scoreStamps = Array(TIMESTAMPS_COUNT)
.fill(emptyScoreStamp)
.map(
((acc) => () => {
const scoreChanged =
Math.random() > 1 - PROBABILITY_SCORE_CHANGED;
const homeScoreChange =
scoreChanged && Math.random() < PROBABILITY_HOME_SCORE
? 1
: 0;
const awayScoreChange =
scoreChanged && !homeScoreChange ? 1 : 0;
return {
offset: (acc.offset +=
Math.floor(Math.random() * OFFSET_MAX_STEP) + 1),
score: {
home: (acc.score.home += homeScoreChange),
away: (acc.score.away += awayScoreChange),
},
};
})(emptyScoreStamp)
);
return scoreStamps;
};
export const getScore = (gameStamps: Stamp[], offset: number): Score => {
// continue the function's implementation
};
Результат
- Ссылка на gist с исходным кодом функции.
Задание 2. Разработать тесты для функции определения счета в игре
Задача
Для разработанной в предыдущем задании функции getScore(gameStamps, offset) разработайте unit-тесты на базе библиотеки jest.
Тесты должны учитывать все возможные случаи использования функции, концентрироваться на проверке одного случая, не повторяться, название тестов должно отражать суть выполняемой проверки.
Результат
- Ссылка на gist с исходным кодом тестов.
Задание 3. Разработать серверную и клиентскую части реализующие JWT аутентификацию
Задача
Должны быть разработаны следующие возможности:
Регистрация нового пользователя, email в качестве login, задаваемый пользователем пароль. Подтверждение email’а не требуется.
Вход (logging in) пользователя в систему.
Выход (logging out) пользователя из системы.
Создание, получение, редактирование, удаление (CRUD) пользователем информации о себе: Имя, Телефон, Адрес, Информация о себе.
Серверная часть реализует соответствующие эндпоинты, клиентская часть реализует пользовательский интерфейс и передачу данных из него на сервер.
Замечания к реализации
Для разработки серверной части следует использовать TypeScript, Nest.js.
Работа с JWT: https://docs.nestjs.com/security/authentication#jwt-functionality
Для разработки клиентской части следует использовать Quasar, для взаимодействия с API axios (предусмотреть сценарии истечения access token’а с помощью axios interceptors).
Результат
- Ссылка на развернутое приложение, в котором можно проверить описанный в задании функционал.
- Ссылки на git-репозитории с исходными кодами решения.