feat(P19ERP1-1,P19ERP1-2): 新增ERP主数据同步模型与服务
这个提交包含在:
@@ -0,0 +1,50 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "integration_bindings" (
|
||||
"id" UUID NOT NULL,
|
||||
"provider" VARCHAR(32) NOT NULL,
|
||||
"entity_type" VARCHAR(32) NOT NULL,
|
||||
"local_id" UUID NOT NULL,
|
||||
"external_id" VARCHAR(128),
|
||||
"external_code" VARCHAR(128),
|
||||
"last_synced_at" TIMESTAMP(3),
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"created_by" UUID,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
"updated_by" UUID,
|
||||
|
||||
CONSTRAINT "integration_bindings_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "integration_sync_states" (
|
||||
"id" UUID NOT NULL,
|
||||
"provider" VARCHAR(32) NOT NULL,
|
||||
"resource_type" VARCHAR(32) NOT NULL,
|
||||
"status" VARCHAR(16) NOT NULL DEFAULT 'idle',
|
||||
"last_result" JSONB,
|
||||
"last_error" TEXT,
|
||||
"last_started_at" TIMESTAMP(3),
|
||||
"last_finished_at" TIMESTAMP(3),
|
||||
"last_success_at" TIMESTAMP(3),
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"created_by" UUID,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
"updated_by" UUID,
|
||||
|
||||
CONSTRAINT "integration_sync_states_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_integration_bindings_provider_entity_external_code" ON "integration_bindings"("provider", "entity_type", "external_code");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "integration_bindings_provider_entity_local_ux" ON "integration_bindings"("provider", "entity_type", "local_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "integration_bindings_provider_entity_external_id_ux" ON "integration_bindings"("provider", "entity_type", "external_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "idx_integration_sync_states_provider_status" ON "integration_sync_states"("provider", "status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "integration_sync_states_provider_resource_ux" ON "integration_sync_states"("provider", "resource_type");
|
||||
@@ -1205,6 +1205,47 @@ model IntegrationOutbox {
|
||||
@@map("integration_outbox")
|
||||
}
|
||||
|
||||
model IntegrationBinding {
|
||||
id String @id @default(uuid()) @db.Uuid
|
||||
provider String @db.VarChar(32)
|
||||
entity_type String @db.VarChar(32)
|
||||
local_id String @db.Uuid
|
||||
external_id String? @db.VarChar(128)
|
||||
external_code String? @db.VarChar(128)
|
||||
last_synced_at DateTime?
|
||||
|
||||
created_at DateTime @default(now())
|
||||
created_by String? @db.Uuid
|
||||
updated_at DateTime @updatedAt
|
||||
updated_by String? @db.Uuid
|
||||
|
||||
@@unique([provider, entity_type, local_id], map: "integration_bindings_provider_entity_local_ux")
|
||||
@@unique([provider, entity_type, external_id], map: "integration_bindings_provider_entity_external_id_ux")
|
||||
@@index([provider, entity_type, external_code], map: "idx_integration_bindings_provider_entity_external_code")
|
||||
@@map("integration_bindings")
|
||||
}
|
||||
|
||||
model IntegrationSyncState {
|
||||
id String @id @default(uuid()) @db.Uuid
|
||||
provider String @db.VarChar(32)
|
||||
resource_type String @db.VarChar(32)
|
||||
status String @default("idle") @db.VarChar(16)
|
||||
last_result Json?
|
||||
last_error String?
|
||||
last_started_at DateTime?
|
||||
last_finished_at DateTime?
|
||||
last_success_at DateTime?
|
||||
|
||||
created_at DateTime @default(now())
|
||||
created_by String? @db.Uuid
|
||||
updated_at DateTime @updatedAt
|
||||
updated_by String? @db.Uuid
|
||||
|
||||
@@unique([provider, resource_type], map: "integration_sync_states_provider_resource_ux")
|
||||
@@index([provider, status], map: "idx_integration_sync_states_provider_status")
|
||||
@@map("integration_sync_states")
|
||||
}
|
||||
|
||||
model TravelOrder {
|
||||
id String @id @default(uuid()) @db.Uuid
|
||||
source String @default("manual") @db.VarChar(32)
|
||||
|
||||
在新工单中引用
屏蔽一个用户