chore: sync marketing pages, CMS extensions, tests and project docs
同步工作区剩余变更,主要包括: - 营销页面组件与布局持续优化(about/news/services/solutions/team 等) - 详情页四层叙事组件、布局组件、UI 组件调整 - CMS 数据模型、API 路由、权限、工作流、站内通知、媒体管理扩展 - 新增/补充单元测试与 E2E 测试(cms-workflow.spec.ts 等) - ESLint 9 迁移、jest/tsconfig 配置更新、依赖调整 - 新增 ADR、CMS 评估文档、Release Review / Acceptance 报告 - 移除水墨装饰组件与大体积未使用字体文件
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
-- RedefineTables
|
||||
PRAGMA defer_foreign_keys=ON;
|
||||
PRAGMA foreign_keys=OFF;
|
||||
CREATE TABLE "new_ContentItem" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"modelId" TEXT NOT NULL,
|
||||
"modelCode" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"slug" TEXT NOT NULL DEFAULT '',
|
||||
"locale" TEXT NOT NULL DEFAULT 'zh-CN',
|
||||
"status" TEXT NOT NULL DEFAULT 'draft',
|
||||
"data" TEXT NOT NULL,
|
||||
"version" INTEGER NOT NULL DEFAULT 1,
|
||||
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
||||
"publishedAt" DATETIME,
|
||||
"createdBy" TEXT NOT NULL DEFAULT 'system',
|
||||
"updatedBy" TEXT NOT NULL DEFAULT 'system',
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL,
|
||||
CONSTRAINT "ContentItem_modelId_fkey" FOREIGN KEY ("modelId") REFERENCES "ContentModel" ("id") ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
);
|
||||
INSERT INTO "new_ContentItem" ("createdAt", "createdBy", "data", "id", "modelCode", "modelId", "publishedAt", "slug", "sortOrder", "status", "title", "updatedAt", "updatedBy", "version") SELECT "createdAt", "createdBy", "data", "id", "modelCode", "modelId", "publishedAt", "slug", "sortOrder", "status", "title", "updatedAt", "updatedBy", "version" FROM "ContentItem";
|
||||
DROP TABLE "ContentItem";
|
||||
ALTER TABLE "new_ContentItem" RENAME TO "ContentItem";
|
||||
CREATE INDEX "ContentItem_modelCode_idx" ON "ContentItem"("modelCode");
|
||||
CREATE INDEX "ContentItem_status_idx" ON "ContentItem"("status");
|
||||
CREATE INDEX "ContentItem_locale_idx" ON "ContentItem"("locale");
|
||||
CREATE UNIQUE INDEX "ContentItem_modelCode_slug_locale_key" ON "ContentItem"("modelCode", "slug", "locale");
|
||||
PRAGMA foreign_keys=ON;
|
||||
PRAGMA defer_foreign_keys=OFF;
|
||||
@@ -0,0 +1,49 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "Role" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"code" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT NOT NULL DEFAULT '',
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Permission" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"roleCode" TEXT NOT NULL,
|
||||
"modelCode" TEXT NOT NULL,
|
||||
"action" TEXT NOT NULL,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL,
|
||||
CONSTRAINT "Permission_roleCode_fkey" FOREIGN KEY ("roleCode") REFERENCES "Role" ("code") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "UserRole" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"roleCode" TEXT NOT NULL,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL,
|
||||
CONSTRAINT "UserRole_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
CONSTRAINT "UserRole_roleCode_fkey" FOREIGN KEY ("roleCode") REFERENCES "Role" ("code") ON DELETE CASCADE ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Role_code_key" ON "Role"("code");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Permission_modelCode_idx" ON "Permission"("modelCode");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Permission_action_idx" ON "Permission"("action");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Permission_roleCode_modelCode_action_key" ON "Permission"("roleCode", "modelCode", "action");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "UserRole_userId_idx" ON "UserRole"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "UserRole_userId_roleCode_key" ON "UserRole"("userId", "roleCode");
|
||||
@@ -0,0 +1,24 @@
|
||||
-- RedefineTables
|
||||
PRAGMA defer_foreign_keys=ON;
|
||||
PRAGMA foreign_keys=OFF;
|
||||
CREATE TABLE "new_MediaAsset" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"name" TEXT NOT NULL,
|
||||
"path" TEXT NOT NULL,
|
||||
"url" TEXT NOT NULL,
|
||||
"mimeType" TEXT NOT NULL,
|
||||
"size" INTEGER NOT NULL DEFAULT 0,
|
||||
"width" INTEGER NOT NULL DEFAULT 0,
|
||||
"height" INTEGER NOT NULL DEFAULT 0,
|
||||
"alt" TEXT NOT NULL DEFAULT '',
|
||||
"storageType" TEXT NOT NULL DEFAULT 'local',
|
||||
"derivatives" TEXT NOT NULL DEFAULT '{}',
|
||||
"createdBy" TEXT NOT NULL DEFAULT 'system',
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL
|
||||
);
|
||||
INSERT INTO "new_MediaAsset" ("alt", "createdAt", "createdBy", "height", "id", "mimeType", "name", "path", "size", "storageType", "updatedAt", "url", "width") SELECT "alt", "createdAt", "createdBy", "height", "id", "mimeType", "name", "path", "size", "storageType", "updatedAt", "url", "width" FROM "MediaAsset";
|
||||
DROP TABLE "MediaAsset";
|
||||
ALTER TABLE "new_MediaAsset" RENAME TO "MediaAsset";
|
||||
PRAGMA foreign_keys=ON;
|
||||
PRAGMA defer_foreign_keys=OFF;
|
||||
@@ -0,0 +1,22 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "Notification" (
|
||||
"id" TEXT NOT NULL PRIMARY KEY,
|
||||
"userId" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"message" TEXT NOT NULL,
|
||||
"relatedItemId" TEXT NOT NULL DEFAULT '',
|
||||
"relatedModelCode" TEXT NOT NULL DEFAULT '',
|
||||
"read" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" DATETIME NOT NULL
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Notification_userId_idx" ON "Notification"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Notification_read_idx" ON "Notification"("read");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Notification_createdAt_idx" ON "Notification"("createdAt");
|
||||
Reference in New Issue
Block a user