Перейти к содержанию

Базовые профили (base_profiles)🔗

Назначение🔗

Приложение base_profiles содержит общую модель BaseProfile, от которой наследуются профили конкретных сервисов (VK, WhatsApp, Widget и т.д.).

Модель выделена в отдельное приложение, чтобы избежать дублирования общих полей и централизовать логику, связанную с подпиской, статусами и параметрами обработки.


Основные модели и сущности🔗

BaseProfile🔗

class BaseProfile(models.Model):
    user = models.ForeignKey(CustomUser, ...)
    service = models.ForeignKey(ServiceRegistry, ...)
    name = models.CharField(...)
    open_ai_assistant_key = models.CharField(...)
    open_ai_key = models.CharField(...)
    wait_time = models.IntegerField(...)
    is_active = models.BooleanField(...)
    unignore_triggers = ArrayField(models.CharField(...))
    started_at = models.DateField(...)
    next_billing_date = models.DateField(...)
    amount_rub = models.DecimalField(...)
Поле Назначение
user Пользователь, которому принадлежит профиль
service Сервис, к которому относится профиль (см. ServiceRegistry в billing)
name Название профиля
open_ai_key OpenAI API-ключ, используемый для доступа к API OpenAI
open_ai_assistant_key ID ассистента в OpenAI
wait_time Время сбора сообщений в секундах
is_active Флаг активности профиля. Если False — профиль игнорируется системой и не списывает средства за подписку
unignore_triggers Массив фраз, выводящих пользователя из игнора (поиск без учёта регистра)
started_at Дата начала подписки
next_billing_date Дата следующего списания
amount_rub Стоимость ежедневной подписки в рублях (по умолчанию 33.333333)

Связи и использование🔗

  • Модель BaseProfile не используется напрямую — от неё наследуются модели конкретных профилей сервисов;
  • Используется микросервисами (через data_service) для:
    • получения данных о профиле;
    • доступа к OpenAI-ключу и ассистенту;
    • получения wait_time, статуса активности и прочих параметров;
  • Так же используется скриптом ежедневного списания средств за подписку, для получения стоимости подписки

Особенности🔗

  • amount_rub определяет ежедневную стоимость подписки. Используется вместо ServiceRegistry.subscribe_amount;

Bug

Разобратся с этим моментом!!! Вроде как скрипт списаний должен использовать сумму из модели сервисов а не эту.

  • started_at устанавливается при создании профиля;
  • next_billing_date обновляется ежедневно скриптом в списания средств за подписку;
  • unignore_triggers используется при анализе входящих сообщений на стороне сервисов интеграции — список сравнивается с текстом сообщения;
  • open_ai_key и open_ai_assistant_key передаются микросервисами в микросервис gpt_service который взаимодействует с API OpenAI.

Админка🔗

  • BaseProfile не регистрируется напрямую в админке;
  • Отображается как часть дочерних моделей в соответствующих разделах;
  • Настройки, фильтрация и отображение зависят от каждой конкретной реализации профиля.

API🔗

Общая информация🔗

Приложение не предоставляет собственного API.
Все обращения к данным профиля происходят через data_service.


Использование🔗

  • Сервисы интеграции через data_service получают нужные поля (open_ai_key, wait_time, is_active и др.);
  • Скрипт списаний средств за подписку используют is_active, started_at, next_billing_date для расчёта оплаты и обновления статуса.