common/dal/schema/000021_init.up.sql

150 lines
6.8 KiB
MySQL
Raw Normal View History

2025-05-13 13:40:18 +00:00
CREATE TABLE IF NOT EXISTS BitrixTokens (
AccountID VARCHAR(30) PRIMARY KEY, -- связь с users AccountID неявная посредством join
RefreshToken TEXT NOT NULL ,
AccessToken TEXT NOT NULL ,
AuthCode TEXT NOT NULL , -- код авторизации который получаем при вебхук
Expiration TIMESTAMP NOT NULL, -- время истечения токенов
CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'FieldsType') THEN
CREATE TYPE FieldsType AS ENUM (
'CRM_LEAD',
'CRM_COMPANY',
'CRM_CONTACT',
'CRM_DEAL',
'CRM_INVOICE',
'CRM_SMART_INVOICE',
'CRM_QUOTE',
'CRM_REQUISITE'
);
END IF;
END $$;
DO $$
BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'CustomFieldsType') THEN
CREATE TYPE CustomFieldsType AS ENUM (
'string',
'integer',
'double',
'boolean',
'datetime',
'enumeration',
'iblock_section',
'iblock_element',
'employee',
'crm_status',
'crm',
'address',
'money',
'url',
'file',
'crm_pena_tag'
);
END IF;
END $$;
CREATE TABLE IF NOT EXISTS BitrixFields (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
BitrixID VARCHAR(255) NOT NULL, -- Айдишник field в битриксе
AccountID VARCHAR(255) NOT NULL,-- ID портала битрикса
EntityID FieldsType NOT NULL,-- тип поля
FieldName VARCHAR(255) NOT NULL,-- имя поля
EditFromLabel VARCHAR(255) NOT NULL,-- заголовок вопроса
FieldType CustomFieldsType NOT NULL, -- тип поля
Deleted BOOLEAN NOT NULL DEFAULT FALSE,
CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS BitrixAccountUsers (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
AccountID VARCHAR(255) NOT NULL, -- ID портала битрикса
BitrixIDUserID VARCHAR(255) NOT NULL, -- ID пользователя в битриксе
Name VARCHAR(255) NOT NULL default '', -- Имя
LastName VARCHAR(255) NOT NULL default '',-- Фамилия
SecondName VARCHAR(255) NOT NULL default '', -- Отчество
Title VARCHAR(255) NOT NULL default '',
Email VARCHAR(255) NOT NULL default '', -- Почта
UFDepartment INT[], -- Массив департаментов
WorkPosition VARCHAR(255) NOT NULL default '', -- Должность
Deleted BOOLEAN NOT NULL DEFAULT FALSE,
CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS BitrixAccounts (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
AccountID VARCHAR(30) NOT NULL, -- ID аккаунта у нас
BitrixID VARCHAR(255) NOT NULL, -- ID портала битрикса
Deleted BOOLEAN NOT NULL DEFAULT FALSE,
CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
Subdomain VARCHAR(50) NOT NULL -- поддомен
);
CREATE TABLE IF NOT EXISTS PipelineBitrix (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
BitrixID INT NOT NULL, -- Айдишник воронки в битриксе
AccountID VARCHAR(255) NOT NULL, -- ID портала битрикса
Name VARCHAR(255) NOT NULL, -- Название воронки
EntityTypeId INT NOT NULL, -- Тип по номерам
Deleted BOOLEAN NOT NULL DEFAULT FALSE,
CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT validEntityType CHECK (EntityTypeId IN (1, 2, 3, 4, 5, 7, 8, 31))
);
CREATE TABLE IF NOT EXISTS StepBitrix (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
AccountID VARCHAR(255) NOT NULL, -- ID портала битрикса
BitrixID VARCHAR(255) NOT NULL, -- Айдишник состояния в битриксе
EntityID VARCHAR(255) NOT NULL, -- Тип сущности
StatusID VARCHAR(255) NOT NULL, -- Текстовый формат ID статуса
Name VARCHAR(255) NOT NULL default '', -- Название
NameInit VARCHAR(255) NOT NULL default '', -- возможно это изначальное название
Color VARCHAR(50) NOT NULL default '', -- Цвет
PipelineID INT NOT NULL, -- ID воронки
Deleted BOOLEAN NOT NULL DEFAULT FALSE,
CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS BitrixRule (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
AccountID VARCHAR(255) NOT NULL, -- ID портала битрикса
QuizID INT NOT NULL, -- ID квиза на которое вешается правило
PerformerID VARCHAR(255) NOT NULL, -- ID пользователя в битриксе который ответсвенный
PipelineID INT NOT NULL, -- ID воронки
TypeID VARCHAR(255) NOT NULL, -- шаг сделки только с "ENTITY_ID":"DEAL_TYPE","STATUS_ID":"SALE"
StageID VARCHAR(255) NOT NULL, -- стадия сделки, шаг "ENTITY_ID":"DEAL_STAGE","STATUS_ID":"NEW"
SourceID VARCHAR(255) NOT NULL, -- тип источника, шаг "ENTITY_ID":"SOURCE","STATUS_ID":"CALL"
StatusID VARCHAR(255) NOT NULL, -- тип источника, шаг "ENTITY_ID":"STATUS","STATUS_ID":"IN_PROCESS"
FieldsRule JSONB NOT NULL DEFAULT '{}', -- вложенная структура
TagsToAdd JSONB NOT NULL DEFAULT '{}', -- структура тегов которые надо дбавлять
Deleted BOOLEAN NOT NULL DEFAULT FALSE,
CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
LeadFlag BOOLEAN NOT NULL DEFAULT FALSE -- если true то делаем лид а не сделку
);
CREATE TABLE IF NOT EXISTS bitrixCRMStatuses (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
AccountID VARCHAR(255) NOT NULL, -- ID портала битрикса
DealID INT NOT NULL, -- id сделки или лида в которую добавлялось
AnswerID BIGINT NOT NULL REFERENCES answer(id), -- id true result который вызвал действие
Status TEXT NOT NULL DEFAULT '', -- запись о ошибке, либо успехе
CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS bitrixContact (
ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY,
AccountID VARCHAR(255) NOT NULL, -- ID "компании" в амо
BitrixID INT NOT NULL, -- ID контакта в амо
Field text NOT NULL DEFAULT '' -- значение чего то email? phone? etc
);
CREATE UNIQUE INDEX idx_unique_pipeline_bitrix ON PipelineBitrix (BitrixID, AccountID) WHERE Deleted = false;
CREATE UNIQUE INDEX idx_unique_step_bitrix ON StepBitrix (BitrixID, AccountID) WHERE Deleted = false;
CREATE UNIQUE INDEX idx_unique_field_bitrix ON BitrixFields (BitrixID, AccountID, EntityID);
ALTER TABLE answer ADD COLUMN version integer NOT NULL default 0;