实现制度签收轻量回执(05-28-oa-policy-acknowledgement-v1)

这个提交包含在:
2026-05-28 11:48:37 +08:00
父节点 7c5b6d9578
当前提交 c80d9adbcd
共修改 16 个文件,包含 1806 行新增和 78 行删除
@@ -0,0 +1,43 @@
ALTER TABLE "portal_announcements"
ADD COLUMN "category" TEXT NOT NULL DEFAULT 'general',
ADD COLUMN "requires_acknowledgement" BOOLEAN NOT NULL DEFAULT false,
ADD COLUMN "acknowledgement_statement" TEXT,
ADD COLUMN "acknowledgement_due_at" TIMESTAMP(3);
CREATE TABLE "portal_announcement_acknowledgements" (
"id" UUID NOT NULL,
"announcement_id" UUID NOT NULL,
"employee_id" UUID NOT NULL,
"acknowledged_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"statement_snapshot" TEXT NOT NULL,
"title_snapshot" TEXT NOT NULL,
"summary_snapshot" TEXT NOT NULL,
"actor_id" UUID NOT NULL,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "portal_announcement_acknowledgements_pkey" PRIMARY KEY ("id")
);
CREATE UNIQUE INDEX "portal_announcement_acknowledgements_announcement_id_employee_id_key"
ON "portal_announcement_acknowledgements"("announcement_id", "employee_id");
CREATE INDEX "portal_announcement_acknowledgements_employee_id_acknowledged_at_idx"
ON "portal_announcement_acknowledgements"("employee_id", "acknowledged_at");
CREATE INDEX "portal_announcement_acknowledgements_announcement_id_acknowledged_at_idx"
ON "portal_announcement_acknowledgements"("announcement_id", "acknowledged_at");
ALTER TABLE "portal_announcement_acknowledgements"
ADD CONSTRAINT "portal_announcement_acknowledgements_announcement_id_fkey"
FOREIGN KEY ("announcement_id") REFERENCES "portal_announcements"("id")
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE "portal_announcement_acknowledgements"
ADD CONSTRAINT "portal_announcement_acknowledgements_employee_id_fkey"
FOREIGN KEY ("employee_id") REFERENCES "employees"("id")
ON DELETE RESTRICT ON UPDATE CASCADE;
ALTER TABLE "portal_announcement_acknowledgements"
ADD CONSTRAINT "portal_announcement_acknowledgements_actor_id_fkey"
FOREIGN KEY ("actor_id") REFERENCES "employees"("id")
ON DELETE RESTRICT ON UPDATE CASCADE;
+37 -8
查看文件
@@ -683,6 +683,8 @@ model Employee {
email_login_codes EmailLoginCode[]
lifecycle_events EmployeeLifecycleEvent[]
checklist_tasks EmployeeChecklistTask[]
portal_announcement_acknowledgements PortalAnnouncementAcknowledgement[] @relation("PortalAnnouncementAcknowledgementEmployee")
portal_announcement_acknowledgement_actions PortalAnnouncementAcknowledgement[] @relation("PortalAnnouncementAcknowledgementActor")
presence_records EmployeePresence[]
attendance_records AttendanceRecord[]
weekly_reports WeeklyReport[]
@@ -1876,24 +1878,51 @@ model PaymentBatchReceiptAttachment {
}
model PortalAnnouncement {
id String @id @default(uuid()) @db.Uuid
title String
summary String
link_url String?
starts_at DateTime?
ends_at DateTime?
enabled Boolean @default(true)
priority Int @default(100)
id String @id @default(uuid()) @db.Uuid
title String
summary String
link_url String?
starts_at DateTime?
ends_at DateTime?
enabled Boolean @default(true)
priority Int @default(100)
category String @default("general")
requires_acknowledgement Boolean @default(false)
acknowledgement_statement String?
acknowledgement_due_at DateTime?
created_at DateTime @default(now())
created_by String? @db.Uuid
updated_at DateTime @default(now()) @updatedAt
updated_by String? @db.Uuid
acknowledgements PortalAnnouncementAcknowledgement[]
@@index([enabled, priority, starts_at, ends_at], map: "idx_portal_announcements_enabled_priority")
@@map("portal_announcements")
}
model PortalAnnouncementAcknowledgement {
id String @id @default(uuid()) @db.Uuid
announcement_id String @db.Uuid
employee_id String @db.Uuid
acknowledged_at DateTime @default(now())
statement_snapshot String
title_snapshot String
summary_snapshot String
actor_id String @db.Uuid
created_at DateTime @default(now())
announcement PortalAnnouncement @relation(fields: [announcement_id], references: [id], onDelete: Cascade)
employee Employee @relation("PortalAnnouncementAcknowledgementEmployee", fields: [employee_id], references: [id], onDelete: Restrict)
actor Employee @relation("PortalAnnouncementAcknowledgementActor", fields: [actor_id], references: [id], onDelete: Restrict)
@@unique([announcement_id, employee_id])
@@index([employee_id, acknowledged_at])
@@index([announcement_id, acknowledged_at])
@@map("portal_announcement_acknowledgements")
}
model WorkspaceSetting {
id String @id @default(uuid()) @db.Uuid
profile WorkspaceProfile @default(small_team_internal)