Files
InnerOS/prisma/migrations/20260617062135_add_analytics_and_user_fields/migration.sql
T
jackyu66gitandClaude Opus 4.7 6530b20172 feat: guided light meditation + Edge TTS neural voice audio
- Add continuous guided light-body-scan meditation (16 segments, 97% coverage)
- Edge TTS API endpoint with Xiaoxiao neural voice at -40% rate
- Pre-generated chime WAVs and guidance MP3s in public/audio/
- Mute toggle in practice page, sequenced non-overlapping audio
- Fix middleware to serve /audio and /api/audio/tts without auth
- All LLM output localized to Chinese; fix blank home/settings pages
- DeepSeek API compat: json_object, increased max_tokens
- Analytics, cron reminders, onboarding flow fixes

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-17 20:08:29 +08:00

112 lines
3.9 KiB
SQL

-- 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");