54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
import sqlite3
|
|
|
|
from backend.database.migrations.runner import Migration
|
|
|
|
|
|
def upgrade(connection: sqlite3.Connection) -> None:
|
|
connection.execute(
|
|
"""
|
|
CREATE TABLE heaven_readings (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
mode TEXT NOT NULL CHECK (mode IN ('trend', 'fortune', 'heart')),
|
|
reading_date TEXT NOT NULL,
|
|
subject_key TEXT NOT NULL DEFAULT '',
|
|
result_json TEXT NOT NULL,
|
|
interpretation TEXT NOT NULL DEFAULT '',
|
|
interpretation_status TEXT NOT NULL DEFAULT 'pending' CHECK (
|
|
interpretation_status IN ('pending', 'complete', 'stopped', 'error')
|
|
),
|
|
request_id TEXT REFERENCES llm_requests(id) ON DELETE SET NULL,
|
|
created_at TEXT NOT NULL,
|
|
updated_at TEXT NOT NULL
|
|
)
|
|
"""
|
|
)
|
|
connection.execute(
|
|
"""
|
|
CREATE INDEX heaven_readings_scope_idx
|
|
ON heaven_readings(user_id, mode, reading_date, id)
|
|
"""
|
|
)
|
|
connection.execute(
|
|
"""
|
|
CREATE UNIQUE INDEX heaven_fortune_daily_idx
|
|
ON heaven_readings(user_id, reading_date)
|
|
WHERE mode = 'fortune'
|
|
"""
|
|
)
|
|
|
|
|
|
def downgrade(connection: sqlite3.Connection) -> None:
|
|
connection.execute("DROP TABLE heaven_readings")
|
|
|
|
|
|
MIGRATION = Migration(
|
|
version=9,
|
|
name="create_heaven_readings",
|
|
signature="heaven:v2:account-readings-unique-daily-fortune",
|
|
upgrade=upgrade,
|
|
downgrade=downgrade,
|
|
)
|