Вихідний файл для імпорту даних основної сутності Person розташований за посиланням
https://github.com/streamlined2/REST-application/blob/main/src/main/resources/data/data0.json
Файл створений за допомогою метода main класа генератора випадкових даних com.streamlined.restapp.generator.PersonDataGenerator із параметрами кількість файлів 1, кількість сутностей 1000.
Скріпти Liquibase для створення таблиць, індексів сутностей Person, Country і заповнення таблиці допоміжної сутності Country розташовані в теці src/main/resources/db
Для збереження і роботи із даними використовується імідж PostgreSQL 16.2
https://hub.docker.com/r/bitnami/postgresql
Сервіс запускається за допомогою Docker Compose, файл налаштування compose.yaml розташований в корні проєкту.
Дані контейнера відображаються в локальну теку D:\postgresql.
Запит для отримання першої сторінки розміром 10 сутностей зі значеннями статі FEMALE, кольору очей RED та волосся YELLOW
{ "sex":"FEMALE", "eyeColor":"RED", "hairColor":"YELLOW", "page":0, "size":10 }
Для пошуку людини Person по допоміжній сутності країни Country можна зазначити одну із властивостей id, name, або capital
Наприклад, для пошуку людини за іменем країни походження та за іменем столиці країни громадянства слід вказати запит
{ "countryOfOrigin":{ "name": "USA" }, "citizenship":{ "capital": "Washington" }, "page":0, "size":10 }
Для пошуку за первинним ключем id країни походження можна вказати запит
{ "countryOfOrigin":{ "id":1 }, "page":0, "size":10 }
Оскільки основна сутність Person містить дві властивості допоміжної сутності Country, а саме countryOfOrigin та citizenship, посилання на первинний ключ допоміжної сутності countryId є двозначним і неможливим.
Запити для ендпойнта /api/person/_report ідентичні, але без використання параметрів page, size
Валідація даних виконується компонентом Validator на рівні сервісу перевіркою сутностей, а не DTO на рівні контролера, що спрощує супровід проєкту.