/test_task_node_server

Test task boilerplate. Fork me to implement :)

Primary LanguageTypeScript

Тестовое задание на позицию JS / TS Fullstack Developer

Build Status

Закончив реализацию, открывайте Pull Request в этот репозиторий

Этот репозиторий содержит рабочее базовое приложение, в которое предлагается нарастить функциональность. Приложение во многом похоже на то, с чем вам предстоит работать в QIWI.

Приложение доступно по адресу https://test-task.qiwi.tools:2211/api/

База данных приложения открыта портом 5432 в интернет по адресу test-task-db.qiwi.tools:5432

Для затравочки: в базе данных лежат платёжные данные о пополнениях счетов мобильных операторов по одному из интерфейсов QIWI. Эти данные нужно будет отдать по API. Для внимательных есть пасхалка: среди транзакционных данных закралась реальная аномалия. Нашедшему жирный плюс =)

Для выполнения задания нужно добавить метод контроллера в авторизованной зоне, выдающий содержимое таблицы aggr_bills.

Большим плюсом будет реализация фильтров по дате в качестве параметров запроса.

Схема БД содержит две таблицы: obj_user и aggr_bills. Таблицы никак не связаны.

В таблице obj_user лежит список пользователей. Запросы на выборку из неё реализованы в приложении. Этой функциональностью следует пользоваться как примером.

В таблице aggr_bills лежат платёжные данные в виде транзакционных агрегатов по пятиминутным интервалам. Доступ к данным в этой таблице необходимо реализовать.

В текущей реализации приложение может авторизовать пользователя, а также в авторизованной зоне выдать список пользователей и информацию о конкретном пользователе по его id.

Рекомендуется пользоваться API-документацей

Для авторизации служит POST метод Auth с параметрами:

email: candidate@e.ru
password: candidate

Полученный при авторизации JWT-токен потребуется для доступа к запросам авторизованной зоны

JWT-токен необходимо указать в заголовке Authorization после ключевого слова Bearer.

Все креды для подключения к БД есть в config/default.json Может потребоваться VPN, т.к. сервер БД на амазоне.

Для первого запуска приложения достаточно трёх шагов:

*при условии установленной среды Node.js >= 8.11

установить зависимости

npm install

собрать приложение

npm run build

и запустить

npm start

Локальная БД или облачная

По умолчанию в проекте используется поднятый в облаке инстанс. Но у вас могут возникнуть проблемы с доступом к нему из-за борьбы РКН и Telegram.

Базу данных можно поднять локально в докер-контейнере. Преимуществом локального запуска для вас будет полный доступ к БД. В облаке пользователь имеет доступ только на чтение.

Для того, чтобы поднять локально, предложен bash скрипт. Запускать можно из корня. Пример:

~/workspace/test_task_node_server$ ./db/test-task-db.sh

После выполнения скрипта вы сможете подключиться к postgres@localhost:5433. Для запуска приложения с локальной БД нужен config/development.json

~/workspace/test_task_node_server$ export NODE_ENV=development
~/workspace/test_task_node_server$ npm start
server is listening on port 2211

Линтер

Линтёр - это хорошо.

Пользуемся им так:

npm run lint

Перед коммитами стараемся не забывать его прогонять.