Skip to content

woka00/library-api

Repository files navigation

Библиотека

Учебное веб-приложение для учета книг, пользователей, выдачи и возврата книг.

Стек

  • Go 1.23, net/http, graceful shutdown по SIGINT/SIGTERM
  • PostgreSQL, pgx/v5
  • pongo2, HTML 5, Bootstrap 5, JavaScript
  • Docker Compose, Make

Архитектура

Трёхслойная: transport -> service -> repository.

  • internal/transport/http — HTTP-маршруты, формы, AJAX, flash-сообщения, рендеринг HTML
  • internal/service — бизнес-логика и валидация
  • internal/repository — работа с PostgreSQL, транзакции

Серверная шаблонизация — pongo2 (Jinja/Django-подобный синтаксис для Go).

Скриншот

Главная страница

Быстрый запуск через Docker

docker compose up

После запуска приложение будет доступно по адресу:

http://localhost:8081

Удобные команды

make up       # запустить PostgreSQL и приложение
make restart  # перезапустить приложение
make stop     # остановить контейнеры без удаления
make down     # остановить и удалить контейнеры/сеть
make reset    # остановить и удалить контейнеры/volumes
make logs     # смотреть логи приложения
make ps       # статус контейнеров
make test     # go test ./... в Docker

Для временного подключения к PostgreSQL из pgAdmin можно открыть локальный проброс через socat:

make db-forward

Пока команда работает, в pgAdmin можно подключаться к localhost:5432. Если порт занят, укажи другой:

make db-forward DB_FORWARD_PORT=5433

Остановить проброс можно через Ctrl+C или командой:

make db-forward-stop

Чувствительные данные лежат в локальном .env, этот файл добавлен в .gitignore. Для нового окружения можно взять .env.example за основу и обязательно заполнить POSTGRES_PASSWORD.

Запуск без Docker

Нужны Go 1.23+ и PostgreSQL.

createdb library
export DATABASE_URL='postgres://library_app:your-strong-password@localhost:5432/library?sslmode=disable'
go run ./cmd/library

Основные маршруты

  • GET / - главная страница со статистикой.
  • GET /add_user, POST /add_user - пользователи.
  • POST /delete_user/{id} - удаление пользователя.
  • GET /add_book, POST /add_book - книги.
  • POST /delete_book/{id} - удаление книги.
  • GET /borrow_book, POST /borrow_book - выдача и возврат книг.
  • GET /get_borrowed_books?user_id={id} - AJAX-список книг на руках у пользователя.

About

Веб-сервис учёта книг на Go с трёхслойной архитектурой, PostgreSQL и Docker

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors