Feature: Tierarzt-Bewertungen — Sterne-Rating pro Praxis mit Detail-Modal (SW by-v700)
This commit is contained in:
parent
c5030024b0
commit
40de0f38aa
5 changed files with 461 additions and 5 deletions
|
|
@ -573,6 +573,9 @@ def _migrate(conn_factory):
|
|||
("users", "password_reset_expires", "TEXT"),
|
||||
# Fell-Typ für personalisierte Wetter-Hinweise
|
||||
("dogs", "fell_typ", "TEXT"), # kurz|mittel|lang|drahtaar|doppel|nackt
|
||||
# Tierarzt-Bewertungen: Durchschnitt + Anzahl am Tierarzt-Datensatz
|
||||
("tieraerzte", "avg_rating", "REAL DEFAULT 0"),
|
||||
("tieraerzte", "anz_bewertungen", "INTEGER DEFAULT 0"),
|
||||
]
|
||||
with conn_factory() as conn:
|
||||
for table, column, col_type in migrations:
|
||||
|
|
@ -1983,3 +1986,75 @@ def _migrate(conn_factory):
|
|||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_recurring_user ON recurring_expenses(user_id, aktiv);
|
||||
""")
|
||||
|
||||
# ---- Tierarzt-Bewertungen ----
|
||||
conn.executescript("""
|
||||
CREATE TABLE IF NOT EXISTS tierarzt_bewertungen (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
tierarzt_id INTEGER NOT NULL REFERENCES tieraerzte(id) ON DELETE CASCADE,
|
||||
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
gesamt INTEGER NOT NULL CHECK(gesamt BETWEEN 1 AND 5),
|
||||
wartezeit INTEGER CHECK(wartezeit BETWEEN 1 AND 5),
|
||||
freundlichkeit INTEGER CHECK(freundlichkeit BETWEEN 1 AND 5),
|
||||
kompetenz INTEGER CHECK(kompetenz BETWEEN 1 AND 5),
|
||||
text TEXT,
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
||||
UNIQUE(tierarzt_id, user_id)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_tierarzt_bew_arzt
|
||||
ON tierarzt_bewertungen(tierarzt_id);
|
||||
""")
|
||||
|
||||
# ---- Feature: Foto-Challenge der Woche ----
|
||||
conn.executescript("""
|
||||
CREATE TABLE IF NOT EXISTS foto_challenge (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
thema TEXT NOT NULL,
|
||||
beschreibung TEXT,
|
||||
start_date TEXT NOT NULL,
|
||||
end_date TEXT NOT NULL,
|
||||
created_by INTEGER REFERENCES users(id),
|
||||
created_at TEXT DEFAULT (datetime('now'))
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS challenge_submissions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
challenge_id INTEGER REFERENCES foto_challenge(id) ON DELETE CASCADE,
|
||||
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
||||
dog_id INTEGER REFERENCES dogs(id) ON DELETE SET NULL,
|
||||
foto_url TEXT NOT NULL,
|
||||
caption TEXT,
|
||||
votes INTEGER DEFAULT 0,
|
||||
created_at TEXT DEFAULT (datetime('now')),
|
||||
UNIQUE(challenge_id, user_id)
|
||||
);
|
||||
CREATE TABLE IF NOT EXISTS challenge_votes (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
submission_id INTEGER REFERENCES challenge_submissions(id) ON DELETE CASCADE,
|
||||
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
||||
UNIQUE(submission_id, user_id)
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_challenge_sub_chal
|
||||
ON challenge_submissions(challenge_id, created_at DESC);
|
||||
""")
|
||||
logger.info("Migration: Foto-Challenge-Tabellen bereit.")
|
||||
|
||||
# ---- Feature: Gassi-Zeiten-Pool ----
|
||||
conn.executescript("""
|
||||
CREATE TABLE IF NOT EXISTS gassi_zeiten (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
||||
dog_id INTEGER REFERENCES dogs(id) ON DELETE SET NULL,
|
||||
wochentage TEXT NOT NULL,
|
||||
uhrzeit TEXT NOT NULL,
|
||||
ort_name TEXT,
|
||||
lat REAL,
|
||||
lon REAL,
|
||||
radius_m INTEGER DEFAULT 500,
|
||||
notiz TEXT,
|
||||
aktiv INTEGER DEFAULT 1,
|
||||
created_at TEXT DEFAULT (datetime('now'))
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_gassi_zeiten_user
|
||||
ON gassi_zeiten(user_id, aktiv);
|
||||
""")
|
||||
logger.info("Migration: Gassi-Zeiten-Tabelle bereit.")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue