fix: MedSchedule ESM import for Router and data table links resolution

This commit is contained in:
2026-07-15 09:58:07 +03:00
parent f519ce95db
commit f560facabd
8 changed files with 791 additions and 76 deletions

View File

@@ -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 }[],