Skip to content

Another assessment task. Working with strings using regexp

License

Notifications You must be signed in to change notification settings

pashkazp/red-roses

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Мільйон червоних троянд Build Status

Опис

Вебдодаток, який демонструє деяку активність, якщо до нього звернутись. Опис активності яку повинен демонструвати додадок приховано згідно умов надання тестового завдання. Також приховано того, хто надавав завдання.

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 базі даних.

H2 SQL консоль

Якщо ви хочете увімкнуть доступ до вебконсолі бази даних, вам потрібно змінити налаштування в файлі (КАТАЛОГ ДОДАТКА)/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

)

PostgreSQL база даних

Якщо ви бажаєте виконувати веб додаток на базі PostreSQL, вам необхідно змінити деякі налаштування у файлі (КАТАЛОГ ДОДАТКА)/src/main/resources/application.yml Знайдіть у цьому файлі секцію нвлвштувань H2

# H2 settings section    
# -------------------
  деякі налаштування
  деякі налаштування
# -------------------

Закоментуйте "деякі налаштування" в цьому файлі

Знайдіть у цьому файлі секцію нвлвштувань PostgreSQL

# PostgreSQL settings section    
# ---------------------------
#  деякі налаштування
#  деякі налаштування
# ----------------------------    

Розкоментуйте "деякі налаштування" в цьому файлі

Встановіть ваші значення налаштувань для змінних

    url:
    password:
    platform:
    username:

УВАГА ВНИМАНИЕ ATTENTION

Веб додаток в своїй роботі використовує таблицю з ім'ям contacts Якщо в вашій базі даних є таблиця з таким ім'ям, то майте на увазі, що всі дані в ній будуть спотворені

УВАГА ВНИМАНИЕ ATTENTION

Міграція даних

За замовченням додаток вікористовує набір тестових даних в розмірі 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 вираз.

Додаток відповість довгим списком відфільтрованих записів.

Натхнення...

About

Another assessment task. Working with strings using regexp

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published