providerrefactor part1
This commit is contained in:
622
src/providers/sqlite3/schema.js
Normal file
622
src/providers/sqlite3/schema.js
Normal file
@@ -0,0 +1,622 @@
|
||||
const UTC_NOW = "strftime('%Y-%m-%dT%H:%M:%fZ', 'now')";
|
||||
|
||||
export const INIT_META = `
|
||||
CREATE TABLE IF NOT EXISTS meta (
|
||||
"key" TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL
|
||||
);
|
||||
INSERT OR IGNORE INTO meta ("key", value) VALUES ('version', '1');
|
||||
`;
|
||||
|
||||
export const INIT_LANGUAGE = `
|
||||
CREATE TABLE IF NOT EXISTS language (
|
||||
id INTEGER PRIMARY KEY,
|
||||
iso639 TEXT NOT NULL COLLATE NOCASE UNIQUE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_TAX = `
|
||||
CREATE TABLE IF NOT EXISTS tax (
|
||||
id INTEGER PRIMARY KEY,
|
||||
rate NUMERIC NOT NULL UNIQUE
|
||||
);
|
||||
INSERT OR IGNORE INTO tax (rate) VALUES (0), (7), (19);
|
||||
`;
|
||||
|
||||
export const INIT_CATEGORY = `
|
||||
CREATE TABLE IF NOT EXISTS category (
|
||||
id INTEGER PRIMARY KEY,
|
||||
parent_id INTEGER,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (parent_id) REFERENCES category(id) ON DELETE NO ACTION
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_PIC = `
|
||||
CREATE TABLE IF NOT EXISTS pic (
|
||||
id INTEGER PRIMARY KEY,
|
||||
w INTEGER NOT NULL,
|
||||
h INTEGER NOT NULL,
|
||||
size INTEGER NOT NULL,
|
||||
hash TEXT NOT NULL UNIQUE,
|
||||
thumbw INTEGER NOT NULL,
|
||||
thumbh INTEGER NOT NULL,
|
||||
thumbhash TEXT NOT NULL,
|
||||
source TEXT NOT NULL,
|
||||
fullbinary BLOB NOT NULL,
|
||||
thumbbinary BLOB NOT NULL
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_COMPANY = `
|
||||
CREATE TABLE IF NOT EXISTS company (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL COLLATE NOCASE UNIQUE,
|
||||
root_category_id INTEGER,
|
||||
default_language_id INTEGER,
|
||||
taxrate INTEGER,
|
||||
reducedtaxrate INTEGER,
|
||||
taxfreerate INTEGER,
|
||||
poscustomergroup_id INTEGER NOT NULL,
|
||||
FOREIGN KEY (root_category_id) REFERENCES category(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (default_language_id) REFERENCES language(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (taxrate) REFERENCES tax(id) ON DELETE NO ACTION,
|
||||
FOREIGN KEY (reducedtaxrate) REFERENCES tax(id) ON DELETE NO ACTION,
|
||||
FOREIGN KEY (taxfreerate) REFERENCES tax(id) ON DELETE NO ACTION,
|
||||
FOREIGN KEY (poscustomergroup_id) REFERENCES customergroup(id) ON DELETE NO ACTION
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_GOOGLE_AUTH = `
|
||||
CREATE TABLE IF NOT EXISTS google_auth (
|
||||
id INTEGER PRIMARY KEY,
|
||||
email TEXT NOT NULL COLLATE NOCASE UNIQUE,
|
||||
picture TEXT,
|
||||
picturebinary BLOB,
|
||||
sub TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT (${UTC_NOW}),
|
||||
selected_company INTEGER,
|
||||
FOREIGN KEY (selected_company) REFERENCES company(id) ON DELETE SET NULL
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS UQ_google_auth_sub
|
||||
ON google_auth(sub) WHERE sub IS NOT NULL;
|
||||
`;
|
||||
|
||||
export const INIT_CUSTOMERGROUP = `
|
||||
CREATE TABLE IF NOT EXISTS customergroup (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
company_id INTEGER,
|
||||
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
/* The FK is declared inline in INIT_COMPANY; SQLite cannot add it later. */
|
||||
export const INIT_COMPANY_POS_CUSTOMERGROUP_FK = '';
|
||||
|
||||
export const INIT_ENTITY = `
|
||||
CREATE TABLE IF NOT EXISTS entity (
|
||||
id INTEGER PRIMARY KEY,
|
||||
customergroup_id INTEGER NOT NULL,
|
||||
company_id INTEGER,
|
||||
first_name TEXT,
|
||||
name TEXT NOT NULL,
|
||||
"number" TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT (${UTC_NOW}),
|
||||
updated_at TEXT NOT NULL DEFAULT (${UTC_NOW}),
|
||||
FOREIGN KEY (customergroup_id) REFERENCES customergroup(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
/**
|
||||
* SQLite cannot index a joined view, so company_id is denormalized onto entity.
|
||||
* Triggers keep it synchronized with the entity's customer group.
|
||||
*/
|
||||
export const INIT_ENTITY_COMPANY_NUMBER_UQ = `
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS UQ_entity_company_number
|
||||
ON entity(company_id, "number") WHERE "number" IS NOT NULL;
|
||||
CREATE TRIGGER IF NOT EXISTS TR_entity_set_company_insert
|
||||
AFTER INSERT ON entity
|
||||
BEGIN
|
||||
UPDATE entity
|
||||
SET company_id = (SELECT company_id FROM customergroup WHERE id = NEW.customergroup_id)
|
||||
WHERE id = NEW.id;
|
||||
END;
|
||||
CREATE TRIGGER IF NOT EXISTS TR_entity_set_company_update
|
||||
AFTER UPDATE OF customergroup_id ON entity
|
||||
BEGIN
|
||||
UPDATE entity
|
||||
SET company_id = (SELECT company_id FROM customergroup WHERE id = NEW.customergroup_id)
|
||||
WHERE id = NEW.id;
|
||||
END;
|
||||
CREATE TRIGGER IF NOT EXISTS TR_customergroup_sync_entity_company
|
||||
AFTER UPDATE OF company_id ON customergroup
|
||||
BEGIN
|
||||
UPDATE entity SET company_id = NEW.company_id WHERE customergroup_id = NEW.id;
|
||||
END;
|
||||
`;
|
||||
|
||||
export const INIT_ENTITYADDRESS = `
|
||||
CREATE TABLE IF NOT EXISTS entityaddress (
|
||||
id INTEGER PRIMARY KEY,
|
||||
entity_id INTEGER NOT NULL,
|
||||
first_name TEXT,
|
||||
name TEXT,
|
||||
street TEXT,
|
||||
streetnumber TEXT,
|
||||
zip TEXT,
|
||||
city TEXT,
|
||||
county TEXT,
|
||||
addresstype TEXT NOT NULL,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (entity_id) REFERENCES entity(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_ENTITYCONTACT = `
|
||||
CREATE TABLE IF NOT EXISTS entitycontact (
|
||||
id INTEGER PRIMARY KEY,
|
||||
entity_id INTEGER NOT NULL,
|
||||
contacttype TEXT NOT NULL,
|
||||
contact TEXT NOT NULL,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (entity_id) REFERENCES entity(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_UNIT = `
|
||||
CREATE TABLE IF NOT EXISTS unit (
|
||||
id INTEGER PRIMARY KEY,
|
||||
company_id INTEGER NOT NULL,
|
||||
si TEXT NOT NULL,
|
||||
basesi TEXT NOT NULL,
|
||||
basesifactor REAL NOT NULL,
|
||||
UNIQUE (company_id, si),
|
||||
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE NO ACTION
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_UNITTEXT = `
|
||||
CREATE TABLE IF NOT EXISTS unittext (
|
||||
id INTEGER PRIMARY KEY,
|
||||
unit_id INTEGER NOT NULL,
|
||||
language_id INTEGER NOT NULL,
|
||||
symbol TEXT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
UNIQUE (unit_id, language_id),
|
||||
FOREIGN KEY (unit_id) REFERENCES unit(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (language_id) REFERENCES language(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_OPTIONSLIST = `
|
||||
CREATE TABLE IF NOT EXISTS optionslist (id INTEGER PRIMARY KEY);
|
||||
`;
|
||||
|
||||
export const INIT_ARTICLELIST = `
|
||||
CREATE TABLE IF NOT EXISTS articlelist (id INTEGER PRIMARY KEY);
|
||||
`;
|
||||
|
||||
export const INIT_BRAND = `
|
||||
CREATE TABLE IF NOT EXISTS brand (
|
||||
id INTEGER PRIMARY KEY,
|
||||
company_id INTEGER NOT NULL,
|
||||
name TEXT NOT NULL COLLATE NOCASE,
|
||||
gsprpinfo TEXT,
|
||||
UNIQUE (company_id, name),
|
||||
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE NO ACTION
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_ARTICLE = `
|
||||
CREATE TABLE IF NOT EXISTS article (
|
||||
id INTEGER PRIMARY KEY,
|
||||
sku TEXT COLLATE NOCASE UNIQUE,
|
||||
unit_id INTEGER NOT NULL,
|
||||
unitamount REAL NOT NULL,
|
||||
weight REAL NOT NULL,
|
||||
brand_id INTEGER,
|
||||
articlelist_id INTEGER,
|
||||
optionslist_id INTEGER,
|
||||
is_father INTEGER NOT NULL DEFAULT 0,
|
||||
fatherarticle_id INTEGER,
|
||||
fathersort INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT NOT NULL DEFAULT (${UTC_NOW}),
|
||||
updated_at TEXT NOT NULL DEFAULT (${UTC_NOW}),
|
||||
FOREIGN KEY (unit_id) REFERENCES unit(id) ON DELETE NO ACTION,
|
||||
FOREIGN KEY (brand_id) REFERENCES brand(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (articlelist_id) REFERENCES articlelist(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (optionslist_id) REFERENCES optionslist(id) ON DELETE SET NULL,
|
||||
FOREIGN KEY (fatherarticle_id) REFERENCES article(id) ON DELETE NO ACTION
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS UQ_article_fatherarticle_fathersort
|
||||
ON article(fatherarticle_id, fathersort)
|
||||
WHERE fatherarticle_id IS NOT NULL;
|
||||
`;
|
||||
|
||||
export const INIT_ARTICLEEAN = `
|
||||
CREATE TABLE IF NOT EXISTS articleean (
|
||||
id INTEGER PRIMARY KEY,
|
||||
article_id INTEGER NOT NULL,
|
||||
ean TEXT NOT NULL UNIQUE,
|
||||
FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS IX_articleean_article_ean
|
||||
ON articleean(article_id, ean);
|
||||
`;
|
||||
|
||||
export const INIT_ARTICLEPIC = `
|
||||
CREATE TABLE IF NOT EXISTS articlepic (
|
||||
id INTEGER PRIMARY KEY,
|
||||
article_id INTEGER NOT NULL,
|
||||
pic_id INTEGER NOT NULL,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
UNIQUE (article_id, pic_id),
|
||||
UNIQUE (article_id, sort),
|
||||
FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (pic_id) REFERENCES pic(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_BRANDPIC = `
|
||||
CREATE TABLE IF NOT EXISTS brandpic (
|
||||
id INTEGER PRIMARY KEY,
|
||||
brand_id INTEGER NOT NULL,
|
||||
pic_id INTEGER NOT NULL,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
UNIQUE (brand_id, pic_id),
|
||||
UNIQUE (brand_id, sort),
|
||||
FOREIGN KEY (brand_id) REFERENCES brand(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (pic_id) REFERENCES pic(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_ARTICLELISTARTICLE = `
|
||||
CREATE TABLE IF NOT EXISTS articlelistarticle (
|
||||
id INTEGER PRIMARY KEY,
|
||||
articlelist_id INTEGER NOT NULL,
|
||||
article_id INTEGER NOT NULL,
|
||||
count INTEGER NOT NULL DEFAULT 1,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
UNIQUE (articlelist_id, article_id),
|
||||
UNIQUE (articlelist_id, sort),
|
||||
FOREIGN KEY (articlelist_id) REFERENCES articlelist(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_OPTIONSLISTARTICLE = `
|
||||
CREATE TABLE IF NOT EXISTS optionslistarticle (
|
||||
id INTEGER PRIMARY KEY,
|
||||
optionslist_id INTEGER NOT NULL,
|
||||
article_id INTEGER NOT NULL,
|
||||
count INTEGER NOT NULL DEFAULT 1,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
mandated INTEGER NOT NULL DEFAULT 0,
|
||||
UNIQUE (optionslist_id, article_id),
|
||||
UNIQUE (optionslist_id, sort),
|
||||
FOREIGN KEY (optionslist_id) REFERENCES optionslist(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_CATEGORYARTICLE = `
|
||||
CREATE TABLE IF NOT EXISTS categoryarticle (
|
||||
id INTEGER PRIMARY KEY,
|
||||
category_id INTEGER NOT NULL,
|
||||
article_id INTEGER NOT NULL,
|
||||
UNIQUE (category_id, article_id),
|
||||
FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE NO ACTION,
|
||||
FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS IX_categoryarticle_article_category
|
||||
ON categoryarticle(article_id, category_id);
|
||||
`;
|
||||
|
||||
export const INIT_CATEGORYPIC = `
|
||||
CREATE TABLE IF NOT EXISTS categorypic (
|
||||
id INTEGER PRIMARY KEY,
|
||||
category_id INTEGER NOT NULL,
|
||||
pic_id INTEGER NOT NULL,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
UNIQUE (category_id, pic_id),
|
||||
UNIQUE (category_id, sort),
|
||||
FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (pic_id) REFERENCES pic(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_CATEGORYTEXT = `
|
||||
CREATE TABLE IF NOT EXISTS categorytext (
|
||||
id INTEGER PRIMARY KEY,
|
||||
category_id INTEGER NOT NULL,
|
||||
language_id INTEGER NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
slug TEXT NOT NULL,
|
||||
seo TEXT,
|
||||
"desc" TEXT,
|
||||
UNIQUE (category_id, language_id),
|
||||
FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (language_id) REFERENCES language(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_ARTICLENAME = `
|
||||
CREATE TABLE IF NOT EXISTS articletext (
|
||||
id INTEGER PRIMARY KEY,
|
||||
article_id INTEGER NOT NULL,
|
||||
language_id INTEGER NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
slug TEXT NOT NULL,
|
||||
seo TEXT,
|
||||
"desc" TEXT,
|
||||
UNIQUE (article_id, language_id),
|
||||
FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (language_id) REFERENCES language(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_PRICE = `
|
||||
CREATE TABLE IF NOT EXISTS price (
|
||||
id INTEGER PRIMARY KEY,
|
||||
tax_id INTEGER NOT NULL,
|
||||
article_id INTEGER NOT NULL,
|
||||
minmultiplier NUMERIC NOT NULL DEFAULT 1,
|
||||
customergroup_id INTEGER NOT NULL,
|
||||
net REAL NOT NULL,
|
||||
FOREIGN KEY (tax_id) REFERENCES tax(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (customergroup_id) REFERENCES customergroup(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS IX_price_article_cg_mult
|
||||
ON price(article_id, customergroup_id, minmultiplier, net, tax_id);
|
||||
`;
|
||||
|
||||
export const INIT_ARTICLE_SUPPLIER = `
|
||||
CREATE TABLE IF NOT EXISTS articlesupplier (
|
||||
id INTEGER PRIMARY KEY,
|
||||
article_id INTEGER NOT NULL,
|
||||
entity_id INTEGER NOT NULL,
|
||||
price_id INTEGER,
|
||||
sku TEXT,
|
||||
stock REAL,
|
||||
pu REAL NOT NULL DEFAULT 1,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
UNIQUE (article_id, entity_id),
|
||||
UNIQUE (article_id, sort),
|
||||
FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (entity_id) REFERENCES entity(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (price_id) REFERENCES price(id) ON DELETE NO ACTION
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS IX_articlesupplier_article_entity
|
||||
ON articlesupplier(article_id, entity_id);
|
||||
`;
|
||||
|
||||
export const INIT_MANIFEST = `
|
||||
CREATE TABLE IF NOT EXISTS manifest (
|
||||
id INTEGER PRIMARY KEY,
|
||||
company_id INTEGER NOT NULL,
|
||||
"number" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
entity_id INTEGER,
|
||||
external_number TEXT,
|
||||
"date" TEXT NOT NULL DEFAULT (${UTC_NOW}),
|
||||
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE NO ACTION,
|
||||
FOREIGN KEY (entity_id) REFERENCES entity(id) ON DELETE SET NULL
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_MANIFESTARTICLE = `
|
||||
CREATE TABLE IF NOT EXISTS manifestarticle (
|
||||
id INTEGER PRIMARY KEY,
|
||||
manifest_id INTEGER NOT NULL,
|
||||
sku TEXT,
|
||||
name TEXT,
|
||||
pu REAL NOT NULL DEFAULT 1,
|
||||
amount REAL NOT NULL,
|
||||
net REAL NOT NULL,
|
||||
comment TEXT,
|
||||
rebate REAL NOT NULL DEFAULT 0,
|
||||
taxrate REAL NOT NULL DEFAULT 0,
|
||||
FOREIGN KEY (manifest_id) REFERENCES manifest(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
/* SQLite has no SQL Server ledger tables; constraints preserve the base shape. */
|
||||
export const INIT_LEDGER = `
|
||||
CREATE TABLE IF NOT EXISTS ledger (
|
||||
id INTEGER PRIMARY KEY,
|
||||
manifestarticle_id INTEGER NOT NULL,
|
||||
transaction_type TEXT NOT NULL,
|
||||
amount REAL NOT NULL,
|
||||
transaction_text TEXT NOT NULL,
|
||||
hash_version INTEGER NOT NULL,
|
||||
prev_hash TEXT,
|
||||
FOREIGN KEY (manifestarticle_id) REFERENCES manifestarticle(id) ON DELETE NO ACTION
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_NUMBERS = `
|
||||
CREATE TABLE IF NOT EXISTS numbers (
|
||||
id INTEGER PRIMARY KEY,
|
||||
company_id INTEGER NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
prefix TEXT NOT NULL DEFAULT '',
|
||||
padding INTEGER NOT NULL DEFAULT 0,
|
||||
"next" INTEGER NOT NULL DEFAULT 1,
|
||||
UNIQUE (company_id, "type"),
|
||||
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_COMPANYUSER = `
|
||||
CREATE TABLE IF NOT EXISTS companyuser (
|
||||
id INTEGER PRIMARY KEY,
|
||||
google_auth_id INTEGER NOT NULL,
|
||||
company_id INTEGER NOT NULL,
|
||||
UNIQUE (google_auth_id, company_id),
|
||||
FOREIGN KEY (google_auth_id) REFERENCES google_auth(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_ARTICLEHISTORY = `
|
||||
CREATE TABLE IF NOT EXISTS articlehistory (
|
||||
id INTEGER PRIMARY KEY,
|
||||
article_id INTEGER NOT NULL,
|
||||
companyuser_id INTEGER,
|
||||
"date" TEXT NOT NULL DEFAULT (${UTC_NOW}),
|
||||
"text" TEXT NOT NULL,
|
||||
FOREIGN KEY (article_id) REFERENCES article(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (companyuser_id) REFERENCES companyuser(id) ON DELETE SET NULL
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_ENTITYHISTORY = `
|
||||
CREATE TABLE IF NOT EXISTS entityhistory (
|
||||
id INTEGER PRIMARY KEY,
|
||||
entity_id INTEGER NOT NULL,
|
||||
companyuser_id INTEGER,
|
||||
"date" TEXT NOT NULL DEFAULT (${UTC_NOW}),
|
||||
"text" TEXT NOT NULL,
|
||||
FOREIGN KEY (entity_id) REFERENCES entity(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (companyuser_id) REFERENCES companyuser(id) ON DELETE NO ACTION
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_SYNCPOS = `
|
||||
CREATE TABLE IF NOT EXISTS syncpos (
|
||||
id INTEGER PRIMARY KEY,
|
||||
company_id INTEGER NOT NULL,
|
||||
paircode TEXT NOT NULL UNIQUE,
|
||||
token TEXT UNIQUE,
|
||||
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_COMPANYSETTING = `
|
||||
CREATE TABLE IF NOT EXISTS companysetting (
|
||||
id INTEGER PRIMARY KEY,
|
||||
company_id INTEGER NOT NULL,
|
||||
"key" TEXT NOT NULL,
|
||||
value TEXT NOT NULL,
|
||||
frontend INTEGER NOT NULL DEFAULT 0,
|
||||
writeonly INTEGER NOT NULL DEFAULT 0,
|
||||
UNIQUE (company_id, "key"),
|
||||
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_POSTERMINAL = `
|
||||
CREATE TABLE IF NOT EXISTS posterminal (
|
||||
id INTEGER PRIMARY KEY,
|
||||
company_id INTEGER NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
token TEXT,
|
||||
pairingpin TEXT NOT NULL,
|
||||
FOREIGN KEY (company_id) REFERENCES company(id) ON DELETE CASCADE
|
||||
);
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS UQ_posterminal_token
|
||||
ON posterminal(token) WHERE token IS NOT NULL;
|
||||
`;
|
||||
|
||||
export const INIT_POSTERMINALCATEGORY = `
|
||||
CREATE TABLE IF NOT EXISTS posterminalcategory (
|
||||
id INTEGER PRIMARY KEY,
|
||||
posterminal_id INTEGER NOT NULL,
|
||||
category_id INTEGER NOT NULL,
|
||||
UNIQUE (posterminal_id, category_id),
|
||||
FOREIGN KEY (posterminal_id) REFERENCES posterminal(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (category_id) REFERENCES category(id) ON DELETE NO ACTION
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_FILE = `
|
||||
CREATE TABLE IF NOT EXISTS "file" (
|
||||
id INTEGER PRIMARY KEY,
|
||||
hash TEXT NOT NULL,
|
||||
mimetype TEXT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
size INTEGER NOT NULL,
|
||||
created TEXT NOT NULL DEFAULT (${UTC_NOW}),
|
||||
modified TEXT NOT NULL DEFAULT (${UTC_NOW}),
|
||||
content BLOB NOT NULL,
|
||||
thumbavif BLOB,
|
||||
thumbx INTEGER,
|
||||
thumby INTEGER,
|
||||
meta TEXT
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_MANIFESTATTACHMENT = `
|
||||
CREATE TABLE IF NOT EXISTS manifestattachment (
|
||||
id INTEGER PRIMARY KEY,
|
||||
manifest_id INTEGER NOT NULL,
|
||||
file_id INTEGER NOT NULL,
|
||||
sort INTEGER NOT NULL DEFAULT 0,
|
||||
UNIQUE (manifest_id, sort),
|
||||
FOREIGN KEY (manifest_id) REFERENCES manifest(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (file_id) REFERENCES "file"(id) ON DELETE CASCADE
|
||||
);
|
||||
`;
|
||||
|
||||
export const INIT_MANIFESTATTACHMENT_TRIGGER = `
|
||||
CREATE TRIGGER IF NOT EXISTS TR_manifestattachment_delete_file
|
||||
AFTER DELETE ON manifestattachment
|
||||
BEGIN
|
||||
DELETE FROM "file"
|
||||
WHERE id = OLD.file_id
|
||||
AND NOT EXISTS (
|
||||
SELECT 1 FROM manifestattachment WHERE file_id = OLD.file_id
|
||||
);
|
||||
END;
|
||||
`;
|
||||
|
||||
/** DDL scripts in dependency order for SQLite schema initialization. */
|
||||
export const SCHEMA_SCRIPTS = [
|
||||
INIT_META,
|
||||
INIT_LANGUAGE,
|
||||
INIT_TAX,
|
||||
INIT_CATEGORY,
|
||||
INIT_PIC,
|
||||
INIT_COMPANY,
|
||||
INIT_GOOGLE_AUTH,
|
||||
INIT_CUSTOMERGROUP,
|
||||
INIT_ENTITY,
|
||||
INIT_ENTITY_COMPANY_NUMBER_UQ,
|
||||
INIT_ENTITYADDRESS,
|
||||
INIT_ENTITYCONTACT,
|
||||
INIT_UNIT,
|
||||
INIT_UNITTEXT,
|
||||
INIT_OPTIONSLIST,
|
||||
INIT_ARTICLELIST,
|
||||
INIT_BRAND,
|
||||
INIT_ARTICLE,
|
||||
INIT_ARTICLEEAN,
|
||||
INIT_ARTICLEPIC,
|
||||
INIT_BRANDPIC,
|
||||
INIT_ARTICLELISTARTICLE,
|
||||
INIT_OPTIONSLISTARTICLE,
|
||||
INIT_CATEGORYARTICLE,
|
||||
INIT_CATEGORYPIC,
|
||||
INIT_CATEGORYTEXT,
|
||||
INIT_ARTICLENAME,
|
||||
INIT_PRICE,
|
||||
INIT_ARTICLE_SUPPLIER,
|
||||
INIT_MANIFEST,
|
||||
INIT_MANIFESTARTICLE,
|
||||
INIT_LEDGER,
|
||||
INIT_NUMBERS,
|
||||
INIT_COMPANYUSER,
|
||||
INIT_ARTICLEHISTORY,
|
||||
INIT_ENTITYHISTORY,
|
||||
INIT_SYNCPOS,
|
||||
INIT_COMPANYSETTING,
|
||||
INIT_POSTERMINAL,
|
||||
INIT_POSTERMINALCATEGORY,
|
||||
INIT_FILE,
|
||||
INIT_MANIFESTATTACHMENT,
|
||||
INIT_MANIFESTATTACHMENT_TRIGGER,
|
||||
];
|
||||
Reference in New Issue
Block a user