Стек технологий: Java8, Postgres, Liquibase, Hibernate, Spring Data, SpringBoot
Чтобы запустить приложение необходимо иметь установленную СУБД PostgreSQL и в файле application.properties изменить дефолтные креды к бд на свои. По умолчанию используется стандартный суперюзер postges, для которого необходимо создать бд library (CREATE DATABASE library WITH OWNER = postgres). После старта приложение работает, как обычный REST-сервис
Задача: Реализовать систему ввода и отображения информации об авторах книг посредством RESTfull API, включающую следующие сущности и их атрибуты:
- Автор (Имя, Фамилия, Отчество, Дата рождения, Книги)
- Книга (ISBN, Жанр)
- Жанр (Название)
Требования:
- Каждая таблица должна иметь первичный ключ типа Long, поля: дата создания, дата изменения. Общие поля из сущности должны быть вынесены в абстрактный класс. Технические поля должны быть запрещены для инициализации вручную или пользователем.
- CRUD операции + фильтры на чтение (getAllPaged, getByFilters, getById)
- Мягкое удаление сущностей по ид
- Система должна иметь защиту на уровне БД от удаления авторов с книгами.
- Создание БД через систему контроля миграций Liquibase или Flyway
-
AuthorController
GET /authors
GET /authors/{id}
GET /authors with different parameters (lastname, firstname, middlename, dateOfBirth). For example GET /authors?lastname=Толстой&firstname=Алексей
POST /authors with Request body as JSON: { "lastname": "Пушкин", "firstname": "Александр", "middlename": "Сергеевич", "dateOfBirth": "1799-06-06" }
DELETE /authors/{id}
PATCH /authors/{id} with Request body as JSON: { "firstname": "Александр", "dateOfBirth": "1799-06-06" } -
BookController
GET /books
GET /books/{id}
GET /books with different parameters (isbn, genre). For example GET /books?genre=Роман
POST /books with Request body as JSON: { "isbn": "9780747532743", "genreId": 2 }
DELETE /books/{id}
PATCH /books/{id} with Request body as JSON: { "isbn": "9780439064873", "genre": 2 }
PUT /books/{idAuthor} with parameter (author_id). For example GET /books/7?author_id=4
PUT /books/ with parameter (author_id) and Request body as JSON: { "isbn": "9780132350884", "genreId": 2 } -
GenreController
GET /genres
GET /genres/{id}
GET /genres with parameter (name). For example GET /genres?name=Детектив
POST /genres with Request body as JSON: { "name": "Пьеса" }
DELETE /genres/{id}
PATCH /genres/{id} with Request body as JSON: { "name": "Повесть" }