wishli-api/README.md
2025-03-23 20:05:51 +03:00

169 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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` для получения дополнительной информации.