Benutzer, Ticketzuweißungen
This commit is contained in:
71
server/db.js
71
server/db.js
@@ -128,7 +128,7 @@ if (!tbl) {
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"username" TEXT NOT NULL UNIQUE,
|
||||
"password_hash" TEXT,
|
||||
"role" TEXT NOT NULL DEFAULT 'user' CHECK ("role" IN ('admin', 'user')),
|
||||
"role" TEXT NOT NULL DEFAULT 'after_sales' CHECK ("role" IN ('admin', 'viewer', 'after_sales')),
|
||||
"source" TEXT NOT NULL DEFAULT 'local' CHECK ("source" IN ('local', 'ldap')),
|
||||
"ldap_dn" TEXT,
|
||||
"firstname" TEXT,
|
||||
@@ -149,6 +149,65 @@ if (!userCols.some((c) => c.name === 'lastname')) {
|
||||
db.exec('ALTER TABLE users ADD COLUMN lastname TEXT');
|
||||
}
|
||||
|
||||
const usersTableSql = db
|
||||
.prepare(
|
||||
"SELECT sql FROM sqlite_master WHERE type='table' AND name='users'",
|
||||
)
|
||||
.get()?.sql;
|
||||
if (usersTableSql && !usersTableSql.includes('after_sales')) {
|
||||
db.exec('BEGIN');
|
||||
try {
|
||||
db.exec(`
|
||||
CREATE TABLE "users_new" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"username" TEXT NOT NULL UNIQUE,
|
||||
"password_hash" TEXT,
|
||||
"role" TEXT NOT NULL DEFAULT 'after_sales' CHECK ("role" IN ('admin', 'viewer', 'after_sales')),
|
||||
"source" TEXT NOT NULL DEFAULT 'local' CHECK ("source" IN ('local', 'ldap')),
|
||||
"ldap_dn" TEXT,
|
||||
"firstname" TEXT,
|
||||
"lastname" TEXT,
|
||||
"active" INTEGER NOT NULL DEFAULT 1 CHECK ("active" IN (0, 1)),
|
||||
"created_at" TEXT NOT NULL DEFAULT (datetime('now')),
|
||||
"updated_at" TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
`);
|
||||
db.exec(`
|
||||
INSERT INTO users_new (
|
||||
id, username, password_hash, role, source, ldap_dn, firstname, lastname, active, created_at, updated_at
|
||||
)
|
||||
SELECT
|
||||
id,
|
||||
username,
|
||||
password_hash,
|
||||
CASE
|
||||
WHEN role = 'user' THEN 'after_sales'
|
||||
WHEN role IN ('admin', 'viewer', 'after_sales') THEN role
|
||||
ELSE 'after_sales'
|
||||
END,
|
||||
source,
|
||||
ldap_dn,
|
||||
firstname,
|
||||
lastname,
|
||||
active,
|
||||
created_at,
|
||||
updated_at
|
||||
FROM users;
|
||||
`);
|
||||
db.exec('DROP TABLE users');
|
||||
db.exec('ALTER TABLE users_new RENAME TO users');
|
||||
db.exec('CREATE INDEX IF NOT EXISTS users_username_idx ON "users" ("username")');
|
||||
db.exec('COMMIT');
|
||||
} catch (e) {
|
||||
try {
|
||||
db.exec('ROLLBACK');
|
||||
} catch {
|
||||
/* ignore */
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
const tblSet = db
|
||||
.prepare(
|
||||
"SELECT name FROM sqlite_master WHERE type='table' AND name='app_settings'",
|
||||
@@ -276,4 +335,14 @@ if (ticketCols2.some((c) => c.name === 'sla_anchor_at')) {
|
||||
).run();
|
||||
}
|
||||
|
||||
const ticketCols3 = db.prepare('PRAGMA table_info(tickets)').all();
|
||||
if (!ticketCols3.some((c) => c.name === 'assigned_user_id')) {
|
||||
db.exec(
|
||||
'ALTER TABLE tickets ADD COLUMN assigned_user_id TEXT REFERENCES users(id) ON DELETE SET NULL ON UPDATE CASCADE',
|
||||
);
|
||||
db.exec(
|
||||
'CREATE INDEX IF NOT EXISTS tickets_assigned_user_id_idx ON tickets (assigned_user_id)',
|
||||
);
|
||||
}
|
||||
|
||||
export default db;
|
||||
|
||||
Reference in New Issue
Block a user