RESTful API на Go с фреймворком Gin, хранилищем PostgreSQL и полной контейнеризацией. Проект создан в учебных целях для отработки навыков разработки бэкенда, работы с базами данных и Docker.
Стек технологий:
Язык: Go 1.23+
Веб‑фреймворк: Gin
БД: PostgreSQL 15
Документация: swaggo (Swagger UI)
Контейнеризация: Docker, Docker Compose
Тестирование: встроенный testing + интеграционные тесты
Логирование: stdout (для Docker) + логирование в контейнер
Установка и запуск
Запуск через Docker (рекомендуемый способ)
- Клонировать репозиторий
git clone https://github.com/Gulner-GI/BookList.git
cd BookList
- Запустите приложение
docker-compose up -d --build
- Проверьте логи:
docker logs booklist-app
- Откройте Swagger-документацию:
- Остановка:
docker-compose down
Структура проекта:
BookList/
config/config.go # конфигурация через ENV
db/db.go # инициализация и миграции базы
docs/docs.go # сгенерированная Swagger‑документация
/swagger.yaml
/swagger.json
handlers/handlers.go # HTTP‑хендлеры и тесты
/helpers.go
/helpers_test.go
/handlers_integration_test.go
loggers/logger.go # настройка логирования
models/models.go # структуры Book, Update, ErrorResponse
routes/router.go # роутинг Gin
run # обёртка для запуска скриптов
scripts/start.sh # CLI‑скрипты
/help.sh
/get.sh
/create.sh
/update.sh
/delete.sh
/end.sh
entrypoint.sh # Точка входа для Docker-контейнера
Dockerfile # Сборка образа приложения
docker-compose.yml # Оркестрация сервисов
main.go # Точка входа в приложение
go.sum
go.mod
README.md
Функционал
Реализован полный CRUD функционал для получения списка книг, добавления книг в список, изменения данных о книгах, удаления книг из списка. Для прямой работы через HTTP можно использовать curl (см. документацию Swagger UI) Реализован CLI-интерфейс на bash:
./run start # запускает сервер
./run help # выдаёт список возможных команд
./run get [<id>] # выдаёт список из всех книг, либо книгу с указанным id
./run create <title> <year> <genre> <status> [link] # создаёт новую книгу
./run update --id <id> [-title <title>] [-year <year>] [-genre <genre>] [-status <true|false>] [-link <url>] # частично изменяет данные
./run delete <id> # удаляет книгу по указанному id
./run end # завершает работу сервера
Доступна swagger-документация по адресу http://localhost:8080/swagger/index.html
Реализовано логирование
Реализованы unit-тесты для вспомогательных функций (helpers_test.go), и интеграционные тесты полного CRUD цикла (handlers_integration_test.go)
Конфигурация
По умолчанию: порт 8080, режим работы GIN_MODE=debug
Лицензия
Проект создан в образовательных целях. Свободно используйте для изучения.