DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'CustomFieldsTypeYclients') THEN CREATE TYPE CustomFieldsTypeYclients AS ENUM ( 'text', 'number', 'select', 'date', 'datetime' ); END IF; END $$; DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_enum WHERE enumlabel = 'yclients_staff_id' AND enumtypid = 'question_type'::regtype ) THEN ALTER TYPE question_type ADD VALUE 'yclients_staff_id'; END IF; END $$; DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_enum WHERE enumlabel = 'yclients_services' AND enumtypid = 'question_type'::regtype ) THEN ALTER TYPE question_type ADD VALUE 'yclients_services'; END IF; END $$; DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM pg_enum WHERE enumlabel = 'yclients_comment' AND enumtypid = 'question_type'::regtype ) THEN ALTER TYPE question_type ADD VALUE 'yclients_comment'; END IF; END $$; CREATE TABLE IF NOT EXISTS YclientsTokens ( AccountID VARCHAR(30) PRIMARY KEY, SalonID int not null, -- ID компании AccessToken TEXT NOT NULL DEFAULT '', Active BOOLEAN NOT NULL DEFAULT FALSE, Expiration BOOLEAN NOT NULL DEFAULT FALSE, -- флаг истек ли токен CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); create UNIQUE INDEX idx_unique_tokens_yclients ON YclientsTokens (SalonID, AccountID) WHERE Active = true and Expiration = false; CREATE TABLE IF NOT EXISTS YclientsAccounts ( ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, AccountID VARCHAR(30) NOT NULL DEFAULT '', -- ID аккаунта у нас SalonID INT NOT NULL, -- ID компании Title text NOT NULL DEFAULT '', ShortDecription text NOT NULL DEFAULT '', Country VARCHAR(50) NOT NULL DEFAULT '', Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS YclientsAccountUsers ( ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, SalonID INT NOT NULL, -- ID компании YclientsID INT NOT NULL, -- ID пользователя в Yclients Name VARCHAR(512) NOT NULL DEFAULT '', Specialization text NOT NULL DEFAULT '', IDPosition int not null default 0, TitlePosition text not null default 0, Fired BOOLEAN not null default false, -- Уволен ли сотрудник Status BOOLEAN not null default false, -- Удален ли сотрудник Hidden BOOLEAN not null default false, -- Скрыт ли сотрудник для онлайн-записи YclientsUserID INT NOT NULL, -- ID пользователя в Yclients2 Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); -- CREATE TABLE IF NOT EXISTS YclientsCompany ( -- ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, -- SalonID INT NOT NULL, -- ID компании -- Title text NOT NULL, -- ShortDecription text NOT NULL, -- Active INT NOT NULL, -- Country text NOT NULL, -- GroupPriority INT NOT NULL, -- Deleted BOOLEAN NOT NULL DEFAULT FALSE, -- CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP -- ); CREATE TABLE IF NOT EXISTS YclientsServices ( ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, SalonID INT NOT NULL, -- ID компании ServiceID INT NOT NULL, SalonServiceID INT NOT NULL, Title text NOT NULL, CategoryID INT NOT NULL, PriceMin text NOT NULL, PriceMax text NOT NULL, Discount text NOT NULL, Comment text NOT NULL, Active BOOLEAN not null default false, ApiID text NOT NULL, Staff JSONB NOT NULL DEFAULT '{}', Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS YclientsTimeSlots ( ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, SalonID INT NOT NULL, -- ID компании IsEnabled BOOLEAN NOT NULL DEFAULT false, WeekdaysSettings JSONB NOT NULL DEFAULT '[]', DatesSettings JSONB NOT NULL DEFAULT '{}', Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS YclientsRules ( ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, SalonID INT NOT NULL, -- ID компании QuizID INT NOT NULL, -- ID квиза на которое вешается правило StaffID INT NOT NULL, Services JSONB NOT NULL DEFAULT '{}', FieldsRule JSONB NOT NULL DEFAULT '{}', CustomColor text NOT NULL Default '', Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS YclientsFields ( ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, YclientsID INT NOT NULL, -- Айдишник field в Yclients SalonID INT NOT NULL, -- ID компании FieldType CustomFieldsTypeYclients NOT NULL, -- тип поля Code text NOT NULL, Title text NOT NULL, ShowInUI BOOLEAN NOT NULL DEFAULT FALSE, UserCanEdit BOOLEAN NOT NULL DEFAULT FALSE, Deleted BOOLEAN NOT NULL DEFAULT FALSE, CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS YclientsCRMStatuses ( ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, AnswerID BIGINT NOT NULL, SalonID INT NOT NULL, RecordID INT NOT NULL DEFAULT 0, -- ID созданной записи в YClients Status TEXT NOT NULL DEFAULT '', -- запись о ошибке, либо успехе CreatedAt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE UNIQUE INDEX idx_unique_yclients_rules ON YclientsRules (SalonID, QuizID) WHERE Deleted = false;