feat(documents): add yachtId/companyId to files and documents
This commit is contained in:
8
src/lib/db/migrations/0007_brainy_felicia_hardy.sql
Normal file
8
src/lib/db/migrations/0007_brainy_felicia_hardy.sql
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
ALTER TABLE "documents" ADD COLUMN "yacht_id" text;--> statement-breakpoint
|
||||||
|
ALTER TABLE "documents" ADD COLUMN "company_id" text;--> statement-breakpoint
|
||||||
|
ALTER TABLE "files" ADD COLUMN "yacht_id" text;--> statement-breakpoint
|
||||||
|
ALTER TABLE "files" ADD COLUMN "company_id" text;--> statement-breakpoint
|
||||||
|
CREATE INDEX "idx_documents_yacht" ON "documents" USING btree ("yacht_id");--> statement-breakpoint
|
||||||
|
CREATE INDEX "idx_documents_company" ON "documents" USING btree ("company_id");--> statement-breakpoint
|
||||||
|
CREATE INDEX "idx_files_yacht" ON "files" USING btree ("yacht_id");--> statement-breakpoint
|
||||||
|
CREATE INDEX "idx_files_company" ON "files" USING btree ("company_id");
|
||||||
8609
src/lib/db/migrations/meta/0007_snapshot.json
Normal file
8609
src/lib/db/migrations/meta/0007_snapshot.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -50,6 +50,13 @@
|
|||||||
"when": 1776959911400,
|
"when": 1776959911400,
|
||||||
"tag": "0006_great_pixie",
|
"tag": "0006_great_pixie",
|
||||||
"breakpoints": true
|
"breakpoints": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"idx": 7,
|
||||||
|
"version": "7",
|
||||||
|
"when": 1776959993173,
|
||||||
|
"tag": "0007_brainy_felicia_hardy",
|
||||||
|
"breakpoints": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,11 +15,15 @@ import { clients } from './clients';
|
|||||||
export const files = pgTable(
|
export const files = pgTable(
|
||||||
'files',
|
'files',
|
||||||
{
|
{
|
||||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
id: text('id')
|
||||||
|
.primaryKey()
|
||||||
|
.$defaultFn(() => crypto.randomUUID()),
|
||||||
portId: text('port_id')
|
portId: text('port_id')
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => ports.id),
|
.references(() => ports.id),
|
||||||
clientId: text('client_id').references(() => clients.id),
|
clientId: text('client_id').references(() => clients.id),
|
||||||
|
yachtId: text('yacht_id'), // FK wired in relations.ts
|
||||||
|
companyId: text('company_id'), // FK wired in relations.ts
|
||||||
filename: text('filename').notNull(),
|
filename: text('filename').notNull(),
|
||||||
originalName: text('original_name').notNull(),
|
originalName: text('original_name').notNull(),
|
||||||
mimeType: text('mime_type'),
|
mimeType: text('mime_type'),
|
||||||
@@ -33,18 +37,24 @@ export const files = pgTable(
|
|||||||
(table) => [
|
(table) => [
|
||||||
index('idx_files_port').on(table.portId),
|
index('idx_files_port').on(table.portId),
|
||||||
index('idx_files_client').on(table.clientId),
|
index('idx_files_client').on(table.clientId),
|
||||||
|
index('idx_files_yacht').on(table.yachtId),
|
||||||
|
index('idx_files_company').on(table.companyId),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
export const documents = pgTable(
|
export const documents = pgTable(
|
||||||
'documents',
|
'documents',
|
||||||
{
|
{
|
||||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
id: text('id')
|
||||||
|
.primaryKey()
|
||||||
|
.$defaultFn(() => crypto.randomUUID()),
|
||||||
portId: text('port_id')
|
portId: text('port_id')
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => ports.id),
|
.references(() => ports.id),
|
||||||
interestId: text('interest_id'), // references interests.id
|
interestId: text('interest_id'), // references interests.id
|
||||||
clientId: text('client_id').references(() => clients.id),
|
clientId: text('client_id').references(() => clients.id),
|
||||||
|
yachtId: text('yacht_id'), // FK wired in relations.ts
|
||||||
|
companyId: text('company_id'), // FK wired in relations.ts
|
||||||
documentType: text('document_type').notNull(), // eoi, contract, nda, reservation_agreement, other
|
documentType: text('document_type').notNull(), // eoi, contract, nda, reservation_agreement, other
|
||||||
title: text('title').notNull(),
|
title: text('title').notNull(),
|
||||||
status: text('status').notNull().default('draft'), // draft, sent, partially_signed, completed, expired, cancelled
|
status: text('status').notNull().default('draft'), // draft, sent, partially_signed, completed, expired, cancelled
|
||||||
@@ -61,6 +71,8 @@ export const documents = pgTable(
|
|||||||
index('idx_docs_port').on(table.portId),
|
index('idx_docs_port').on(table.portId),
|
||||||
index('idx_docs_interest').on(table.interestId),
|
index('idx_docs_interest').on(table.interestId),
|
||||||
index('idx_docs_client').on(table.clientId),
|
index('idx_docs_client').on(table.clientId),
|
||||||
|
index('idx_documents_yacht').on(table.yachtId),
|
||||||
|
index('idx_documents_company').on(table.companyId),
|
||||||
index('idx_docs_type').on(table.portId, table.documentType),
|
index('idx_docs_type').on(table.portId, table.documentType),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
@@ -68,7 +80,9 @@ export const documents = pgTable(
|
|||||||
export const documentSigners = pgTable(
|
export const documentSigners = pgTable(
|
||||||
'document_signers',
|
'document_signers',
|
||||||
{
|
{
|
||||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
id: text('id')
|
||||||
|
.primaryKey()
|
||||||
|
.$defaultFn(() => crypto.randomUUID()),
|
||||||
documentId: text('document_id')
|
documentId: text('document_id')
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => documents.id, { onDelete: 'cascade' }),
|
.references(() => documents.id, { onDelete: 'cascade' }),
|
||||||
@@ -88,7 +102,9 @@ export const documentSigners = pgTable(
|
|||||||
export const documentEvents = pgTable(
|
export const documentEvents = pgTable(
|
||||||
'document_events',
|
'document_events',
|
||||||
{
|
{
|
||||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
id: text('id')
|
||||||
|
.primaryKey()
|
||||||
|
.$defaultFn(() => crypto.randomUUID()),
|
||||||
documentId: text('document_id')
|
documentId: text('document_id')
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => documents.id, { onDelete: 'cascade' }),
|
.references(() => documents.id, { onDelete: 'cascade' }),
|
||||||
@@ -100,16 +116,18 @@ export const documentEvents = pgTable(
|
|||||||
},
|
},
|
||||||
(table) => [
|
(table) => [
|
||||||
index('idx_de_doc').on(table.documentId),
|
index('idx_de_doc').on(table.documentId),
|
||||||
uniqueIndex('idx_de_dedup').on(table.documentId, table.signatureHash).where(
|
uniqueIndex('idx_de_dedup')
|
||||||
sql`${table.signatureHash} IS NOT NULL`
|
.on(table.documentId, table.signatureHash)
|
||||||
),
|
.where(sql`${table.signatureHash} IS NOT NULL`),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
export const documentTemplates = pgTable(
|
export const documentTemplates = pgTable(
|
||||||
'document_templates',
|
'document_templates',
|
||||||
{
|
{
|
||||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
id: text('id')
|
||||||
|
.primaryKey()
|
||||||
|
.$defaultFn(() => crypto.randomUUID()),
|
||||||
portId: text('port_id')
|
portId: text('port_id')
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => ports.id),
|
.references(() => ports.id),
|
||||||
@@ -132,7 +150,9 @@ export const documentTemplates = pgTable(
|
|||||||
export const formTemplates = pgTable(
|
export const formTemplates = pgTable(
|
||||||
'form_templates',
|
'form_templates',
|
||||||
{
|
{
|
||||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
id: text('id')
|
||||||
|
.primaryKey()
|
||||||
|
.$defaultFn(() => crypto.randomUUID()),
|
||||||
portId: text('port_id')
|
portId: text('port_id')
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => ports.id),
|
.references(() => ports.id),
|
||||||
@@ -151,7 +171,9 @@ export const formTemplates = pgTable(
|
|||||||
export const formSubmissions = pgTable(
|
export const formSubmissions = pgTable(
|
||||||
'form_submissions',
|
'form_submissions',
|
||||||
{
|
{
|
||||||
id: text('id').primaryKey().$defaultFn(() => crypto.randomUUID()),
|
id: text('id')
|
||||||
|
.primaryKey()
|
||||||
|
.$defaultFn(() => crypto.randomUUID()),
|
||||||
formTemplateId: text('form_template_id')
|
formTemplateId: text('form_template_id')
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => formTemplates.id),
|
.references(() => formTemplates.id),
|
||||||
|
|||||||
Reference in New Issue
Block a user