添加账号系统

This commit is contained in:
2026-04-17 12:58:38 +08:00
parent 032e207888
commit d3b03cecf2
27 changed files with 931 additions and 254 deletions
@@ -0,0 +1,59 @@
/*
Warnings:
- A unique constraint covering the columns `[username]` on the table `CaregiverAccount` will be added. If there are existing duplicate values, this will fail.
*/
-- AlterTable
ALTER TABLE "CaregiverAccount" ADD COLUMN "passwordHash" TEXT,
ADD COLUMN "username" TEXT;
-- CreateTable
CREATE TABLE "CaregiverSession" (
"id" TEXT NOT NULL,
"caregiverId" TEXT NOT NULL,
"sessionToken" TEXT NOT NULL,
"userAgent" TEXT,
"lastSeenAt" TIMESTAMP(3),
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "CaregiverSession_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "CaregiverSession_sessionToken_key" ON "CaregiverSession"("sessionToken");
-- CreateIndex
CREATE INDEX "CaregiverSession_caregiverId_updatedAt_idx" ON "CaregiverSession"("caregiverId", "updatedAt" DESC);
-- CreateIndex
CREATE UNIQUE INDEX "CaregiverAccount_username_key" ON "CaregiverAccount"("username");
-- MigrateData
INSERT INTO "CaregiverSession" (
"id",
"caregiverId",
"sessionToken",
"lastSeenAt",
"createdAt",
"updatedAt"
)
SELECT
CONCAT('legacy_', md5("id" || ':' || "sessionToken")),
"id",
"sessionToken",
NOW(),
NOW(),
NOW()
FROM "CaregiverAccount"
WHERE "sessionToken" IS NOT NULL;
-- DropIndex
DROP INDEX "CaregiverAccount_sessionToken_key";
-- AlterTable
ALTER TABLE "CaregiverAccount" DROP COLUMN "sessionToken";
-- AddForeignKey
ALTER TABLE "CaregiverSession" ADD CONSTRAINT "CaregiverSession_caregiverId_fkey" FOREIGN KEY ("caregiverId") REFERENCES "CaregiverAccount"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+22 -7
View File
@@ -46,16 +46,31 @@ enum ToolCallStatus {
}
model CaregiverAccount {
id String @id @default(cuid())
sessionToken String @unique
nickname String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
bindings DeviceBinding[]
messages FamilyMessage[]
id String @id @default(cuid())
username String? @unique
passwordHash String?
nickname String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
sessions CaregiverSession[]
bindings DeviceBinding[]
messages FamilyMessage[]
pushSubscriptions PushSubscription[]
}
model CaregiverSession {
id String @id @default(cuid())
caregiverId String
sessionToken String @unique
userAgent String?
lastSeenAt DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
caregiver CaregiverAccount @relation(fields: [caregiverId], references: [id], onDelete: Cascade)
@@index([caregiverId, updatedAt(sort: Desc)])
}
model ElderDevice {
id String @id @default(cuid())
deviceUuid String @unique