export const INIT_GOOGLE_AUTH = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'google_auth') BEGIN CREATE TABLE google_auth ( id INT IDENTITY(1,1) PRIMARY KEY, email NVARCHAR(320) NOT NULL, created_at DATETIME2 NOT NULL CONSTRAINT DF_google_auth_created_at DEFAULT SYSUTCDATETIME(), CONSTRAINT UQ_google_auth_email UNIQUE (email) ); END `; export const INIT_LANGUAGE = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'language') BEGIN CREATE TABLE language ( id INT IDENTITY(1,1) PRIMARY KEY, iso639 NVARCHAR(10) NOT NULL, CONSTRAINT UQ_language_iso639 UNIQUE (iso639) ); END `; export const INIT_COMPANY = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'company') BEGIN CREATE TABLE company ( id INT IDENTITY(1,1) PRIMARY KEY, name NVARCHAR(255) NOT NULL, root_category_id INT NULL, default_language_id INT NULL, CONSTRAINT FK_company_default_language FOREIGN KEY (default_language_id) REFERENCES language(id) ON DELETE SET NULL ); END `; export const INIT_ARTICLE = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'article') BEGIN CREATE TABLE article ( id INT IDENTITY(1,1) PRIMARY KEY, sku NVARCHAR(100) NULL, articlelist_id INT NULL, is_father BIT NOT NULL CONSTRAINT DF_article_is_father DEFAULT 0, father INT NULL, fathersort INT NOT NULL CONSTRAINT DF_article_fathersort DEFAULT 0, CONSTRAINT FK_article_father FOREIGN KEY (father) REFERENCES article(id), CONSTRAINT UQ_article_sku UNIQUE (sku), CONSTRAINT UQ_article_father_fathersort UNIQUE (father, fathersort) ); END `; export const INIT_ARTICLELIST = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'articlelist') BEGIN CREATE TABLE articlelist ( id INT IDENTITY(1,1) PRIMARY KEY ); END `; export const INIT_ARTICLELISTARTICLE = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'articlelistarticle') BEGIN CREATE TABLE articlelistarticle ( id INT IDENTITY(1,1) PRIMARY KEY, articlelist_id INT NOT NULL, article_id INT NOT NULL, count INT NOT NULL CONSTRAINT DF_articlelistarticle_count DEFAULT 1, sort INT NOT NULL CONSTRAINT DF_articlelistarticle_sort DEFAULT 0, CONSTRAINT FK_articlelistarticle_articlelist FOREIGN KEY (articlelist_id) REFERENCES articlelist(id) ON DELETE CASCADE, CONSTRAINT FK_articlelistarticle_article FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE, CONSTRAINT UQ_articlelistarticle_articlelist_article UNIQUE (articlelist_id, article_id), CONSTRAINT UQ_articlelistarticle_articlelist_sort UNIQUE (articlelist_id, sort) ); END `; export const INIT_CATEGORY = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'category') BEGIN CREATE TABLE category ( id INT IDENTITY(1,1) PRIMARY KEY, parent_id INT NULL, sort INT NOT NULL CONSTRAINT DF_category_sort DEFAULT 0, CONSTRAINT FK_category_parent FOREIGN KEY (parent_id) REFERENCES category(id) ); END `; export const INIT_CATEGORYARTICLE = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'categoryarticle') BEGIN CREATE TABLE categoryarticle ( id INT IDENTITY(1,1) PRIMARY KEY, category_id INT NOT NULL, article_id INT NOT NULL, CONSTRAINT FK_categoryarticle_category FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE CASCADE, CONSTRAINT FK_categoryarticle_article FOREIGN KEY (article_id) REFERENCES article(id), CONSTRAINT UQ_categoryarticle_category_article UNIQUE (category_id, article_id) ); END `; export const INIT_CATEGORYTEXT = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'categorytext') BEGIN CREATE TABLE categorytext ( id INT IDENTITY(1,1) PRIMARY KEY, category_id INT NOT NULL, language_id INT NOT NULL, name NVARCHAR(255) NOT NULL, slug NVARCHAR(255) NOT NULL, seo NVARCHAR(MAX) NULL, [desc] NVARCHAR(MAX) NULL, CONSTRAINT FK_categorytext_category FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE CASCADE, CONSTRAINT FK_categorytext_language FOREIGN KEY (language_id) REFERENCES language(id) ON DELETE CASCADE, CONSTRAINT UQ_categorytext_category_language UNIQUE (category_id, language_id) ); END `; export const INIT_ARTICLENAME = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'articletext') BEGIN CREATE TABLE articletext ( id INT IDENTITY(1,1) PRIMARY KEY, article_id INT NOT NULL, language_id INT NOT NULL, name NVARCHAR(255) NOT NULL, slug NVARCHAR(255) NOT NULL, seo NVARCHAR(MAX) NULL, [desc] NVARCHAR(MAX) NULL, created_at DATETIME2 NOT NULL CONSTRAINT DF_articletext_created_at DEFAULT SYSUTCDATETIME(), updated_at DATETIME2 NOT NULL CONSTRAINT DF_articletext_updated_at DEFAULT SYSUTCDATETIME(), CONSTRAINT FK_articletext_article FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE, CONSTRAINT FK_articletext_language FOREIGN KEY (language_id) REFERENCES language(id) ON DELETE CASCADE, CONSTRAINT UQ_articletext_article_language UNIQUE (article_id, language_id) ); END `; export const INIT_NUMBERS = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'numbers') BEGIN CREATE TABLE numbers ( id INT IDENTITY(1,1) PRIMARY KEY, [type] NVARCHAR(100) NOT NULL, prefix NVARCHAR(50) NOT NULL CONSTRAINT DF_numbers_prefix DEFAULT '', padding INT NOT NULL CONSTRAINT DF_numbers_padding DEFAULT 0, [next] INT NOT NULL CONSTRAINT DF_numbers_next DEFAULT 1, CONSTRAINT UQ_numbers_type UNIQUE ([type]) ); END IF NOT EXISTS (SELECT 1 FROM numbers WHERE [type] = N'articlesku') BEGIN INSERT INTO numbers ([type], prefix, padding, [next]) VALUES (N'articlesku', N'P', 6, 1); END `; //EXEC dbo.getnextnumberwithprefixandpadding @type = N'articlesku', @value = @sku OUTPUT; //INSERT INTO article (sku, ...) VALUES (@sku, ...); export const INIT_GET_NEXT_NUMBER_WITH_PREFIX_AND_PADDING = ` IF NOT EXISTS (SELECT 1 FROM sys.procedures WHERE name = N'getnextnumberwithprefixandpadding') BEGIN EXEC(' CREATE PROCEDURE dbo.getnextnumberwithprefixandpadding @type NVARCHAR(100), @value NVARCHAR(100) OUTPUT AS BEGIN SET NOCOUNT ON; DECLARE @seq TABLE (prefix NVARCHAR(50), padding INT, num INT); UPDATE n SET [next] = [next] + 1 OUTPUT INSERTED.prefix, INSERTED.padding, DELETED.[next] INTO @seq(prefix, padding, num) FROM numbers n WITH (UPDLOCK, ROWLOCK) WHERE n.[type] = @type; IF @@ROWCOUNT = 0 THROW 50000, ''Number type not found'', 1; SELECT @value = prefix + CASE WHEN padding > 0 THEN RIGHT(REPLICATE(''0'', padding) + CAST(num AS NVARCHAR(20)), padding) ELSE CAST(num AS NVARCHAR(20)) END FROM @seq; END '); END `; export const INIT_COMPANYUSER = ` IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'companyuser') BEGIN CREATE TABLE companyuser ( google_auth_id INT NOT NULL, company_id INT NOT NULL, CONSTRAINT PK_companyuser PRIMARY KEY (google_auth_id, company_id), CONSTRAINT FK_companyuser_google_auth FOREIGN KEY (google_auth_id) REFERENCES google_auth(id) ON DELETE CASCADE, CONSTRAINT FK_companyuser_company FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE ); END `;