169 lines
7.2 KiB
Markdown
169 lines
7.2 KiB
Markdown
# Wish List API
|
||
|
||

|
||

|
||

|
||

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