move yclients migration

This commit is contained in:
skeris 2025-11-17 22:43:30 +03:00
parent 3c4b860f40
commit b91f57578e
4 changed files with 164 additions and 208 deletions

@ -1,12 +0,0 @@
DROP TABLE If EXISTS YclientsTokens;
DROP TABLE If EXISTS YclientsAccounts;
DROP TABLE If EXISTS YclientsAccountUsers;
-- DROP TABLE If EXISTS YclientsCompany;
DROP TABLE If EXISTS YclientsServices;
DROP TABLE If EXISTS YclientsTimeSlots;
DROP TABLE If EXISTS YclientsRules;
DROP TABLE If EXISTS YclientsFields;
DROP TABLE If EXISTS YclientsCRMStatuses;
DROP INDEX if EXISTS idx_unique_tokens_yclients;
DROP INDEX if EXISTS idx_unique_yclients_rules;

@ -1,157 +0,0 @@
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;

@ -1,26 +1,12 @@
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
);
DROP TABLE If EXISTS YclientsTokens;
DROP TABLE If EXISTS YclientsAccounts;
DROP TABLE If EXISTS YclientsAccountUsers;
-- DROP TABLE If EXISTS YclientsCompany;
DROP TABLE If EXISTS YclientsServices;
DROP TABLE If EXISTS YclientsTimeSlots;
DROP TABLE If EXISTS YclientsRules;
DROP TABLE If EXISTS YclientsFields;
DROP TABLE If EXISTS YclientsCRMStatuses;
create UNIQUE INDEX idx_unique_tokens_yclients ON YclientsTokens (SalonID, AccountID) WHERE Active = true and Expiration = false;
ALTER TABLE YclientsAccounts
ADD COLUMN IF NOT EXISTS ShortDecription text NOT NULL DEFAULT '',
ADD COLUMN IF NOT EXISTS Country VARCHAR(50) NOT NULL DEFAULT '';
ALTER TABLE YclientsTimeSlots
ALTER COLUMN DatesSettings SET DEFAULT '{}'::jsonb;
UPDATE YclientsTimeSlots
SET DatesSettings = '{}'::jsonb
WHERE DatesSettings = '[]'::jsonb;
ALTER TABLE YclientsServices
ALTER COLUMN PriceMin TYPE TEXT,
ALTER COLUMN PriceMax TYPE TEXT,
ALTER COLUMN Discount TYPE TEXT;
DROP INDEX if EXISTS idx_unique_tokens_yclients;
DROP INDEX if EXISTS idx_unique_yclients_rules;

@ -1,18 +1,157 @@
DROP INDEX if EXISTS idx_unique_tokens_yclients;
DROP TABLE IF EXISTS YclientsTokens;
ALTER TABLE YclientsAccounts
DROP COLUMN IF EXISTS ShortDecription,
DROP COLUMN IF EXISTS Country;
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 $$;
ALTER TABLE YclientsTimeSlots
ALTER COLUMN DatesSettings SET DEFAULT '[]'::jsonb;
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 $$;
UPDATE YclientsTimeSlots
SET DatesSettings = '[]'::jsonb
WHERE DatesSettings = '{}'::jsonb;
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 $$;
ALTER TABLE YclientsServices
ALTER COLUMN PriceMin TYPE FLOAT USING NULLIF(PriceMin, '')::FLOAT,
ALTER COLUMN PriceMax TYPE FLOAT USING NULLIF(PriceMax, '')::FLOAT,
ALTER COLUMN Discount TYPE INT USING NULLIF(Discount, '')::INT;
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;