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;