admin_service¶
1. Назначение¶
admin_service предоставляет единый административный API для модерации и управления пользователями, товарами, заказами, отзывами, чатом и внутренними уведомлениями.
2. API-каталог¶
Базовый префикс: /api/admin/. Для большинства endpoint требуется is_staff.
Основные группы¶
/users/*— управление пользователями и ролями./products/*— модерация каталога./orders/*— админ-управление заказами и платежами./reviews/*— модерация отзывов./seller-status-requests/*— обработка заявок продавцов./notifications/*— работа с системными уведомлениями./chat/conversations/*,/chat/messages/*— админ-доступ к чату./dashboard/stats/,/dashboard/timeseries/,/dashboard/funnel/— бизнес-аналитика (OLTP)./dashboard/web/*— веб-аналитика (моделиanalytics_app, см. analytics_service).
Кастомные actions (выборка)¶
| Метод | Путь | Назначение |
|---|---|---|
| POST | /users/{id}/toggle_active/ |
Активация/деактивация |
| POST | /users/{id}/toggle_staff/ |
Назначение staff |
| POST | /users/{id}/update_role/ |
Назначение роли |
| POST | /products/{id}/update_status/ |
Изменение статуса товара |
| POST | /orders/{id}/update_status/ |
Изменение статуса заказа |
| POST | /orders/{id}/update_payment_status/ |
Изменение статуса оплаты |
| POST | /seller-status-requests/{id}/approve/ |
Одобрение заявки |
| POST | /seller-status-requests/{id}/reject/ |
Отклонение заявки |
| POST | /notifications/{id}/mark_read/ |
Пометка уведомления |
| POST | /notifications/mark_all_read/ |
Пометка всех уведомлений |
| GET | /notifications/unread_count/ |
Счетчик непрочитанных |
3. Локальные модели¶
SellerStatusRequest(pending|approved|rejected, reviewed metadata).Notification(type,title,message,is_read,metadata, индексы).
4. Межсервисные зависимости¶
admin_service импортирует доменные модели из:
auth_serviceuser_serviceproduct_serviceorder_servicereview_servicechat_serviceanalytics_service(моделиAnalyticsEvent,AnalyticsSessionдля dashboard web)
5. Бизнес-правила¶
- Доступ только для staff пользователей.
update_roleвалидируетbuyer|seller|both.approveseller-заявки меняет роль и фиксирует reviewer метаданные.- Для
payment_status=paidзаказ может автоматически перейти вprocessing.
6. Риски¶
- Сильная code-level и data-level связность с другими сервисами.
- Нет детального разделения админ-ролей (moderator/admin/superadmin).
- Недостаток транзакционной обертки в мульти-шаговых операциях.
- Небезопасные дефолты settings для production.
7. Диаграмма workflow approve seller request¶
sequenceDiagram
participant A as Admin
participant S as admin_service
participant U as user_profile_data
participant N as notification_store
A->>S: POST /seller-status-requests/{id}/approve
S->>U: ensure user profile + role update
S->>S: set request approved + reviewed_at/by
S->>N: create notification
S-->>A: 200 approved
8. Конфигурация¶
- Внешний порт:
8006. - Основные env:
DATABASE_URL,SECRET_KEY,DEBUG,PYTHONPATH. - В settings подключены внешние app через
INSTALLED_APPS.
9. Дополнительная детализация внутренних функций (append-only)¶
9.1 Управление пользователями¶
UserAdminViewSet.perform_create(self, serializer)¶
- Источник:
admin_service/admin_app/views.py - Назначение: создать пользователя и синхронизировать ролевые профили.
- Вход:
- validated serializer data;
- дополнительный
roleизrequest.data. - Выход:
- созданный пользователь в стандартном DRF flow.
- Side effects:
- создание/обновление
UserProfile; - создание
SellerProfile/BuyerProfileв зависимости от роли; - best-effort создание уведомления.
UserAdminViewSet.update_role(self, request, pk=None)¶
- Вход:
roleв теле запроса (buyer|seller|both).- Выход:
200с обновленным пользователем;400при невалидной роли;500при внутренних ошибках интеграции профилей.- Side effects:
- изменение
UserProfile.role; - создание недостающих role-specific профилей.
9.2 Управление товарами и заказами¶
ProductAdminViewSet.update_status(self, request, pk=None)¶
- Источник:
admin_service/admin_app/views.py - Вход:
status:draft|published|archived.- Выход:
200с объектом товара;400при невалидном статусе.
OrderAdminViewSet.update_status(self, request, pk=None)¶
- Вход:
statusизOrder.STATUS_CHOICES.- Выход:
200с обновленным заказом;400при невалидном значении.- Примечание:
- финальный список допустимых статусов берется из модели order-сервиса.
OrderAdminViewSet.update_payment_status(self, request, pk=None)¶
- Вход:
payment_statusизOrder.PAYMENT_STATUS_CHOICES.- Выход:
200с заказом;400при невалидном статусе оплаты.- Side effects:
- бизнес-правило: при
paidиpendingстатус заказа переводится вprocessing.
9.3 Модерация seller-заявок¶
SellerStatusRequestViewSet.approve(self, request, pk=None) / reject(self, request, pk=None)¶
- Источник:
admin_service/admin_app/views.py - Вход:
- id заявки;
- опционально
notes. - Выход:
200с данными обновленной заявки;400/500в ошибочных сценариях.- Side effects:
- обновление статуса заявки и reviewer metadata;
- при approve: изменение роли пользователя и создание seller-профиля;
- отправка уведомления пользователю.
9.4 Веб-аналитика (dashboard web)¶
Staff-only endpoint'ы в admin_app/web_analytics_views.py (префикс /api/admin/dashboard/web/):
| Метод | Путь | Назначение |
|---|---|---|
| GET | /overview/ |
KPI: визиты, посетители, просмотры, отказы, API success, JS-ошибки |
| GET | /timeseries/ |
Тренды visits, pageviews, errors, api_2xx/4xx/5xx |
| GET | /pages/ |
Топ страниц, входы/выходы |
| GET | /sources/ |
Referrers, UTM, каналы |
| GET | /technology/ |
Browser, OS, device |
| GET | /errors/ |
Client + API ошибки |
| GET | /api/ |
Статистика API по сервисам |
| GET | /realtime/ |
Активные сессии, последние события |
Query: from, to (YYYY-MM-DD), interval=day|week (для timeseries).
UI: frontend/src/pages/AdminAnalytics.jsx + WebAnalyticsSection.jsx.
Регламент: Веб-аналитика.
9.5 Dashboard (бизнес) и уведомления¶
dashboard_stats(request)¶
- Источник:
admin_service/admin_app/views.py - Назначение: сбор агрегатов для dashboard.
- Выход:
- total/recent метрики и top-products.
- Особенность:
- часть подзапросов защищена локальными try/except, возможна частичная деградация без полного падения ответа.
NotificationViewSet.mark_read, mark_all_read, unread_count¶
- Назначение: операции по состоянию прочитанности.
- Side effects:
- массовые update-операции по уведомлениям текущего админа.
- Edge-cases:
- при недоступной модели уведомлений часть endpoint может вернуть fallback (
count=0) или500(в зависимости от метода).
9.6 Операционная CLI-логика¶
create_admin management command (handle, get_password)¶
- Источник:
admin_service/admin_app/management/commands/create_admin.py - Назначение: интерактивное создание staff/superuser из консоли.
- Вход:
- username/email/password через параметры или prompt.
- Выход:
- созданный пользователь либо аварийное завершение процесса.
- Edge-cases:
sys.exit(1)при дубликатах, mismatch пароля или иных критичных ошибках.
10. Соответствие master-документации¶
Источник верхнего уровня: Master-документация проекта.
| Контроль | Требование | Проверка | Артефакт |
|---|---|---|---|
| Governance sync | Изменения admin-процессов синхронизированы с governance/operations docs | ревью релизных и role-процедур | PR + docs diff |
| Permission model | Роли и доступы endpoint-ов документированы явно | проверка role/permission сценариев | API docs + QA checks |
| Contract stability | Админские действия согласованы с зависимыми сервисами | контрактная проверка смежных endpoint-ов | integration checks |
| Incident readiness | Критичные admin flow имеют операционные fallback | ревью инцидентных сценариев | operations docs |