Опишите один из ваших пет-проектов на Java.

Ответ

Пет-проект: REST API для управления личной библиотекой книг.

Цель: Практика разработки полноценного backend-приложения с использованием современных стеков.

Стек технологий:

  • Backend: Spring Boot
  • База данных: PostgreSQL
  • ORM: Spring Data JPA (Hibernate)
  • Документация API: Swagger/OpenAPI
  • Контейнеризация: Docker, Docker Compose

Ключевая функциональность:

  1. CRUD-операции для сущностей Book и Author.
  2. Поиск книг по названию, автору, жанру.
  3. Пагинация и сортировка результатов.
  4. Базовая аутентификация и авторизация (JWT).
  5. Интеграционные тесты с Testcontainers.

Пример endpoint'а (получение книги по ID):

@RestController
@RequestMapping("/api/books")
public class BookController {
    @GetMapping("/{id}")
    public ResponseEntity<BookDto> getBook(@PathVariable Long id) {
        BookDto book = bookService.findById(id);
        return ResponseEntity.ok(book);
    }
}

Итог: Проект позволил углубить понимание Spring Boot, работы с БД, написания чистого, тестируемого кода и настройки CI/CD пайплайна (GitHub Actions).

Ответ 18+ 🔞

Ну что за день сегодня, блядь! Сижу, кофе остывший допиваю, и тут мне в голову приходит — а не сделать ли мне свою собственную библиотеку? Нет, не полку с книгами, а вот эту всю цифровую хуйню, REST API. Чтобы как в нормальном книжном, только в коде.

Пет-проект: REST API для моей личной библиотеки (чтобы хоть как-то книги учитывать, а то они как тараканы по углам плодятся).

Суть затеи: Потрогать современные технологии так, чтобы не просто туториал повторить, а чтобы всё, блядь, как у взрослых — с авторизацией, документацией и прочей мишурой, от которой у начинающего разработчика волосы дыбом встают.

Чем буду орудовать, как слесарь ключами:

  • Основа: Spring Boot — куда ж без него, мать его.
  • Хранилище: PostgreSQL — надёжная, как швейцарские часы, только без лишних наворотов.
  • Разговор с БД: Spring Data JPA (это тот самый Hibernate под капотом) — чтобы не писать эти ебуччие SQL-запросы на каждый чих.
  • Инструкция для посторонних: Swagger/OpenAPI — чтобы не пришлось каждому, кто пришёл, в рот заглядывать и объяснять, какой endpoint за что отвечает.
  • Упаковка: Docker, Docker Compose — чтобы это безобразие можно было поднять одной командой, хоть у меня на ноуте, хоть на сервере у тёщи.

Что эта штука должна уметь, кроме как просто существовать:

  1. Базовый CRUD для книг и авторов. Добавить, посмотреть, изменить, удалить — святое дело.
  2. Поиск книг. Не просто все подряд вывалить, а найти по названию, автору или жанру. А то как в бардаке искать, ёпта.
  3. Пагинация и сортировка. Чтобы когда книг станет овердохуища, список не вываливался одним куском на десять тысяч строк, а можно было листать, как боги.
  4. Базовая защита. JWT-токены, чтобы не любой левый чувак мог мои книги удалять. Это ж святое, блядь.
  5. Тесты на интеграцию с Testcontainers. Чтобы быть уверенным, что всё работает не только у меня в голове, а и с реальной базой данных.

Вот, смотри, кусочек кода, как получить одну книжку по её ID. Просто, как три копейки:

@RestController
@RequestMapping("/api/books")
public class BookController {
    @GetMapping("/{id}")
    public ResponseEntity<BookDto> getBook(@PathVariable Long id) {
        BookDto book = bookService.findById(id);
        return ResponseEntity.ok(book);
    }
}

Что в итоге? А в итоге, блядь, проект получился не просто для галочки в портфолио. Я реально вник, как Spring Boot изнутри устроен, как с базой нормально работать, как код писать, который не стыдно и тестами покрыть. Да ещё и настроил этот ваш CI/CD на GitHub Actions, чтобы при каждом пуше всё само собиралось и проверялось. В общем, теперь я не просто теоретик, а почти боевой единорог, готовый к подвигам на продакшене. Почти.