Files
nat-as-server/schema.sql
Tom Hempel c86768e391 revert 52d4ef42dc
revert updated api
2026-05-22 12:27:12 +00:00

133 lines
4.4 KiB
SQL

PRAGMA foreign_keys = ON;
CREATE TABLE IF NOT EXISTS users (
userID TEXT NOT NULL PRIMARY KEY,
username TEXT NOT NULL UNIQUE,
passwordHash TEXT NOT NULL,
role TEXT NOT NULL CHECK(role IN ('admin','supervisor','coach')),
entityID TEXT NOT NULL,
mustChangePassword INTEGER NOT NULL DEFAULT 1,
createdAt INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS admin (
adminID TEXT NOT NULL PRIMARY KEY,
username TEXT NOT NULL,
location TEXT NOT NULL DEFAULT ''
);
CREATE TABLE IF NOT EXISTS supervisor (
supervisorID TEXT NOT NULL PRIMARY KEY,
username TEXT NOT NULL,
location TEXT NOT NULL DEFAULT ''
);
CREATE TABLE IF NOT EXISTS coach (
coachID TEXT NOT NULL PRIMARY KEY,
supervisorID TEXT NOT NULL,
username TEXT NOT NULL,
FOREIGN KEY(supervisorID) REFERENCES supervisor(supervisorID)
);
CREATE TABLE IF NOT EXISTS client (
clientCode TEXT NOT NULL PRIMARY KEY,
coachID TEXT NOT NULL,
FOREIGN KEY(coachID) REFERENCES coach(coachID)
);
CREATE TABLE IF NOT EXISTS questionnaire (
questionnaireID TEXT NOT NULL PRIMARY KEY,
name TEXT NOT NULL DEFAULT '',
version TEXT NOT NULL DEFAULT '',
state TEXT NOT NULL DEFAULT '',
orderIndex INTEGER NOT NULL DEFAULT 0,
showPoints INTEGER NOT NULL DEFAULT 0,
conditionJson TEXT NOT NULL DEFAULT '{}'
);
CREATE TABLE IF NOT EXISTS question (
questionID TEXT NOT NULL PRIMARY KEY,
questionnaireID TEXT NOT NULL,
defaultText TEXT NOT NULL DEFAULT '',
type TEXT NOT NULL DEFAULT '',
orderIndex INTEGER NOT NULL DEFAULT 0,
isRequired INTEGER NOT NULL DEFAULT 0,
configJson TEXT NOT NULL DEFAULT '{}',
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID)
);
CREATE TABLE IF NOT EXISTS answer_option (
answerOptionID TEXT NOT NULL PRIMARY KEY,
questionID TEXT NOT NULL,
defaultText TEXT NOT NULL DEFAULT '',
points INTEGER NOT NULL DEFAULT 0,
orderIndex INTEGER NOT NULL DEFAULT 0,
nextQuestionId TEXT NOT NULL DEFAULT '',
FOREIGN KEY(questionID) REFERENCES question(questionID)
);
CREATE TABLE IF NOT EXISTS client_answer (
clientCode TEXT NOT NULL,
questionID TEXT NOT NULL,
answerOptionID TEXT,
freeTextValue TEXT,
numericValue REAL,
answeredAt INTEGER,
PRIMARY KEY (clientCode, questionID),
FOREIGN KEY(clientCode) REFERENCES client(clientCode),
FOREIGN KEY(questionID) REFERENCES question(questionID),
FOREIGN KEY(answerOptionID) REFERENCES answer_option(answerOptionID)
);
CREATE TABLE IF NOT EXISTS completed_questionnaire (
clientCode TEXT NOT NULL,
questionnaireID TEXT NOT NULL,
assignedByCoach TEXT,
status TEXT NOT NULL DEFAULT '',
startedAt INTEGER,
completedAt INTEGER,
sumPoints INTEGER,
PRIMARY KEY (clientCode, questionnaireID),
FOREIGN KEY(clientCode) REFERENCES client(clientCode),
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID),
FOREIGN KEY(assignedByCoach) REFERENCES coach(coachID)
);
CREATE TABLE IF NOT EXISTS question_translation (
questionID TEXT NOT NULL,
languageCode TEXT NOT NULL,
text TEXT NOT NULL DEFAULT '',
PRIMARY KEY (questionID, languageCode),
FOREIGN KEY(questionID) REFERENCES question(questionID)
);
CREATE TABLE IF NOT EXISTS answer_option_translation (
answerOptionID TEXT NOT NULL,
languageCode TEXT NOT NULL,
text TEXT NOT NULL DEFAULT '',
PRIMARY KEY (answerOptionID, languageCode),
FOREIGN KEY(answerOptionID) REFERENCES answer_option(answerOptionID)
);
CREATE TABLE IF NOT EXISTS string_translation (
stringKey TEXT NOT NULL,
languageCode TEXT NOT NULL,
text TEXT NOT NULL DEFAULT '',
PRIMARY KEY (stringKey, languageCode)
);
CREATE TABLE IF NOT EXISTS language (
languageCode TEXT NOT NULL PRIMARY KEY,
name TEXT NOT NULL DEFAULT ''
);
CREATE TABLE IF NOT EXISTS session (
token TEXT NOT NULL PRIMARY KEY,
userID TEXT NOT NULL,
role TEXT NOT NULL,
entityID TEXT NOT NULL DEFAULT '',
createdAt INTEGER NOT NULL,
expiresAt INTEGER NOT NULL,
temp INTEGER NOT NULL DEFAULT 0
);