feat(documents): prepare inbox suggestions and add entity assignments
This commit is contained in:
13
backend/db/migrations/0077_scanner_inbox_preparation.sql
Normal file
13
backend/db/migrations/0077_scanner_inbox_preparation.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
ALTER TABLE "scanner_inbox_documents"
|
||||
ADD COLUMN "suggestion_status" text NOT NULL DEFAULT 'pending',
|
||||
ADD COLUMN "suggestion" jsonb,
|
||||
ADD COLUMN "suggestion_message" text,
|
||||
ADD COLUMN "suggestion_claim" uuid,
|
||||
ADD COLUMN "suggestion_updated_at" timestamptz NOT NULL DEFAULT now();
|
||||
--> statement-breakpoint
|
||||
ALTER TABLE "scanner_inbox_documents" ADD CONSTRAINT "scanner_inbox_suggestion_status_check"
|
||||
CHECK ("suggestion_status" IN ('pending', 'processing', 'ready', 'failed'));
|
||||
--> statement-breakpoint
|
||||
CREATE INDEX "scanner_inbox_suggestion_queue_idx"
|
||||
ON "scanner_inbox_documents" ("suggestion_status", "suggestion_updated_at", "received_at")
|
||||
WHERE "filed_at" IS NULL;
|
||||
@@ -519,6 +519,13 @@
|
||||
"when": 1790726400001,
|
||||
"tag": "0076_collaboration_federation",
|
||||
"breakpoints": true
|
||||
},
|
||||
{
|
||||
"idx": 74,
|
||||
"version": "7",
|
||||
"when": 1790899200000,
|
||||
"tag": "0077_scanner_inbox_preparation",
|
||||
"breakpoints": true
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { bigint, boolean, index, pgTable, text, timestamp, uniqueIndex, uuid } from "drizzle-orm/pg-core"
|
||||
import { bigint, boolean, index, jsonb, pgTable, text, timestamp, uniqueIndex, uuid } from "drizzle-orm/pg-core"
|
||||
import { tenants } from "./tenants"
|
||||
import { files } from "./files"
|
||||
import { sql } from "drizzle-orm"
|
||||
|
||||
export const scannerInboxConnections = pgTable("scanner_inbox_connections", {
|
||||
tenantId: bigint("tenant_id", { mode: "number" }).primaryKey().references(() => tenants.id, { onDelete: "cascade" }),
|
||||
@@ -18,7 +19,13 @@ export const scannerInboxDocuments = pgTable("scanner_inbox_documents", {
|
||||
checksum: text("checksum").notNull(),
|
||||
receivedAt: timestamp("received_at", { withTimezone: true }).notNull().defaultNow(),
|
||||
filedAt: timestamp("filed_at", { withTimezone: true }),
|
||||
suggestionStatus: text("suggestion_status").notNull().default("pending"),
|
||||
suggestion: jsonb("suggestion"),
|
||||
suggestionMessage: text("suggestion_message"),
|
||||
suggestionClaim: uuid("suggestion_claim"),
|
||||
suggestionUpdatedAt: timestamp("suggestion_updated_at", { withTimezone: true }).notNull().defaultNow(),
|
||||
}, table => ({
|
||||
filenameKey: uniqueIndex("scanner_inbox_documents_filename_key").on(table.tenantId, table.remoteFilename),
|
||||
receivedIdx: index("scanner_inbox_documents_received_idx").on(table.tenantId, table.receivedAt),
|
||||
suggestionQueueIdx: index("scanner_inbox_suggestion_queue_idx").on(table.suggestionStatus, table.suggestionUpdatedAt, table.receivedAt).where(sql`${table.filedAt} IS NULL`),
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user