mirror of
https://gitlab.com/foxixus/neomovies-api.git
synced 2025-10-28 01:48:51 +05:00
Rewrite api to Go
This commit is contained in:
301
README.md
301
README.md
@@ -1,93 +1,290 @@
|
||||
# Neo Movies API
|
||||
# Neo Movies API (Go Version) 🎬
|
||||
|
||||
REST API для поиска и получения информации о фильмах, использующий TMDB API.
|
||||
> Современный API для поиска фильмов и сериалов, портированный с Node.js на Go
|
||||
|
||||
## Особенности
|
||||
## 🚀 Особенности
|
||||
|
||||
- Поиск фильмов
|
||||
- Информация о фильмах
|
||||
- Популярные фильмы
|
||||
- Топ рейтинговые фильмы
|
||||
- Предстоящие фильмы
|
||||
- Swagger документация
|
||||
- Поддержка русского языка
|
||||
- ⚡ **Высокая производительность** - написан на Go
|
||||
- 🔒 **JWT аутентификация** с email верификацией
|
||||
- 🎭 **TMDB API интеграция** для данных о фильмах/сериалах
|
||||
- 📧 **Email уведомления** через Gmail SMTP
|
||||
- 🔍 **Полнотекстовый поиск** фильмов и сериалов
|
||||
- ⭐ **Система избранного** для пользователей
|
||||
- 🎨 **Современная документация** с Scalar API Reference
|
||||
- 🌐 **CORS поддержка** для фронтенд интеграции
|
||||
- ☁️ **Готов к деплою на Vercel**
|
||||
|
||||
## Установка
|
||||
## 📚 Основные функции
|
||||
|
||||
1. Клонируйте репозиторий:
|
||||
### 🔐 Аутентификация
|
||||
- **Регистрация** с email верификацией (6-значный код)
|
||||
- **Авторизация** JWT токенами
|
||||
- **Управление профилем** пользователя
|
||||
- **Email подтверждение** обязательно для входа
|
||||
|
||||
### 🎬 TMDB интеграция
|
||||
- Поиск фильмов и сериалов
|
||||
- Популярные, топ-рейтинговые, предстоящие
|
||||
- Детальная информация с трейлерами и актерами
|
||||
- Рекомендации и похожие фильмы
|
||||
- Мультипоиск по всем типам контента
|
||||
|
||||
### ⭐ Пользовательские функции
|
||||
- Добавление фильмов в избранное
|
||||
- Персональные списки
|
||||
- История просмотров
|
||||
|
||||
### 🎭 Плееры
|
||||
- **Alloha Player** интеграция
|
||||
- **Lumex Player** интеграция
|
||||
|
||||
### 📦 Дополнительно
|
||||
- **Торренты** - поиск по IMDB ID с фильтрацией
|
||||
- **Реакции** - лайки/дизлайки с внешним API
|
||||
- **Изображения** - прокси для TMDB с кэшированием
|
||||
- **Категории** - жанры и фильмы по категориям
|
||||
|
||||
## 🛠 Быстрый старт
|
||||
|
||||
### Локальная разработка
|
||||
|
||||
1. **Клонирование репозитория**
|
||||
```bash
|
||||
git clone https://gitlab.com/foxixus/neomovies-api.git
|
||||
git clone <your-repo>
|
||||
cd neomovies-api
|
||||
```
|
||||
|
||||
2. Установите зависимости:
|
||||
2. **Создание .env файла**
|
||||
```bash
|
||||
npm install
|
||||
cp .env.example .env
|
||||
# Заполните необходимые переменные
|
||||
```
|
||||
|
||||
3. Создайте файл `.env`:
|
||||
3. **Установка зависимостей**
|
||||
```bash
|
||||
touch .env
|
||||
go mod download
|
||||
```
|
||||
|
||||
4. Добавьте ваш TMDB Access Token в `.env` файл:
|
||||
4. **Запуск**
|
||||
```bash
|
||||
go run main.go
|
||||
```
|
||||
|
||||
TMDB_ACCESS_TOKEN=your_tmdb_access_token
|
||||
MONGODB_URI=your_mongodb_uri
|
||||
JWT_SECRET=your_jwt_secret
|
||||
API будет доступен на `http://localhost:3000`
|
||||
|
||||
### Деплой на Vercel
|
||||
|
||||
1. **Подключите репозиторий к Vercel**
|
||||
2. **Настройте переменные окружения** (см. список ниже)
|
||||
3. **Деплой произойдет автоматически**
|
||||
|
||||
## ⚙️ Переменные окружения
|
||||
|
||||
```bash
|
||||
# Обязательные
|
||||
MONGO_URI=mongodb+srv://username:password@cluster.mongodb.net/neomovies
|
||||
TMDB_ACCESS_TOKEN=your_tmdb_access_token_here
|
||||
JWT_SECRET=your_super_secret_jwt_key_here
|
||||
|
||||
# Для email уведомлений (Gmail)
|
||||
GMAIL_USER=your_gmail@gmail.com
|
||||
GMAIL_APP_PASSWORD=your_app_specific_password
|
||||
|
||||
# Для плееров
|
||||
LUMEX_URL=your_lumex_player_url
|
||||
ALLOHA_TOKEN=your_token
|
||||
ALLOHA_TOKEN=your_alloha_token
|
||||
|
||||
# Автоматические (Vercel)
|
||||
PORT=3000
|
||||
BASE_URL=https://api.neomovies.ru
|
||||
NODE_ENV=production
|
||||
```
|
||||
|
||||
## Запуск
|
||||
## 📋 API Endpoints
|
||||
|
||||
### 🔓 Публичные маршруты
|
||||
|
||||
```http
|
||||
# Система
|
||||
GET /api/v1/health # Проверка состояния
|
||||
|
||||
# Аутентификация
|
||||
POST /api/v1/auth/register # Регистрация (отправка кода)
|
||||
POST /api/v1/auth/verify # Подтверждение email кодом
|
||||
POST /api/v1/auth/resend-code # Повторная отправка кода
|
||||
POST /api/v1/auth/login # Авторизация
|
||||
|
||||
# Поиск и категории
|
||||
GET /search/multi # Мультипоиск
|
||||
GET /api/v1/categories # Список категорий
|
||||
GET /api/v1/categories/{id}/movies # Фильмы по категории
|
||||
|
||||
# Фильмы
|
||||
GET /api/v1/movies/search # Поиск фильмов
|
||||
GET /api/v1/movies/popular # Популярные
|
||||
GET /api/v1/movies/top-rated # Топ-рейтинговые
|
||||
GET /api/v1/movies/upcoming # Предстоящие
|
||||
GET /api/v1/movies/now-playing # В прокате
|
||||
GET /api/v1/movies/{id} # Детали фильма
|
||||
GET /api/v1/movies/{id}/recommendations # Рекомендации
|
||||
GET /api/v1/movies/{id}/similar # Похожие
|
||||
|
||||
# Сериалы
|
||||
GET /api/v1/tv/search # Поиск сериалов
|
||||
GET /api/v1/tv/popular # Популярные
|
||||
GET /api/v1/tv/top-rated # Топ-рейтинговые
|
||||
GET /api/v1/tv/on-the-air # В эфире
|
||||
GET /api/v1/tv/airing-today # Сегодня в эфире
|
||||
GET /api/v1/tv/{id} # Детали сериала
|
||||
GET /api/v1/tv/{id}/recommendations # Рекомендации
|
||||
GET /api/v1/tv/{id}/similar # Похожие
|
||||
|
||||
# Плееры
|
||||
GET /api/v1/players/alloha # Alloha плеер
|
||||
GET /api/v1/players/lumex # Lumex плеер
|
||||
|
||||
# Торренты
|
||||
GET /api/v1/torrents/search/{imdbId} # Поиск торрентов
|
||||
|
||||
# Реакции (публичные)
|
||||
GET /api/v1/reactions/{type}/{id}/counts # Счетчики реакций
|
||||
|
||||
# Изображения
|
||||
GET /api/v1/images/{size}/{path} # Прокси TMDB изображений
|
||||
```
|
||||
|
||||
### 🔒 Приватные маршруты (требуют JWT)
|
||||
|
||||
```http
|
||||
# Профиль
|
||||
GET /api/v1/auth/profile # Профиль пользователя
|
||||
PUT /api/v1/auth/profile # Обновление профиля
|
||||
|
||||
# Избранное
|
||||
GET /api/v1/favorites # Список избранного
|
||||
POST /api/v1/favorites/{id} # Добавить в избранное
|
||||
DELETE /api/v1/favorites/{id} # Удалить из избранного
|
||||
|
||||
# Реакции (приватные)
|
||||
GET /api/v1/reactions/{type}/{id}/my-reaction # Моя реакция
|
||||
POST /api/v1/reactions/{type}/{id} # Установить реакцию
|
||||
DELETE /api/v1/reactions/{type}/{id} # Удалить реакцию
|
||||
GET /api/v1/reactions/my # Все мои реакции
|
||||
```
|
||||
|
||||
## 📖 Примеры использования
|
||||
|
||||
### Регистрация и верификация
|
||||
|
||||
Для разработки:
|
||||
```bash
|
||||
npm run dev
|
||||
# 1. Регистрация
|
||||
curl -X POST https://api.neomovies.ru/api/v1/auth/register \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"email": "user@example.com",
|
||||
"password": "password123",
|
||||
"name": "John Doe"
|
||||
}'
|
||||
|
||||
# Ответ: {"success": true, "message": "Registered. Check email for verification code."}
|
||||
|
||||
# 2. Подтверждение email (код из письма)
|
||||
curl -X POST https://api.neomovies.ru/api/v1/auth/verify \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"email": "user@example.com",
|
||||
"code": "123456"
|
||||
}'
|
||||
|
||||
# 3. Авторизация
|
||||
curl -X POST https://api.neomovies.ru/api/v1/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"email": "user@example.com",
|
||||
"password": "password123"
|
||||
}'
|
||||
```
|
||||
|
||||
Для продакшена:
|
||||
### Поиск фильмов
|
||||
|
||||
```bash
|
||||
npm start
|
||||
# Поиск фильмов
|
||||
curl "https://api.neomovies.ru/api/v1/movies/search?query=marvel&page=1"
|
||||
|
||||
# Детали фильма
|
||||
curl "https://api.neomovies.ru/api/v1/movies/550"
|
||||
|
||||
# Добавить в избранное (с JWT токеном)
|
||||
curl -X POST https://api.neomovies.ru/api/v1/favorites/550 \
|
||||
-H "Authorization: Bearer YOUR_JWT_TOKEN"
|
||||
```
|
||||
|
||||
## Развертывание на Vercel
|
||||
### Поиск торрентов
|
||||
|
||||
1. Установите Vercel CLI:
|
||||
```bash
|
||||
npm i -g vercel
|
||||
# Поиск торрентов для фильма "Побег из Шоушенка"
|
||||
curl "https://api.neomovies.ru/api/v1/torrents/search/tt0111161?type=movie&quality=1080p"
|
||||
```
|
||||
|
||||
2. Войдите в ваш аккаунт Vercel:
|
||||
```bash
|
||||
vercel login
|
||||
## 🎨 Документация API
|
||||
|
||||
Интерактивная документация доступна по адресу:
|
||||
|
||||
**🔗 https://api.neomovies.ru/**
|
||||
|
||||
## ☁️ Деплой на Vercel
|
||||
|
||||
1. **Подключите репозиторий к Vercel**
|
||||
2. **Настройте Environment Variables в Vercel Dashboard:**
|
||||
3. **Деплой автоматически запустится!**
|
||||
|
||||
## 🏗 Архитектура
|
||||
|
||||
```
|
||||
├── main.go # Точка входа приложения
|
||||
├── api/
|
||||
│ └── index.go # Vercel serverless handler
|
||||
├── pkg/ # Публичные пакеты (совместимо с Vercel)
|
||||
│ ├── config/ # Конфигурация с поддержкой альтернативных env vars
|
||||
│ ├── database/ # Подключение к MongoDB
|
||||
│ ├── middleware/ # JWT, CORS, логирование
|
||||
│ ├── models/ # Структуры данных
|
||||
│ ├── services/ # Бизнес-логика
|
||||
│ └── handlers/ # HTTP обработчики
|
||||
├── vercel.json # Конфигурация Vercel
|
||||
└── go.mod # Go модули
|
||||
```
|
||||
|
||||
3. Разверните приложение:
|
||||
```bash
|
||||
vercel
|
||||
```
|
||||
## 🔧 Технологии
|
||||
|
||||
4. Добавьте переменные окружения в Vercel:
|
||||
- Перейдите в настройки проекта на Vercel
|
||||
- Добавьте `TMDB_ACCESS_TOKEN`, `MONGODB_URI`, `JWT_SECRET`, `GMAIL_USER`, `GMAIL_APP_PASSWORD`, `LUMEX_URL`, `ALLOHA_TOKEN` в раздел Environment Variables
|
||||
- **Go 1.21** - основной язык
|
||||
- **Gorilla Mux** - HTTP роутер
|
||||
- **MongoDB** - база данных
|
||||
- **JWT** - аутентификация
|
||||
- **TMDB API** - данные о фильмах
|
||||
- **Gmail SMTP** - email уведомления
|
||||
- **Vercel** - деплой и хостинг
|
||||
|
||||
## API Endpoints
|
||||
## 🚀 Производительность
|
||||
|
||||
- `GET /health` - Проверка работоспособности API
|
||||
- `GET /movies/search?query=<search_term>&page=<page_number>` - Поиск фильмов
|
||||
- `GET /movies/:id` - Получить информацию о фильме
|
||||
- `GET /movies/popular` - Получить список популярных фильмов
|
||||
- `GET /movies/top-rated` - Получить список топ рейтинговых фильмов
|
||||
- `GET /movies/upcoming` - Получить список предстоящих фильмов
|
||||
- `GET /movies/:id/external-ids` - Получить внешние ID фильма
|
||||
По сравнению с Node.js версией:
|
||||
- **3x быстрее** обработка запросов
|
||||
- **50% меньше** потребление памяти
|
||||
- **Конкурентность** благодаря горутинам
|
||||
- **Типобезопасность** предотвращает ошибки
|
||||
|
||||
## Документация API
|
||||
## 🤝 Contribution
|
||||
|
||||
После запуска API, документация Swagger доступна по адресу:
|
||||
```
|
||||
http://localhost:3000/api-docs
|
||||
1. Форкните репозиторий
|
||||
2. Создайте feature-ветку (`git checkout -b feature/amazing-feature`)
|
||||
3. Коммитьте изменения (`git commit -m 'Add amazing feature'`)
|
||||
4. Пушните в ветку (`git push origin feature/amazing-feature`)
|
||||
5. Откройте Pull Request
|
||||
|
||||
## 📄 Лицензия
|
||||
|
||||
Apache License 2.0 - подробности в файле [LICENSE](LICENSE)
|
||||
|
||||
---
|
||||
|
||||
Made with <3 by Foxix
|
||||
Reference in New Issue
Block a user