Skip to content

Repository files navigation

BookList — RESTful API для управления книгами

RESTful API на Go с фреймворком Gin, хранилищем PostgreSQL и полной контейнеризацией. Проект создан в учебных целях для отработки навыков разработки бэкенда, работы с базами данных и Docker.

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

Язык: Go 1.23+

Веб‑фреймворк: Gin

БД: PostgreSQL 15

Документация: swaggo (Swagger UI)

Контейнеризация: Docker, Docker Compose

Тестирование: встроенный testing + интеграционные тесты

Логирование: stdout (для Docker) + логирование в контейнер

Установка и запуск

Запуск через Docker (рекомендуемый способ)

  1. Клонировать репозиторий

git clone https://github.com/Gulner-GI/BookList.git

cd BookList

  1. Запустите приложение

docker-compose up -d --build

  1. Проверьте логи:

docker logs booklist-app

  1. Откройте Swagger-документацию:

./run start

  1. Остановка:

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

Лицензия

Проект создан в образовательных целях. Свободно используйте для изучения.

About

Mastering backend development with Go. My first project for learning REST APIs, SQLite3, Gin and other things

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages