-- CreateTable CREATE TABLE "users" ( "id" TEXT NOT NULL PRIMARY KEY, "email" TEXT NOT NULL, "password_hash" TEXT, "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); -- CreateTable CREATE TABLE "user_states" ( "id" TEXT NOT NULL PRIMARY KEY, "user_id" TEXT NOT NULL, "attention_level" INTEGER NOT NULL DEFAULT 50, "emotion_stability" INTEGER NOT NULL DEFAULT 50, "stress_level" INTEGER NOT NULL DEFAULT 50, "practice_stage" INTEGER NOT NULL DEFAULT 0, "consistency_score" INTEGER NOT NULL DEFAULT 0, "streak_days" INTEGER NOT NULL DEFAULT 0, "total_sessions_completed" INTEGER NOT NULL DEFAULT 0, "onboarding_completed" BOOLEAN NOT NULL DEFAULT false, "onboarding_variant" TEXT, "timezone" TEXT NOT NULL DEFAULT 'Asia/Shanghai', "last_session_date" DATETIME, "updated_at" DATETIME NOT NULL, CONSTRAINT "user_states_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE ); -- CreateTable CREATE TABLE "analytics_events" ( "id" TEXT NOT NULL PRIMARY KEY, "user_id" TEXT NOT NULL, "event" TEXT NOT NULL, "metadata" TEXT NOT NULL DEFAULT '{}', "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); -- CreateTable CREATE TABLE "sessions" ( "id" TEXT NOT NULL PRIMARY KEY, "user_id" TEXT NOT NULL, "task_type" TEXT NOT NULL, "task_description" TEXT NOT NULL, "duration_seconds" INTEGER NOT NULL DEFAULT 300, "completed" BOOLEAN NOT NULL DEFAULT false, "focus_score" INTEGER, "emotion_score" INTEGER, "notes" TEXT, "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "sessions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE ); -- CreateTable CREATE TABLE "tasks" ( "id" TEXT NOT NULL PRIMARY KEY, "user_id" TEXT NOT NULL, "type" TEXT NOT NULL, "difficulty" INTEGER NOT NULL DEFAULT 1, "duration" INTEGER NOT NULL DEFAULT 5, "description" TEXT NOT NULL, "reason_json" TEXT NOT NULL DEFAULT '{}', "status" TEXT NOT NULL DEFAULT 'pending', "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "tasks_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE ); -- CreateTable CREATE TABLE "reward_events" ( "id" TEXT NOT NULL PRIMARY KEY, "user_id" TEXT NOT NULL, "type" TEXT NOT NULL, "message" TEXT NOT NULL, "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "reward_events_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE ); -- CreateTable CREATE TABLE "weekly_summaries" ( "id" TEXT NOT NULL PRIMARY KEY, "user_id" TEXT NOT NULL, "summary" TEXT, "week_start" DATETIME NOT NULL, "created_at" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "weekly_summaries_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users" ("id") ON DELETE CASCADE ON UPDATE CASCADE ); -- CreateIndex CREATE UNIQUE INDEX "users_email_key" ON "users"("email"); -- CreateIndex CREATE UNIQUE INDEX "user_states_user_id_key" ON "user_states"("user_id"); -- CreateIndex CREATE INDEX "analytics_events_user_id_created_at_idx" ON "analytics_events"("user_id", "created_at"); -- CreateIndex CREATE INDEX "analytics_events_event_created_at_idx" ON "analytics_events"("event", "created_at"); -- CreateIndex CREATE INDEX "sessions_user_id_created_at_idx" ON "sessions"("user_id", "created_at"); -- CreateIndex CREATE INDEX "tasks_user_id_created_at_idx" ON "tasks"("user_id", "created_at"); -- CreateIndex CREATE INDEX "tasks_user_id_status_idx" ON "tasks"("user_id", "status"); -- CreateIndex CREATE INDEX "reward_events_user_id_created_at_idx" ON "reward_events"("user_id", "created_at"); -- CreateIndex CREATE UNIQUE INDEX "weekly_summaries_user_id_key" ON "weekly_summaries"("user_id");