mirror of
https://github.com/ZeroCatDev/ClassworksKV.git
synced 2026-03-21 09:53:11 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b01c2c2598 | ||
|
|
1b3366ac23 | ||
|
|
688bdd6214 | ||
|
|
3d6679a7c2 | ||
|
|
9c8da8091c | ||
|
|
f0b902e9ad | ||
|
|
2dfe698461 |
12
.github/workflows/docker-publish.yml
vendored
12
.github/workflows/docker-publish.yml
vendored
@ -10,6 +10,7 @@ on:
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
REGISTRY: ghcr.io
|
REGISTRY: ghcr.io
|
||||||
|
DOCKERHUB_USERNAME: zerocatdev
|
||||||
OWNER: zerocatdev
|
OWNER: zerocatdev
|
||||||
PROJECT_NAME: classworks
|
PROJECT_NAME: classworks
|
||||||
concurrency:
|
concurrency:
|
||||||
@ -38,11 +39,20 @@ jobs:
|
|||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Log in to Docker Hub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ vars.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Extract Docker metadata
|
- name: Extract Docker metadata
|
||||||
id: meta
|
id: meta
|
||||||
uses: docker/metadata-action@v5
|
uses: docker/metadata-action@v5
|
||||||
with:
|
with:
|
||||||
images: ${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.PROJECT_NAME }}
|
images: |
|
||||||
|
${{ env.REGISTRY }}/${{ env.OWNER }}/${{ env.PROJECT_NAME }}
|
||||||
|
${{ vars.DOCKERHUB_USERNAME }}/${{ env.PROJECT_NAME }}
|
||||||
tags: |
|
tags: |
|
||||||
type=ref,event=branch
|
type=ref,event=branch
|
||||||
type=ref,event=pr
|
type=ref,event=pr
|
||||||
|
|||||||
@ -72,9 +72,9 @@ export const oauthProviders = {
|
|||||||
clientId: process.env.DLASS_CLIENT_ID,
|
clientId: process.env.DLASS_CLIENT_ID,
|
||||||
clientSecret: process.env.DLASS_CLIENT_SECRET,
|
clientSecret: process.env.DLASS_CLIENT_SECRET,
|
||||||
// Casdoor 标准端点
|
// Casdoor 标准端点
|
||||||
authorizationURL: "https://auth.wiki.forum/login/oauth/authorize",
|
authorizationURL: "https://auth.lingloft.cn/login/oauth/authorize",
|
||||||
tokenURL: "https://auth.wiki.forum/api/login/oauth/access_token",
|
tokenURL: "https://auth.lingloft.cn/api/login/oauth/access_token",
|
||||||
userInfoURL: "https://auth.wiki.forum/api/userinfo",
|
userInfoURL: "https://auth.lingloft.cn/api/userinfo",
|
||||||
scope: "openid profile email offline_access",
|
scope: "openid profile email offline_access",
|
||||||
// 展示相关
|
// 展示相关
|
||||||
name: "dlass",
|
name: "dlass",
|
||||||
|
|||||||
@ -20,7 +20,7 @@ const config: runtime.GetPrismaClientConfig = {
|
|||||||
"clientVersion": "7.3.0",
|
"clientVersion": "7.3.0",
|
||||||
"engineVersion": "9d6ad21cbbceab97458517b147a6a09ff43aa735",
|
"engineVersion": "9d6ad21cbbceab97458517b147a6a09ff43aa735",
|
||||||
"activeProvider": "postgresql",
|
"activeProvider": "postgresql",
|
||||||
"inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n}\n\nmodel Account {\n id String @id(map: \"idx_18303_PRIMARY\") @default(cuid()) @db.VarChar(191)\n provider String @db.VarChar(191)\n providerId String @db.VarChar(191)\n email String? @db.VarChar(191)\n name String? @db.VarChar(191)\n avatarUrl String? @db.VarChar(191)\n providerData Json? @db.Json\n accessToken String?\n createdAt DateTime @default(now()) @db.Timestamptz(6)\n updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)\n refreshToken String?\n refreshTokenExpiry DateTime? @db.Timestamptz(6)\n tokenVersion Int @default(1)\n\n devices Device[]\n\n @@unique([provider, providerId], map: \"idx_18303_Account_provider_providerId_key\")\n}\n\nmodel AppInstall {\n id String @id(map: \"idx_18310_PRIMARY\") @default(cuid()) @db.VarChar(191)\n deviceId Int\n appId String @db.VarChar(191)\n token String @unique(map: \"idx_18310_AppInstall_token_key\") @db.VarChar(191)\n note String? @db.VarChar(191)\n installedAt DateTime @default(now()) @db.Timestamptz(6)\n updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)\n deviceType String? @db.VarChar(191)\n isReadOnly Boolean @default(false)\n\n device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)\n\n @@index([deviceId], map: \"idx_18310_AppInstall_deviceId_fkey\")\n}\n\nmodel AutoAuth {\n id String @id(map: \"idx_18317_PRIMARY\") @default(cuid()) @db.VarChar(191)\n deviceId Int\n password String? @db.VarChar(191)\n deviceType String? @db.VarChar(191)\n isReadOnly Boolean @default(false)\n createdAt DateTime @default(now()) @db.Timestamptz(6)\n updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)\n\n device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)\n\n @@unique([deviceId, password], map: \"idx_18317_AutoAuth_deviceId_password_key\")\n}\n\nmodel Device {\n id Int @id(map: \"idx_18324_PRIMARY\") @default(autoincrement())\n uuid String @unique(map: \"idx_18324_Device_uuid_key\") @db.VarChar(191)\n name String? @db.VarChar(191)\n accountId String? @db.VarChar(191)\n createdAt DateTime @default(now()) @db.Timestamptz(6)\n updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)\n password String? @db.VarChar(191)\n passwordHint String? @db.VarChar(191)\n namespace String? @unique(map: \"idx_18324_Device_namespace_key\") @db.VarChar(191)\n\n // 关联关系\n account Account? @relation(fields: [accountId], references: [id], onDelete: SetNull)\n appInstalls AppInstall[]\n kvStore KVStore[] // 设备相关的KV存储\n autoAuths AutoAuth[] // 自动授权配置\n\n @@index([accountId], map: \"idx_18324_Device_accountId_fkey\")\n}\n\nmodel KVStore {\n deviceId Int\n key String @db.VarChar(191)\n value Json @db.Json\n creatorIp String? @default(\"\") @db.VarChar(191)\n createdAt DateTime @default(now()) @db.Timestamptz(6)\n updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)\n\n device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)\n\n @@id([deviceId, key], map: \"idx_18330_PRIMARY\")\n}\n",
|
"inlineSchema": "generator client {\n provider = \"prisma-client\"\n output = \"../generated/prisma\"\n}\n\ndatasource db {\n provider = \"postgresql\"\n relationMode = \"prisma\"\n}\n\nmodel Account {\n id String @id @default(cuid()) @db.VarChar(191)\n provider String @db.VarChar(191)\n providerId String @db.VarChar(191)\n email String? @db.VarChar(191)\n name String? @db.VarChar(191)\n avatarUrl String? @db.VarChar(191)\n providerData Json? @db.Json\n accessToken String?\n createdAt DateTime @default(now()) @db.Timestamptz(6)\n updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)\n refreshToken String?\n refreshTokenExpiry DateTime? @db.Timestamptz(6)\n tokenVersion Int @default(1)\n\n devices Device[]\n\n @@unique([provider, providerId])\n}\n\nmodel AppInstall {\n id String @id @default(cuid()) @db.VarChar(191)\n deviceId Int\n appId String @db.VarChar(191)\n token String @unique @db.VarChar(191)\n note String? @db.VarChar(191)\n installedAt DateTime @default(now()) @db.Timestamptz(6)\n updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)\n deviceType String? @db.VarChar(191)\n isReadOnly Boolean @default(false)\n\n device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)\n\n @@index([deviceId])\n}\n\nmodel AutoAuth {\n id String @id @default(cuid()) @db.VarChar(191)\n deviceId Int\n password String? @db.VarChar(191)\n deviceType String? @db.VarChar(191)\n isReadOnly Boolean @default(false)\n createdAt DateTime @default(now()) @db.Timestamptz(6)\n updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)\n\n device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)\n\n @@unique([deviceId, password])\n}\n\nmodel Device {\n id Int @id @default(autoincrement())\n uuid String @unique @db.VarChar(191)\n name String? @db.VarChar(191)\n accountId String? @db.VarChar(191)\n createdAt DateTime @default(now()) @db.Timestamptz(6)\n updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)\n password String? @db.VarChar(191)\n passwordHint String? @db.VarChar(191)\n namespace String? @unique @db.VarChar(191)\n\n // 关联关系\n account Account? @relation(fields: [accountId], references: [id], onDelete: SetNull)\n appInstalls AppInstall[]\n kvStore KVStore[] // 设备相关的KV存储\n autoAuths AutoAuth[] // 自动授权配置\n\n @@index([accountId])\n}\n\nmodel KVStore {\n deviceId Int\n key String @db.VarChar(191)\n value Json @db.Json\n creatorIp String? @default(\"\") @db.VarChar(191)\n createdAt DateTime @default(now()) @db.Timestamptz(6)\n updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)\n\n device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)\n\n @@id([deviceId, key])\n}\n",
|
||||||
"runtimeDataModel": {
|
"runtimeDataModel": {
|
||||||
"models": {},
|
"models": {},
|
||||||
"enums": {},
|
"enums": {},
|
||||||
|
|||||||
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "ClassworksKV",
|
"name": "ClassworksKV",
|
||||||
"version": "1.3.16",
|
"version": "1.3.19",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "ClassworksKV",
|
"name": "ClassworksKV",
|
||||||
"version": "1.3.16",
|
"version": "1.3.19",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@opentelemetry/auto-instrumentations-node": "^0.59.0",
|
"@opentelemetry/auto-instrumentations-node": "^0.59.0",
|
||||||
"@opentelemetry/exporter-trace-otlp-proto": "^0.205.0",
|
"@opentelemetry/exporter-trace-otlp-proto": "^0.205.0",
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ClassworksKV",
|
"name": "ClassworksKV",
|
||||||
"version": "1.3.16",
|
"version": "1.3.19",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node ./bin/www",
|
"start": "node ./bin/www",
|
||||||
|
|||||||
@ -1,110 +0,0 @@
|
|||||||
-- CreateSchema
|
|
||||||
CREATE SCHEMA IF NOT EXISTS "public";
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "Account" (
|
|
||||||
"id" VARCHAR(191) NOT NULL,
|
|
||||||
"provider" VARCHAR(191) NOT NULL,
|
|
||||||
"providerId" VARCHAR(191) NOT NULL,
|
|
||||||
"email" VARCHAR(191),
|
|
||||||
"name" VARCHAR(191),
|
|
||||||
"avatarUrl" VARCHAR(191),
|
|
||||||
"providerData" JSON,
|
|
||||||
"accessToken" TEXT,
|
|
||||||
"createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
"updatedAt" TIMESTAMPTZ(6) NOT NULL,
|
|
||||||
"refreshToken" TEXT,
|
|
||||||
"refreshTokenExpiry" TIMESTAMPTZ(6),
|
|
||||||
"tokenVersion" INTEGER NOT NULL DEFAULT 1,
|
|
||||||
|
|
||||||
CONSTRAINT "idx_18303_PRIMARY" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "AppInstall" (
|
|
||||||
"id" VARCHAR(191) NOT NULL,
|
|
||||||
"deviceId" INTEGER NOT NULL,
|
|
||||||
"appId" VARCHAR(191) NOT NULL,
|
|
||||||
"token" VARCHAR(191) NOT NULL,
|
|
||||||
"note" VARCHAR(191),
|
|
||||||
"installedAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
"updatedAt" TIMESTAMPTZ(6) NOT NULL,
|
|
||||||
"deviceType" VARCHAR(191),
|
|
||||||
"isReadOnly" BOOLEAN NOT NULL DEFAULT false,
|
|
||||||
|
|
||||||
CONSTRAINT "idx_18310_PRIMARY" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "AutoAuth" (
|
|
||||||
"id" VARCHAR(191) NOT NULL,
|
|
||||||
"deviceId" INTEGER NOT NULL,
|
|
||||||
"password" VARCHAR(191),
|
|
||||||
"deviceType" VARCHAR(191),
|
|
||||||
"isReadOnly" BOOLEAN NOT NULL DEFAULT false,
|
|
||||||
"createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
"updatedAt" TIMESTAMPTZ(6) NOT NULL,
|
|
||||||
|
|
||||||
CONSTRAINT "idx_18317_PRIMARY" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "Device" (
|
|
||||||
"id" INTEGER NOT NULL,
|
|
||||||
"uuid" VARCHAR(191) NOT NULL,
|
|
||||||
"name" VARCHAR(191),
|
|
||||||
"accountId" VARCHAR(191),
|
|
||||||
"createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
"updatedAt" TIMESTAMPTZ(6) NOT NULL,
|
|
||||||
"password" VARCHAR(191),
|
|
||||||
"passwordHint" VARCHAR(191),
|
|
||||||
"namespace" VARCHAR(191),
|
|
||||||
|
|
||||||
CONSTRAINT "idx_18324_PRIMARY" PRIMARY KEY ("id")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateTable
|
|
||||||
CREATE TABLE "KVStore" (
|
|
||||||
"deviceId" INTEGER NOT NULL,
|
|
||||||
"key" VARCHAR(191) NOT NULL,
|
|
||||||
"value" JSON NOT NULL,
|
|
||||||
"creatorIp" VARCHAR(191) DEFAULT '',
|
|
||||||
"createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
||||||
"updatedAt" TIMESTAMPTZ(6) NOT NULL,
|
|
||||||
|
|
||||||
CONSTRAINT "idx_18330_PRIMARY" PRIMARY KEY ("deviceId","key")
|
|
||||||
);
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "idx_18303_Account_provider_providerId_key" ON "Account"("provider", "providerId");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "idx_18310_AppInstall_token_key" ON "AppInstall"("token");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE INDEX "idx_18310_AppInstall_deviceId_fkey" ON "AppInstall"("deviceId");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "idx_18317_AutoAuth_deviceId_password_key" ON "AutoAuth"("deviceId", "password");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "idx_18324_Device_uuid_key" ON "Device"("uuid");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE UNIQUE INDEX "idx_18324_Device_namespace_key" ON "Device"("namespace");
|
|
||||||
|
|
||||||
-- CreateIndex
|
|
||||||
CREATE INDEX "idx_18324_Device_accountId_fkey" ON "Device"("accountId");
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "AppInstall" ADD CONSTRAINT "AppInstall_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES "Device"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "AutoAuth" ADD CONSTRAINT "AutoAuth_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES "Device"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "Device" ADD CONSTRAINT "Device_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
-- AddForeignKey
|
|
||||||
ALTER TABLE "KVStore" ADD CONSTRAINT "KVStore_deviceId_fkey" FOREIGN KEY ("deviceId") REFERENCES "Device"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
||||||
|
|
||||||
@ -1,14 +0,0 @@
|
|||||||
-- AlterTable
|
|
||||||
ALTER TABLE "Account" ALTER COLUMN "updatedAt" SET DEFAULT CURRENT_TIMESTAMP;
|
|
||||||
|
|
||||||
-- AlterTable
|
|
||||||
ALTER TABLE "AppInstall" ALTER COLUMN "updatedAt" SET DEFAULT CURRENT_TIMESTAMP;
|
|
||||||
|
|
||||||
-- AlterTable
|
|
||||||
ALTER TABLE "AutoAuth" ALTER COLUMN "updatedAt" SET DEFAULT CURRENT_TIMESTAMP;
|
|
||||||
|
|
||||||
-- AlterTable
|
|
||||||
ALTER TABLE "Device" ALTER COLUMN "updatedAt" SET DEFAULT CURRENT_TIMESTAMP;
|
|
||||||
|
|
||||||
-- AlterTable
|
|
||||||
ALTER TABLE "KVStore" ALTER COLUMN "updatedAt" SET DEFAULT CURRENT_TIMESTAMP;
|
|
||||||
@ -1,4 +0,0 @@
|
|||||||
-- AlterTable
|
|
||||||
CREATE SEQUENCE device_id_seq;
|
|
||||||
ALTER TABLE "Device" ALTER COLUMN "id" SET DEFAULT nextval('device_id_seq');
|
|
||||||
ALTER SEQUENCE device_id_seq OWNED BY "Device"."id";
|
|
||||||
94
prisma/migrations/20260209032205_init/migration.sql
Normal file
94
prisma/migrations/20260209032205_init/migration.sql
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Account" (
|
||||||
|
"id" VARCHAR(191) NOT NULL,
|
||||||
|
"provider" VARCHAR(191) NOT NULL,
|
||||||
|
"providerId" VARCHAR(191) NOT NULL,
|
||||||
|
"email" VARCHAR(191),
|
||||||
|
"name" VARCHAR(191),
|
||||||
|
"avatarUrl" VARCHAR(191),
|
||||||
|
"providerData" JSON,
|
||||||
|
"accessToken" TEXT,
|
||||||
|
"createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"refreshToken" TEXT,
|
||||||
|
"refreshTokenExpiry" TIMESTAMPTZ(6),
|
||||||
|
"tokenVersion" INTEGER NOT NULL DEFAULT 1,
|
||||||
|
|
||||||
|
CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "AppInstall" (
|
||||||
|
"id" VARCHAR(191) NOT NULL,
|
||||||
|
"deviceId" INTEGER NOT NULL,
|
||||||
|
"appId" VARCHAR(191) NOT NULL,
|
||||||
|
"token" VARCHAR(191) NOT NULL,
|
||||||
|
"note" VARCHAR(191),
|
||||||
|
"installedAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"deviceType" VARCHAR(191),
|
||||||
|
"isReadOnly" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
|
||||||
|
CONSTRAINT "AppInstall_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "AutoAuth" (
|
||||||
|
"id" VARCHAR(191) NOT NULL,
|
||||||
|
"deviceId" INTEGER NOT NULL,
|
||||||
|
"password" VARCHAR(191),
|
||||||
|
"deviceType" VARCHAR(191),
|
||||||
|
"isReadOnly" BOOLEAN NOT NULL DEFAULT false,
|
||||||
|
"createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "AutoAuth_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "Device" (
|
||||||
|
"id" SERIAL NOT NULL,
|
||||||
|
"uuid" VARCHAR(191) NOT NULL,
|
||||||
|
"name" VARCHAR(191),
|
||||||
|
"accountId" VARCHAR(191),
|
||||||
|
"createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"password" VARCHAR(191),
|
||||||
|
"passwordHint" VARCHAR(191),
|
||||||
|
"namespace" VARCHAR(191),
|
||||||
|
|
||||||
|
CONSTRAINT "Device_pkey" PRIMARY KEY ("id")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateTable
|
||||||
|
CREATE TABLE "KVStore" (
|
||||||
|
"deviceId" INTEGER NOT NULL,
|
||||||
|
"key" VARCHAR(191) NOT NULL,
|
||||||
|
"value" JSON NOT NULL,
|
||||||
|
"creatorIp" VARCHAR(191) DEFAULT '',
|
||||||
|
"createdAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"updatedAt" TIMESTAMPTZ(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
|
||||||
|
CONSTRAINT "KVStore_pkey" PRIMARY KEY ("deviceId","key")
|
||||||
|
);
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Account_provider_providerId_key" ON "Account"("provider", "providerId");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "AppInstall_token_key" ON "AppInstall"("token");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE INDEX "AppInstall_deviceId_idx" ON "AppInstall"("deviceId");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "AutoAuth_deviceId_password_key" ON "AutoAuth"("deviceId", "password");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Device_uuid_key" ON "Device"("uuid");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE UNIQUE INDEX "Device_namespace_key" ON "Device"("namespace");
|
||||||
|
|
||||||
|
-- CreateIndex
|
||||||
|
CREATE INDEX "Device_accountId_idx" ON "Device"("accountId");
|
||||||
@ -5,10 +5,11 @@ generator client {
|
|||||||
|
|
||||||
datasource db {
|
datasource db {
|
||||||
provider = "postgresql"
|
provider = "postgresql"
|
||||||
|
relationMode = "prisma"
|
||||||
}
|
}
|
||||||
|
|
||||||
model Account {
|
model Account {
|
||||||
id String @id(map: "idx_18303_PRIMARY") @db.VarChar(191) @default(cuid())
|
id String @id @db.VarChar(191) @default(cuid())
|
||||||
provider String @db.VarChar(191)
|
provider String @db.VarChar(191)
|
||||||
providerId String @db.VarChar(191)
|
providerId String @db.VarChar(191)
|
||||||
email String? @db.VarChar(191)
|
email String? @db.VarChar(191)
|
||||||
@ -24,14 +25,14 @@ model Account {
|
|||||||
|
|
||||||
devices Device[]
|
devices Device[]
|
||||||
|
|
||||||
@@unique([provider, providerId], map: "idx_18303_Account_provider_providerId_key")
|
@@unique([provider, providerId])
|
||||||
}
|
}
|
||||||
|
|
||||||
model AppInstall {
|
model AppInstall {
|
||||||
id String @id(map: "idx_18310_PRIMARY") @default(cuid()) @db.VarChar(191)
|
id String @id @default(cuid()) @db.VarChar(191)
|
||||||
deviceId Int
|
deviceId Int
|
||||||
appId String @db.VarChar(191)
|
appId String @db.VarChar(191)
|
||||||
token String @unique(map: "idx_18310_AppInstall_token_key") @db.VarChar(191)
|
token String @unique @db.VarChar(191)
|
||||||
note String? @db.VarChar(191)
|
note String? @db.VarChar(191)
|
||||||
installedAt DateTime @default(now()) @db.Timestamptz(6)
|
installedAt DateTime @default(now()) @db.Timestamptz(6)
|
||||||
updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)
|
updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)
|
||||||
@ -40,11 +41,11 @@ model AppInstall {
|
|||||||
|
|
||||||
device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)
|
device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
@@index([deviceId], map: "idx_18310_AppInstall_deviceId_fkey")
|
@@index([deviceId])
|
||||||
}
|
}
|
||||||
|
|
||||||
model AutoAuth {
|
model AutoAuth {
|
||||||
id String @id(map: "idx_18317_PRIMARY") @default(cuid()) @db.VarChar(191)
|
id String @id @default(cuid()) @db.VarChar(191)
|
||||||
deviceId Int
|
deviceId Int
|
||||||
password String? @db.VarChar(191)
|
password String? @db.VarChar(191)
|
||||||
deviceType String? @db.VarChar(191)
|
deviceType String? @db.VarChar(191)
|
||||||
@ -54,26 +55,26 @@ model AutoAuth {
|
|||||||
|
|
||||||
device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)
|
device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
@@unique([deviceId, password], map: "idx_18317_AutoAuth_deviceId_password_key")
|
@@unique([deviceId, password])
|
||||||
}
|
}
|
||||||
|
|
||||||
model Device {
|
model Device {
|
||||||
id Int @id(map: "idx_18324_PRIMARY") @default(autoincrement())
|
id Int @id @default(autoincrement())
|
||||||
uuid String @unique(map: "idx_18324_Device_uuid_key") @db.VarChar(191)
|
uuid String @unique @db.VarChar(191)
|
||||||
name String? @db.VarChar(191)
|
name String? @db.VarChar(191)
|
||||||
accountId String? @db.VarChar(191)
|
accountId String? @db.VarChar(191)
|
||||||
createdAt DateTime @default(now()) @db.Timestamptz(6)
|
createdAt DateTime @default(now()) @db.Timestamptz(6)
|
||||||
updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)
|
updatedAt DateTime @default(now()) @updatedAt @db.Timestamptz(6)
|
||||||
password String? @db.VarChar(191)
|
password String? @db.VarChar(191)
|
||||||
passwordHint String? @db.VarChar(191)
|
passwordHint String? @db.VarChar(191)
|
||||||
namespace String? @unique(map: "idx_18324_Device_namespace_key") @db.VarChar(191)
|
namespace String? @unique @db.VarChar(191)
|
||||||
|
|
||||||
// 关联关系
|
// 关联关系
|
||||||
account Account? @relation(fields: [accountId], references: [id], onDelete: SetNull)
|
account Account? @relation(fields: [accountId], references: [id], onDelete: SetNull)
|
||||||
appInstalls AppInstall[]
|
appInstalls AppInstall[]
|
||||||
kvStore KVStore[] // 设备相关的KV存储
|
kvStore KVStore[] // 设备相关的KV存储
|
||||||
autoAuths AutoAuth[] // 自动授权配置
|
autoAuths AutoAuth[] // 自动授权配置
|
||||||
@@index([accountId], map: "idx_18324_Device_accountId_fkey")
|
@@index([accountId])
|
||||||
}
|
}
|
||||||
|
|
||||||
model KVStore {
|
model KVStore {
|
||||||
@ -86,5 +87,5 @@ model KVStore {
|
|||||||
|
|
||||||
device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)
|
device Device @relation(fields: [deviceId], references: [id], onDelete: Cascade)
|
||||||
|
|
||||||
@@id([deviceId, key], map: "idx_18330_PRIMARY")
|
@@id([deviceId, key])
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user