better ux with search functionality

This commit is contained in:
2026-05-28 10:58:31 +02:00
parent 8915c8d182
commit b049a9ab9f
10 changed files with 997 additions and 252 deletions

View File

@ -6,8 +6,12 @@ from pathlib import Path
PREFIX = "dev_"
PASSWORD = "socialvrlab"
CLIENT_PREFIX = "DEV-CL-"
SCALE = 5
QUESTIONNAIRE_IDS = [
# Newest questionnaire bundle (repo root); IDs are read from this file when present.
BUNDLE_PATH = Path(__file__).resolve().parents[2] / "questionnaires_bundle_2026-05-28.json"
FALLBACK_QUESTIONNAIRE_IDS = [
"questionnaire_1_demographic_information",
"questionnaire_2_rhs",
"questionnaire_3_integration_index",
@ -16,15 +20,29 @@ QUESTIONNAIRE_IDS = [
"questionnaire_6_follow_up_survey",
]
PER_QUESTIONNAIRE = 40
NUM_ADMINS = 2
NUM_SUPERVISORS = 3
NUM_COACHES = 20
NUM_CLIENTS = 100
CLIENTS_WITHOUT_COMPLETIONS = 15 # DEV-CL-0086 .. 0100
PER_QUESTIONNAIRE = 40 * SCALE
NUM_ADMINS = 2 * SCALE
NUM_SUPERVISORS = 3 * SCALE
NUM_COACHES = 20 * SCALE
NUM_CLIENTS = 100 * SCALE
CLIENTS_WITHOUT_COMPLETIONS = 15 * SCALE
def load_questionnaire_ids() -> list[str]:
if not BUNDLE_PATH.is_file():
return FALLBACK_QUESTIONNAIRE_IDS
bundle = json.loads(BUNDLE_PATH.read_text(encoding="utf-8"))
ids = [
item["questionnaire"]["questionnaireID"]
for item in bundle.get("questionnaires", [])
if item.get("questionnaire", {}).get("questionnaireID")
]
return ids or FALLBACK_QUESTIONNAIRE_IDS
def main():
questionnaire_ids = load_questionnaire_ids()
admins = [
{"username": f"{PREFIX}admin_{i}", "location": f"Dev Admin Standort {i}"}
for i in range(1, NUM_ADMINS + 1)
@ -59,7 +77,7 @@ def main():
completions = []
slot = 0
for qn_id in QUESTIONNAIRE_IDS:
for qn_id in questionnaire_ids:
for _ in range(PER_QUESTIONNAIRE):
client_code = clients_with_data[slot % len(clients_with_data)]
completions.append({
@ -68,17 +86,25 @@ def main():
})
slot += 1
bundle_note = BUNDLE_PATH.name if BUNDLE_PATH.is_file() else "fallback questionnaire list"
fixture = {
"fixtureVersion": 1,
"description": "Dev/test users, clients, and completed questionnaires. Skip-on-conflict import; password socialvrlab.",
"description": (
f"Dev/test users, clients, and completed questionnaires ({SCALE}x scale). "
f"Questionnaires aligned with {bundle_note}. Skip-on-conflict import; password socialvrlab."
),
"prefix": PREFIX,
"defaultPassword": PASSWORD,
"sourceBundle": bundle_note,
"questionnaireIDs": questionnaire_ids,
"admins": admins,
"supervisors": supervisors,
"coaches": coaches,
"clients": clients,
"completions": completions,
"stats": {
"scale": SCALE,
"admins": len(admins),
"supervisors": len(supervisors),
"coaches": len(coaches),
@ -86,6 +112,7 @@ def main():
"clientsWithoutCompletions": CLIENTS_WITHOUT_COMPLETIONS,
"completions": len(completions),
"perQuestionnaire": PER_QUESTIONNAIRE,
"questionnaires": len(questionnaire_ids),
},
}