Skip to content

Repository files navigation

EventBooker

EventBooker — это веб-сервис для бронирования мест на мероприятия. Система поддерживает создание событий, регистрацию пользователей, бронирование с автоматической отменой неоплаченных броней через заданный интервал времени, а также административный интерфейс для управления. Все операции с базой данных выполняются с использованием транзакций для обеспечения безопасности и избежания гонок данных.​

Функциональность

Система реализует полный цикл работы с бронированиями:

  • Регистрация и аутентификация пользователей через JWT.
  • Создание и просмотр событий (для обычных пользователей и администраторов).
  • Бронирование мест на события с автоматической отменой неоплаченных броней через фоновый процесс (горутину, которая периодически проверяет сроки и удаляет просроченные записи, отправляя уведомления в Telegram-бота).
  • Подтверждение (оплата) и отмена броней.
  • Административная панель для создания событий и просмотра списка пользователей.
  • Просмотр списка личных броней пользователя.

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

  • Язык: Go (1.21+).
  • Веб-фреймворк: Gin для роутинга и обработки HTTP-запросов.
  • База данных: PostgreSQL с тремя таблицами: users (пользователи), events (мероприятия), booking (брони, с foreign keys на events и users).
  • Миграции: утилита migrate для миграций базы данных.
  • Аутентификация: JWT-токены.
  • Контейнеризация: Docker для сервиса и Nginx (как reverse proxy), Docker Compose для оркестрации (базу данных нужно поднимать отдельно).
  • Дополнительно: Telegram Bot API для уведомлений об отмене, CORS-middleware для фронтенда, mockery для генерации моков сервисов и тестирования handlers.

Архитектура следует паттерну слоев: handlers (API-эндпоинты) → services (бизнес-логика) → repositories (работа с БД).

API Endpoints

API построено на Gin с группами роутов. Базовый URL: http://localhost:8080. Все защищенные эндпоинты требуют JWT в заголовке Authorization: Bearer "token".

Публичные роуты

  • GET / — Главная страница (HTML).
  • GET /admin_panel — Страница логина админа (HTML).
  • GET /admin — Админ-панель (HTML, требует аутентификации).
  • POST /auth/register — Регистрация пользователя (JSON: email, password).
  • POST /auth/login — Логин (JSON: email, password; возвращает JWT).
  • GET /events — Список событий (пагинация).
  • GET /events/:id — Детали события.

Защищенные роуты (/api, с AuthMiddleware)

  • POST /api/events/:event_id/book — Бронирование места.
  • POST /api/events/:event_id/confirm/:book_id — Подтверждение брони (оплата).
  • POST /api/events/:event_id/cancel/:book_id — Отмена брони.
  • GET /api/books — Список броней пользователя.

Админ-роуты (/api/admin, с AdminMiddleware)

  • GET /api/admin/check — Проверка доступа админа.
  • POST /api/admin/events — Создание события.
  • GET /api/admin/users — Список пользователей.

Запуск

  1. Установите утилиту migrate
  2. Клонируйте репозиторий: git clone "repo-url" && cd EventBooker
  3. Скопируйте .env.example в .env и заполните
  4. Установите зависимости: go mod tidy
  5. Примените миграции с помощью Makefile

Запуск локально

  • Запустите PostgreSQL (отдельно, например, docker run --name db -e POSTGRES_PASSWORD=pass -p 5432:5432 -d postgres:15).
  • Запустите сервис: go run cmd/EventBooker/main.go.
  • Сервер доступен на http://localhost:8080. Nginx не обязателен локально.

Запуск в Docker

  • Убедитесь, что БД запущена отдельно.
  • Соберите и запустите: docker-compose up --build

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages