Go to file
2025-03-23 20:05:51 +03:00
api Init commit 2025-03-23 20:05:51 +03:00
cmd Init commit 2025-03-23 20:05:51 +03:00
coverage Init commit 2025-03-23 20:05:51 +03:00
docs Init commit 2025-03-23 20:05:51 +03:00
pkg Init commit 2025-03-23 20:05:51 +03:00
scripts Init commit 2025-03-23 20:05:51 +03:00
tests Init commit 2025-03-23 20:05:51 +03:00
.dockerignore Init commit 2025-03-23 20:05:51 +03:00
.env.example Init commit 2025-03-23 20:05:51 +03:00
.gitignore Init commit 2025-03-23 20:05:51 +03:00
docker-compose.yaml Init commit 2025-03-23 20:05:51 +03:00
Dockerfile Init commit 2025-03-23 20:05:51 +03:00
go.mod Init commit 2025-03-23 20:05:51 +03:00
go.sum Init commit 2025-03-23 20:05:51 +03:00
README.md Init commit 2025-03-23 20:05:51 +03:00
run-docker-tests.sh Init commit 2025-03-23 20:05:51 +03:00

Wish List API

Go MongoDB Swagger Docker

API-сервер для приложения списка желаний с использованием принципов чистой архитектуры.

Описание

Wish List API - это RESTful API-сервис, который позволяет пользователям создавать, управлять и делиться своими списками желаемых подарков. Приложение разработано с использованием чистой архитектуры для обеспечения масштабируемости, тестируемости и поддержки в долгосрочной перспективе.

Основные возможности

  • Регистрация и аутентификация пользователей
  • Авторизация через Telegram
  • Создание, просмотр, редактирование и удаление списков желаний
  • Добавление, просмотр, редактирование и удаление элементов в списке желаний
  • Настройка приватности списков желаний (публичный/приватный доступ)
  • Подробная документация API через Swagger

Технологический стек

  • Go - язык программирования
  • Fiber - веб-фреймворк
  • MongoDB - база данных
  • JWT - токены для аутентификации
  • Swagger - документация API
  • Docker - контейнеризация приложения

Архитектура проекта

Проект следует принципам чистой архитектуры, разделяя код на следующие слои:

  • api/ - HTTP обработчики, маршрутизация и представления
    • handlers/ - HTTP обработчики запросов
    • middleware/ - промежуточные обработчики
    • presenter/ - форматирование ответов
    • routes/ - маршрутизация API
  • cmd/ - точка входа в приложение
  • docs/ - автоматически сгенерированная Swagger документация
  • pkg/ - основная бизнес-логика и сущности
    • auth/ - аутентификация и авторизация
    • entities/ - основные сущности (модели данных)
    • user/ - сервисы для работы с пользователями
    • wish-list/ - сервисы для работы со списками желаний
  • tests/ - тесты
    • unit/ - модульные тесты
    • integration/ - интеграционные тесты

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

Требования

  • Go 1.18 или выше
  • Docker и Docker Compose
  • MongoDB (при локальном запуске без Docker)

Переменные окружения

Создайте файл .env на основе .env.example:

TELEGRAM_BOT_TOKEN=123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ
TELEGRAM_APP_URL=https://wish-list-bot.telegram.bot

MONGO_USER=mongo_user
MONGO_PASSWORD=mongo_password
MONGO_DATABASE=books

Запуск с использованием Docker

  1. Клонируйте репозиторий:

    git clone https://github.com/yourusername/wish-list-api.git
    cd wish-list-api
    
  2. Запустите приложение с помощью Docker Compose:

    docker-compose up -d
    
  3. API будет доступен по адресу http://localhost:8080

  4. Документация Swagger доступна по адресу http://localhost:8080/docs/index.html

Локальный запуск для разработки

  1. Клонируйте репозиторий:

    git clone https://github.com/yourusername/wish-list-api.git
    cd wish-list-api
    
  2. Установите зависимости:

    go mod download
    
  3. Запустите приложение:

    go run cmd/main.go
    

API Endpoints

Основные эндпоинты API:

Аутентификация

  • POST /api/auth/register - Регистрация нового пользователя
  • POST /api/auth/login - Авторизация пользователя
  • GET /api/auth/telegram-login - Авторизация через Telegram

Пользователи

  • GET /api/users/:id - Получение информации о пользователе
  • PUT /api/users/:id - Обновление информации пользователя

Списки желаний

  • POST /api/wishlist - Создание нового списка желаний
  • GET /api/wishlist/:id - Получение списка желаний по ID
  • GET /api/wishlist/user/:userId - Получение всех списков желаний пользователя
  • PUT /api/wishlist/:id - Обновление списка желаний
  • DELETE /api/wishlist/:id - Удаление списка желаний

Элементы списка желаний

  • POST /api/wishlist/item - Добавление элемента в список желаний
  • GET /api/wishlist/:wishlistId/items - Получение всех элементов списка желаний
  • GET /api/wishlist/item/:id - Получение элемента списка по ID
  • PUT /api/wishlist/item/:id - Обновление элемента списка
  • DELETE /api/wishlist/item/:id - Удаление элемента из списка

Тестирование

Запуск модульных тестов

go test ./tests/unit/...

Запуск интеграционных тестов

go test ./tests/integration/...

Запуск всех тестов с покрытием

./run-docker-tests.sh

Contributing

  1. Форкните репозиторий
  2. Создайте новую ветку для вашей функциональности (git checkout -b feature/amazing-feature)
  3. Зафиксируйте изменения (git commit -m 'Add some amazing feature')
  4. Отправьте изменения в ветку (git push origin feature/amazing-feature)
  5. Создайте Pull Request

Лицензия

Распространяется под лицензией MIT. Смотрите LICENSE для получения дополнительной информации.