Видео с демонстрацией работы тестового задания: https://www.loom.com/share/2aae48ff4d1a4f6881a8717980e7199b
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
Цель:
Разработать сервис который возвращает текущую погоду в городе. Погоду получаем с сервиса https://www.weatherapi.com/
Системные требования к проекту:
- Используется стек NestJs + TypeOrm + PostgresSQL база данных *Проект поднимается командой docker-compose up . В докере поднимаются 2 сервиса. Сам сервис на NodeJs и БД.
- Все ручки сервиса должны документироваться в swagger
Методы сервиса:
- Все методы - post запросы
Регистрация. Входящие параметры: { login!: string password!: string fio!: string }
пароль должен быть не не короче 6 символов, и содержать один из символов: . , ! _
Исходящие параметры: { fio!: string apiToken!: string }
- apiToken - должен геририроваться успешной регистрации пользователя
- Сохраняем данные о пользователе и сгенирированный apiToken в таблицу users
Авторизация. Входящие параметры: { login!: string password!: string }
Исходящие параметры: { fio!: string apiToken!: string }
Текущая погода. Входящие параметры: { apiToken!: string city!: string language?: string = "ru" }
Логика:
- Производится валидация токена. Если токен невалидный, то возвращаем ошибку
- Отправляется запрос для получения погоды на /current.json
- Сохраняем в БД историю запроса. (структура таблицы ниже)
- Возвращаем ответ от сервиса погоды нашему пользователю История запросов - это как-бы “логи” сохраняемые в бд Структура таблицы:
Actions PK - id FK- user_id action_time request_result temp_c
user_id - ссылка на пользователя совершающего запрос action_time - время в unix секундах, когда пришел запрос от пользователя request_result. В это поле сохраняем статус ответа от сервиса с погодой (200, 400 и тд…) temp_c. Сохраняем сюда температуру, которую вернул сервис. Если сервис вернул ошибку, то проставляем null