fix: MedSchedule ESM import for Router and data table links resolution
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { users, dataTables, dataTableRows, dataTablePermissions, dataTableAccessRules, formFields, forms, formAccessRules, roleMembers, type DataTable, type DataTableRow, type DataTablePermission, type InsertDataTable, type InsertDataTableRow, type InsertDataTablePermission, type DataTableFull, type DataTableAccessRule, type InsertDataTableAccessRule } from "@shared/schema";
|
||||
import { users, dataTables, dataTableRows, dataTablePermissions, dataTableAccessRules, dataTableLinks, formFields, forms, formAccessRules, roleMembers, type DataTable, type DataTableRow, type DataTablePermission, type InsertDataTable, type InsertDataTableRow, type InsertDataTablePermission, type DataTableFull, type DataTableAccessRule, type InsertDataTableAccessRule, type DataTableLink, type DataTableSubdirectory } from "@shared/schema";
|
||||
import { db } from "../db";
|
||||
import { eq, and, desc, sql, inArray } from "drizzle-orm";
|
||||
import { BotsStorage } from "./bots.storage";
|
||||
@@ -56,17 +56,53 @@ export class DataTablesCoreStorage extends BotsStorage {
|
||||
return tablesWithAccess;
|
||||
}
|
||||
|
||||
// =====================================================
|
||||
// DATA TABLE LINKS (подсправочники)
|
||||
// =====================================================
|
||||
|
||||
async getDataTableLinks(parentTableId: number, organizationId: number): Promise<DataTableSubdirectory[]> {
|
||||
const links = await db
|
||||
.select({
|
||||
id: dataTableLinks.id,
|
||||
organizationId: dataTableLinks.organizationId,
|
||||
parentTableId: dataTableLinks.parentTableId,
|
||||
childTableId: dataTableLinks.childTableId,
|
||||
parentColumnIndex: dataTableLinks.parentColumnIndex,
|
||||
childColumnIndex: dataTableLinks.childColumnIndex,
|
||||
parentValues: dataTableLinks.parentValues,
|
||||
createdAt: dataTableLinks.createdAt,
|
||||
updatedAt: dataTableLinks.updatedAt,
|
||||
childTable: {
|
||||
id: dataTables.id,
|
||||
name: dataTables.name,
|
||||
columns: dataTables.columns,
|
||||
},
|
||||
})
|
||||
.from(dataTableLinks)
|
||||
.innerJoin(dataTables, eq(dataTableLinks.childTableId, dataTables.id))
|
||||
.where(and(
|
||||
eq(dataTableLinks.parentTableId, parentTableId),
|
||||
eq(dataTableLinks.organizationId, organizationId),
|
||||
eq(dataTables.isDeleted, false)
|
||||
))
|
||||
.orderBy(dataTableLinks.id);
|
||||
|
||||
return links as DataTableSubdirectory[];
|
||||
}
|
||||
|
||||
async getDataTableFull(id: number, organizationId: number): Promise<DataTableFull | undefined> {
|
||||
const table = await this.getDataTable(id, organizationId);
|
||||
if (!table) return undefined;
|
||||
|
||||
const rows = await this.getDataTableRows(id, organizationId);
|
||||
const permissions = await this.getDataTablePermissions(id, organizationId);
|
||||
const subdirectories = await this.getDataTableLinks(id, organizationId);
|
||||
|
||||
return {
|
||||
...table,
|
||||
rows,
|
||||
permissions,
|
||||
subdirectories,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -312,6 +348,66 @@ export class DataTablesCoreStorage extends BotsStorage {
|
||||
.where(eq(dataTableRows.tableId, tableId));
|
||||
}
|
||||
|
||||
// =====================================================
|
||||
// DATA TABLE LINKS (подсправочники)
|
||||
// =====================================================
|
||||
|
||||
async getDataTableLink(id: number, organizationId: number): Promise<DataTableLink | undefined> {
|
||||
const [link] = await db
|
||||
.select()
|
||||
.from(dataTableLinks)
|
||||
.where(and(
|
||||
eq(dataTableLinks.id, id),
|
||||
eq(dataTableLinks.organizationId, organizationId)
|
||||
));
|
||||
return link || undefined;
|
||||
}
|
||||
|
||||
async createDataTableLink(data: { organizationId: number; parentTableId: number; childTableId: number; parentColumnIndex?: number; childColumnIndex?: number; parentValues?: string[] }): Promise<DataTableLink> {
|
||||
const [link] = await db
|
||||
.insert(dataTableLinks)
|
||||
.values({
|
||||
organizationId: data.organizationId,
|
||||
parentTableId: data.parentTableId,
|
||||
childTableId: data.childTableId,
|
||||
parentColumnIndex: data.parentColumnIndex ?? 0,
|
||||
childColumnIndex: data.childColumnIndex ?? 0,
|
||||
parentValues: data.parentValues ?? [],
|
||||
})
|
||||
.onConflictDoUpdate({
|
||||
target: [dataTableLinks.parentTableId, dataTableLinks.childTableId],
|
||||
set: {
|
||||
parentColumnIndex: data.parentColumnIndex ?? 0,
|
||||
childColumnIndex: data.childColumnIndex ?? 0,
|
||||
parentValues: data.parentValues ?? [],
|
||||
updatedAt: new Date(),
|
||||
},
|
||||
})
|
||||
.returning();
|
||||
return link;
|
||||
}
|
||||
|
||||
async updateDataTableLink(id: number, organizationId: number, updates: Partial<DataTableLink>): Promise<DataTableLink> {
|
||||
const [link] = await db
|
||||
.update(dataTableLinks)
|
||||
.set({ ...updates, updatedAt: new Date() })
|
||||
.where(and(
|
||||
eq(dataTableLinks.id, id),
|
||||
eq(dataTableLinks.organizationId, organizationId)
|
||||
))
|
||||
.returning();
|
||||
return link;
|
||||
}
|
||||
|
||||
async deleteDataTableLink(id: number, organizationId: number): Promise<void> {
|
||||
await db
|
||||
.delete(dataTableLinks)
|
||||
.where(and(
|
||||
eq(dataTableLinks.id, id),
|
||||
eq(dataTableLinks.organizationId, organizationId)
|
||||
));
|
||||
}
|
||||
|
||||
async applyDataTableSync(
|
||||
tableId: number,
|
||||
deleted: { id: number }[],
|
||||
|
||||
Reference in New Issue
Block a user