# Wish List API ![Go](https://img.shields.io/badge/go-%2300ADD8.svg?style=for-the-badge&logo=go&logoColor=white) ![MongoDB](https://img.shields.io/badge/MongoDB-%234ea94b.svg?style=for-the-badge&logo=mongodb&logoColor=white) ![Swagger](https://img.shields.io/badge/-Swagger-%23Clojure?style=for-the-badge&logo=swagger&logoColor=white) ![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge&logo=docker&logoColor=white) 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](https://golang.org/dl/) 1.18 или выше - [Docker](https://www.docker.com/get-started) и Docker Compose - [MongoDB](https://www.mongodb.com/try/download/community) (при локальном запуске без Docker) ### Переменные окружения Создайте файл `.env` на основе `.env.example`: ```env 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. Клонируйте репозиторий: ```bash git clone https://github.com/yourusername/wish-list-api.git cd wish-list-api ``` 2. Запустите приложение с помощью Docker Compose: ```bash docker-compose up -d ``` 3. API будет доступен по адресу `http://localhost:8080` 4. Документация Swagger доступна по адресу `http://localhost:8080/docs/index.html` ### Локальный запуск для разработки 1. Клонируйте репозиторий: ```bash git clone https://github.com/yourusername/wish-list-api.git cd wish-list-api ``` 2. Установите зависимости: ```bash go mod download ``` 3. Запустите приложение: ```bash 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** - Удаление элемента из списка ## Тестирование ### Запуск модульных тестов ```bash go test ./tests/unit/... ``` ### Запуск интеграционных тестов ```bash go test ./tests/integration/... ``` ### Запуск всех тестов с покрытием ```bash ./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` для получения дополнительной информации.