# API Documentation ## Аутентификация Все API запросы (кроме авторизации) требуют токен в заголовке Authorization. ### Получение токена **POST** `/api/auth/users/login` Авторизация пользователя и получение JWT токена #### Request Body: ```json { "email": "user@example.com", "password": "password123" } ``` #### Response: ```json { "user": { "id": 1, "email": "user@example.com", "role_id": 1 }, "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." } ``` ### Проверка токена **POST** `/api/auth/verify` Проверка валидности JWT токена #### Headers: ``` Authorization: Bearer Content-Type: application/json ``` #### Response: ```json { "id": 1, "email": "user@example.com", "role_id": 1 } ``` ## Управление пользователями ### Получение списка пользователей **GET** `/api/auth/users` Получение списка всех пользователей **Требует авторизации** ### Создание пользователя **POST** `/api/auth/users` Создание нового пользователя **Требует авторизации** #### Request Body: ```json { "email": "newuser@example.com", "password": "password123", "role": "admin" } ``` ### Обновление пользователя **PUT** `/api/auth/users/:id` Обновление пользователя **Требует авторизации** ### Удаление пользователя **DELETE** `/api/auth/users/:id` Удаление пользователя **Требует авторизации** ## Управление ролями ### Получение списка ролей **GET** `/api/auth/roles` Получение списка всех ролей **Требует авторизации** ### Создание роли **POST** `/api/auth/roles` Создание новой роли **Требует авторизации** ### Обновление роли **PUT** `/api/auth/roles/:id` Обновление роли **Требует авторизации** ### Удаление роли **DELETE** `/api/auth/roles/:id` Удаление роли **Требует авторизации** ## Управление разрешениями ### Получение списка разрешений **GET** `/api/auth/permissions` Получение списка всех разрешений **Требует авторизации** ### Создание разрешения **POST** `/api/auth/permissions` Создание нового разрешения **Требует авторизации** ### Обновление разрешения **PUT** `/api/auth/permissions/:id` Обновление разрешения **Требует авторизации** ### Удаление разрешения **DELETE** `/api/auth/permissions/:id` Удаление разрешения **Требует авторизации** ## Управление подписчиками ### Получение списка подписчиков **GET** `/api/mail/subscribers` Получение списка всех подписчиков **Требует авторизации** ### Создание подписчика **POST** `/api/mail/subscribers` Создание нового подписчика **Требует авторизации** #### Request Body: ```json { "email": "subscriber@example.com", "first_name": "John", "last_name": "Doe", "status": "active" } ``` ### Получение подписчика по ID **GET** `/api/mail/subscribers/:id` Получение подписчика по ID **Требует авторизации** ### Обновление подписчика **PUT** `/api/mail/subscribers/:id` Обновление подписчика **Требует авторизации** ### Удаление подписчика **DELETE** `/api/mail/subscribers/:id` Удаление подписчика **Требует авторизации** ## Управление группами рассылки ### Получение списка групп **GET** `/api/mail/mailing-groups` Получение списка всех групп рассылки **Требует авторизации** ### Создание группы **POST** `/api/mail/mailing-groups` Создание новой группы рассылки **Требует авторизации** #### Request Body: ```json { "name": "Newsletter Subscribers", "description": "Main newsletter group" } ``` ### Получение группы по ID **GET** `/api/mail/mailing-groups/:id` Получение группы по ID **Требует авторизации** ### Обновление группы **PUT** `/api/mail/mailing-groups/:id` Обновление группы **Требует авторизации** ### Удаление группы **DELETE** `/api/mail/mailing-groups/:id` Удаление группы **Требует авторизации** ## Управление шаблонами email ### Получение списка шаблонов **GET** `/api/mail/email-templates` Получение списка всех email шаблонов **Требует авторизации** ### Создание шаблона **POST** `/api/mail/email-templates` Создание нового email шаблона **Требует авторизации** #### Request Body: ```json { "name": "Welcome Email", "subject": "Welcome to our service!", "content": "

Welcome!

Thank you for joining us.

" } ``` ### Получение шаблона по ID **GET** `/api/mail/email-templates/:id` Получение шаблона по ID **Требует авторизации** ### Обновление шаблона **PUT** `/api/mail/email-templates/:id` Обновление шаблона **Требует авторизации** ### Удаление шаблона **DELETE** `/api/mail/email-templates/:id` Удаление шаблона **Требует авторизации** ## Управление версиями шаблонов ### Получение списка версий **GET** `/api/mail/email-template-versions` Получение списка всех версий шаблонов **Требует авторизации** ### Создание версии **POST** `/api/mail/email-template-versions` Создание новой версии шаблона **Требует авторизации** ### Получение версии по ID **GET** `/api/mail/email-template-versions/:id` Получение версии шаблона по ID **Требует авторизации** ### Обновление версии **PUT** `/api/mail/email-template-versions/:id` Обновление версии шаблона **Требует авторизации** ### Удаление версии **DELETE** `/api/mail/email-template-versions/:id` Удаление версии шаблона **Требует авторизации** ## Управление кампаниями ### Получение списка кампаний **GET** `/api/mail/campaigns` Получение списка всех кампаний **Требует авторизации** ### Создание кампании **POST** `/api/mail/campaigns` Создание новой кампании **Требует авторизации** #### Request Body: ```json { "name": "Summer Newsletter", "subject": "Summer Sale!", "template_id": 1, "group_id": 1, "smtp_server_id": 1, "scheduled_at": "2024-06-01T10:00:00Z" } ``` ### Получение кампании по ID **GET** `/api/mail/campaigns/:id` Получение кампании по ID **Требует авторизации** ### Обновление кампании **PUT** `/api/mail/campaigns/:id` Обновление кампании **Требует авторизации** ### Удаление кампании **DELETE** `/api/mail/campaigns/:id` Удаление кампании **Требует авторизации** ## Управление SMTP серверами ### Получение списка SMTP серверов **GET** `/api/mail/smtp-servers` Получение списка всех SMTP серверов **Требует авторизации** ### Создание SMTP сервера **POST** `/api/mail/smtp-servers` Создание нового SMTP сервера **Требует авторизации** #### Request Body: ```json { "name": "Gmail SMTP", "host": "smtp.gmail.com", "port": 587, "username": "user@gmail.com", "password": "app_password", "encryption": "tls" } ``` ### Получение SMTP сервера по ID **GET** `/api/mail/smtp-servers/:id` Получение SMTP сервера по ID **Требует авторизации** ### Обновление SMTP сервера **PUT** `/api/mail/smtp-servers/:id` Обновление SMTP сервера **Требует авторизации** ### Удаление SMTP сервера **DELETE** `/api/mail/smtp-servers/:id` Удаление SMTP сервера **Требует авторизации** ## История доставки ### Получение истории доставки **GET** `/api/mail/delivery-logs` Получение истории доставки email **Требует авторизации** ### Получение записи доставки по ID **GET** `/api/mail/delivery-logs/:id` Получение записи доставки по ID **Требует авторизации** ## Управление отписавшимися ### Получение списка отписавшихся **GET** `/api/mail/unsubscribed` Получение списка отписавшихся пользователей **Требует авторизации** ### Добавление в список отписавшихся **POST** `/api/mail/unsubscribed` Добавление email в список отписавшихся **Требует авторизации** #### Request Body: ```json { "email": "user@example.com", "reason": "No longer interested" } ``` ## Общие заголовки Для всех авторизованных запросов используйте: ``` Authorization: Bearer Content-Type: application/json ``` ## Коды ответов - **200** - Успешный запрос - **201** - Ресурс создан - **400** - Ошибка в запросе - **401** - Не авторизован - **403** - Доступ запрещен - **404** - Ресурс не найден - **500** - Внутренняя ошибка сервера ## Примеры использования ### Авторизация и получение токена ```bash curl -X POST http://localhost:3000/api/auth/users/login \ -H "Content-Type: application/json" \ -d '{ "email": "admin@example.com", "password": "password123" }' ``` ### Получение списка подписчиков ```bash curl -X GET http://localhost:3000/api/mail/subscribers \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -H "Content-Type: application/json" ``` ### Создание новой кампании ```bash curl -X POST http://localhost:3000/api/mail/campaigns \ -H "Authorization: Bearer YOUR_JWT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Welcome Campaign", "subject": "Welcome to our service!", "template_id": 1, "group_id": 1, "smtp_server_id": 1, "scheduled_at": "2024-06-01T10:00:00Z" }' ```