enhanced questionnaire version handling and handling uploads from outdated questionnaires through automatic revisioning and checks
Some checks failed
PHPUnit / test (push) Has been cancelled

This commit is contained in:
2026-06-12 21:38:39 +02:00
parent 5dff24a232
commit b4d4de72f4
17 changed files with 1289 additions and 209 deletions

View File

@ -45,24 +45,37 @@ CREATE TABLE IF NOT EXISTS questionnaire_category (
);
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 '{}',
categoryKey TEXT NOT NULL DEFAULT ''
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 '{}',
categoryKey TEXT NOT NULL DEFAULT '',
structureRevision INTEGER NOT NULL DEFAULT 1,
structureChangedAt INTEGER NOT NULL DEFAULT 0
);
CREATE TABLE IF NOT EXISTS questionnaire_structure_snapshot (
questionnaireID TEXT NOT NULL,
structureRevision INTEGER NOT NULL,
createdAt INTEGER NOT NULL,
manifestJson TEXT NOT NULL DEFAULT '{}',
PRIMARY KEY (questionnaireID, structureRevision),
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID) ON DELETE CASCADE
);
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 '{}',
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 '{}',
retiredAt INTEGER NOT NULL DEFAULT 0,
retiredInRevision INTEGER NOT NULL DEFAULT 0,
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID)
);
@ -73,6 +86,7 @@ CREATE TABLE IF NOT EXISTS answer_option (
points INTEGER NOT NULL DEFAULT 0,
orderIndex INTEGER NOT NULL DEFAULT 0,
nextQuestionId TEXT NOT NULL DEFAULT '',
retiredAt INTEGER NOT NULL DEFAULT 0,
FOREIGN KEY(questionID) REFERENCES question(questionID)
);
@ -142,18 +156,20 @@ CREATE TABLE IF NOT EXISTS session (
);
CREATE TABLE IF NOT EXISTS questionnaire_submission (
submissionID TEXT NOT NULL PRIMARY KEY,
clientCode TEXT NOT NULL,
questionnaireID TEXT NOT NULL,
version INTEGER NOT NULL,
submittedAt INTEGER NOT NULL,
submittedByUserID TEXT NOT NULL DEFAULT '',
submittedByRole TEXT NOT NULL DEFAULT '',
assignedByCoach TEXT,
status TEXT NOT NULL DEFAULT '',
startedAt INTEGER,
completedAt INTEGER,
sumPoints INTEGER,
submissionID TEXT NOT NULL PRIMARY KEY,
clientCode TEXT NOT NULL,
questionnaireID TEXT NOT NULL,
version INTEGER NOT NULL,
submittedAt INTEGER NOT NULL,
submittedByUserID TEXT NOT NULL DEFAULT '',
submittedByRole TEXT NOT NULL DEFAULT '',
assignedByCoach TEXT,
status TEXT NOT NULL DEFAULT '',
startedAt INTEGER,
completedAt INTEGER,
sumPoints INTEGER,
structureRevision INTEGER NOT NULL DEFAULT 1,
structureSnapshotJson TEXT NOT NULL DEFAULT '{}',
FOREIGN KEY(clientCode) REFERENCES client(clientCode),
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID),
FOREIGN KEY(assignedByCoach) REFERENCES coach(coachID),