Вебдодаток, який демонструє деяку активність, якщо до нього звернутись. Опис активності яку повинен демонструвати додадок приховано згідно умов надання тестового завдання. Також приховано того, хто надавав завдання.
Disclaimer: По цьому тестовому завданню була домовленість, що компанія обов'язково надасть фідбек. Навзаєм я не повинен був публіковати назву кампанії та опис завдання. Оскільки HR не виконала свою частину домовленості (Ксенія, привіт), я вважаю себе вільним від домовленості не публіковати саме завдання.
Есть таблица contacts в SQL базе. В ней миллионы строк.
Поле Тип id 64 bit integer name varchar Написать REST сервис hello с ресурсом
/hello/contacts?nameFilter=val
Запрос к contacts должен возвращать контакты из таблицы БД contacts. Параметр nameFilter обязателен. В него передаётся регулярное выражение. В возвращаемых данных не должно быть записей, в которых contacts.name совпадает с регулярным выражением.
Массив контактов возвращается в json формате
contacts: [ Contact, ... ]
Contact { “id”: integer, “name”: string }
Пример запросов /hello/contacts?nameFilter=^A.$ - возвращает контакты, которые НЕ начинаются с A /hello/contacts?nameFilter=^.[aei].*$ - возвращает контакты, которые НЕ содержат букв a, e, i
Замечания и пожелания к реализации
- Фильтр обязательно применять в java коде, не использовать возможности SQL.
- В реализации обязательно учитывать огромное предполагаемое количество контактов и то, что легко написать фильтр, который возвращает их все.
- Учитывать, что сервис должен быть готов одновременно обрабатывать множество запросов.
- SQL БД можно использовать любую, предпочтительно PostgreSQL.
- Сервис хотелось бы увидеть на Spring Boot, но не обязательно.
- Коды ошибок HTTP использовать типичные для REST сервисов.
- Сборка maven
- Наличие тестов
- К результату приложить объяснение, как развернуть БД, запустить приложение. Было бы здорово, если бы окружение поднималось в Docker.
Код решения должен быть опубликован на GitHub’е без упоминания названия компании. В README должен присутствовать статус сборки от Travis CI (https://docs.travis-ci.com/user/status-images/) или Circle CI (https://circleci.com/docs/status-badges) в виде бейджика, по клику на который происходит переход на страницу сборки. README или любой другой файл в репозитории не должен содержать текст задания.
Для запуску веб додатк потрібно мати інстальоване:
- Linux
- Docker
- Java JDK 13
- Maven
Для запуску веб додатка скачайте архів, розпакуйте та перейдіть до КАТАЛОГУ ДОДАТКА. Виконайте команду в консолі
$ cd red-roses-main/million-red-roses
Зберіть додаток виконавши:
$ mvn clean package
Для перевірки, що все вдалося запустіть додаток командою в консолі в КАТАЛОЗІ ДОДАТКА
$ java -jar target/million-red-roses.jar
Зупиніть додаток натиснувши в консолі CTRL+C
Перед збіркою в Doсker можна виконати деякі налаштування:
По замовчанню вебдодаток виконується на інтегрованої в нього H2 базі даних.
Якщо ви хочете увімкнуть доступ до вебконсолі бази даних, вам потрібно змінити налаштування в файлі (КАТАЛОГ ДОДАТКА)/src/main/resources/application.yml
В розділі, згаданому нижче, змініть 'false' на 'true' в обох випадках
spring:
h2:
console:
enabled: false
settings:
web-allow-others: false
Після зміни цього налаштування ви зможете отримати доступ до консолі за адресою http://localhost:8080/h2-console
Вхід в консоль за параметрами:
Driver Class: "org.h2.Driver"
JDBC URL: "jdbc:h2:mem:testdb"
User Name: "test"
Password: "test"
(Ім'я та пароль можна змінити у файлі (КАТАЛОГ ДОДАТКА)/src/main/resources/application.yml у розділі
spring:
datasource:
username: test
password: test
)
Якщо ви бажаєте виконувати веб додаток на базі PostreSQL, вам необхідно змінити деякі налаштування у файлі (КАТАЛОГ ДОДАТКА)/src/main/resources/application.yml Знайдіть у цьому файлі секцію нвлвштувань H2
# H2 settings section
# -------------------
деякі налаштування
деякі налаштування
# -------------------
Закоментуйте "деякі налаштування" в цьому файлі
Знайдіть у цьому файлі секцію нвлвштувань PostgreSQL
# PostgreSQL settings section
# ---------------------------
# деякі налаштування
# деякі налаштування
# ----------------------------
Розкоментуйте "деякі налаштування" в цьому файлі
Встановіть ваші значення налаштувань для змінних
url:
password:
platform:
username:
Веб додаток в своїй роботі використовує таблицю з ім'ям contacts Якщо в вашій базі даних є таблиця з таким ім'ям, то майте на увазі, що всі дані в ній будуть спотворені
За замовченням додаток вікористовує набір тестових даних в розмірі 200 записів. Якщо цього замало, можна цей набір даних замінить на набір, який містить 500К записів. Для цього у файлі (КАТАЛОГ ДОДАТКА)/src/main/resources/application.yml у секції
spring:
datasource:
#data: classpath:/contacts-500k.sql
data: classpath:/data.sql
закоментуйте малий набір data: classpath:/data.sql та розкоментуйте великій набір data: classpath:/contacts-500k.sql
Якщо ви зробили якісь зміни у файлі (КАТАЛОГ ДОДАТКА)/src/main/resources/application.yml виконайте команду у консолі в КАТАЛОЗІ ДОДАТКА
$ mvn clean package
Після того виконайте збірку Докер контейнера виконавши команду в консолі в КАТАЛОЗІ ДОДАТКА
$ docker build -t red-roses:0.0.9 .
Після збірки виконайте запуск докер контейнера виконавши команду в консолі
$ docker run --name red-roses -d -p 8080:8080 -t red-roses:0.0.9
Робота з додатком виконується через REST запити
Зробіть REST запит до додатку на кшталт:
GET localhost:8080/api/v1/hello/contacts?nameFilter=Sunt.*
де nameFilter обов'язковий параметр, який містить деякий regexp вираз.
Додаток відповість довгим списком відфільтрованих записів.
Натхнення...