Skip to content

HELLPUSYY666/MidtermJava

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Library Management — Spring Boot Project

Что реализовано

3 Entity

Entity Таблица Описание
Author authors Автор книг
Book books Книга
BookDetail book_details Детали книги (страницы, язык, аннотация)

Связи

  • One-to-Many: AuthorBook (у одного автора много книг)
  • One-to-One: BookBookDetail (у каждой книги одна деталь)

CRUD

Полный CRUD (Create, Read, Update, Delete) для всех трёх сущностей через REST API.

Exceptions

  • ResourceNotFoundException — 404, ресурс не найден
  • DuplicateResourceException — 409, дубликат (ISBN / BookDetail)
  • GlobalExceptionHandler (@RestControllerAdvice) — обработка всех ошибок

2 вида Validation

  1. Стандартная Jakarta Bean Validation@NotBlank, @Size, @Min, @Max, @NotNull в DTO
  2. Кастомная валидация — аннотация @ValidIsbn с IsbnValidator (проверка формата ISBN-13)

Запуск

mvn spring-boot:run

Приложение запустится на http://localhost:8080. H2 консоль: http://localhost:8080/h2-console.


API Endpoints

Authors (/api/authors)

POST   /api/authors          — создать автора
GET    /api/authors          — все авторы
GET    /api/authors/{id}     — автор по id
PUT    /api/authors/{id}     — обновить автора
DELETE /api/authors/{id}     — удалить автора

Books (/api/books)

POST   /api/books            — создать книгу
GET    /api/books            — все книги
GET    /api/books/{id}       — книга по id
PUT    /api/books/{id}       — обновить книгу
DELETE /api/books/{id}       — удалить книгу

BookDetails (/api/book-details)

POST   /api/book-details             — создать деталь
GET    /api/book-details             — все детали
GET    /api/book-details/{id}        — деталь по id
GET    /api/book-details/by-book/{bookId} — деталь по bookId
PUT    /api/book-details/{id}        — обновить деталь
DELETE /api/book-details/{id}        — удалить деталь

Примеры запросов (curl)

Создать автора

curl -X POST http://localhost:8080/api/authors \
  -H "Content-Type: application/json" \
  -d '{"firstName":"Лев","lastName":"Толстой","country":"Russia"}'

Создать книгу (с кастомной ISBN валидацией)

curl -X POST http://localhost:8080/api/books \
  -H "Content-Type: application/json" \
  -d '{"title":"Война и мир","isbn":"978-5-17-090636-2","year":1869,"authorId":1}'

Создать деталь книги (One-to-One)

curl -X POST http://localhost:8080/api/book-details \
  -H "Content-Type: application/json" \
  -d '{"pageCount":1225,"language":"Russian","summary":"Эпический роман","bookId":1}'

Пример ошибки валидации

curl -X POST http://localhost:8080/api/books \
  -H "Content-Type: application/json" \
  -d '{"title":"","isbn":"bad-isbn","year":1200,"authorId":1}'

Ответ 400:

{
  "status": 400,
  "message": "Validation failed",
  "errors": {
    "title": "Title is required",
    "isbn": "ISBN must be in format XXX-X-XX-XXXXXX-X (13 digits with hyphens)",
    "year": "Year must be after 1450"
  }
}

Структура проекта

src/main/java/com/example/library/
├── LibraryApplication.java
├── entity/          — Author, Book, BookDetail
├── dto/             — AuthorDto, BookDto, BookDetailDto
├── repository/      — JPA репозитории
├── service/         — бизнес-логика + маппинг
├── controller/      — REST контроллеры
├── exception/       — ResourceNotFoundException, DuplicateResourceException, GlobalExceptionHandler
└── validation/      — @ValidIsbn + IsbnValidator (кастомная валидация)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages