Five files under `src/main/database/` exceeded 400 LOC by combining multiple responsibilities. Split along natural fault lines. Zero behavior change — each original `build*Methods` factory still returns the same method surface, now via spread of smaller builders. | Original | Split into | LOC each | |-----------------------------------|-------------------------------------|----------------| | tasks-crud.ts (640) | tasks-crud / task-sessions-crud / | 250 / 252 / | | | task-queries | 177 | | agents-hierarchy.ts (487) | agents-hierarchy / agent-permissions| 350 / 151 | | company-settings.ts (476) | company-settings / company-metrics | 122 / 370 | | documents.ts (426) | documents / config-revisions | 318 / 126 | | runs.ts (413) | runs / run-logs / run-events / | 245 / 96 / | | | cost-entries | 82 / 52 | AppDatabase call sites unchanged: - db.tasks.saveTask, db.tasks.ensureAgentSession (task-sessions-crud), db.tasks.listAgentTasks (task-queries) - db.agents.getChainOfCommand, db.agents.hasAgentPermission - db.company.getCompanySettings, db.company.getStandupReport (company-metrics) - db.documentsMod.saveDocument, db.documentsMod.recordConfigRevision - db.runs.createRun, db.runs.appendRunLog (run-logs), db.runs.appendRunEvent (run-events), db.runs.recordCostEntry (cost-entries) `database-base.ts` (449) kept as-is — thin facade where every pass-through is one line; splitting adds mechanical files without behavior benefit. Will revisit if it grows further. Aggregator files (`tasks.ts`, `agents.ts`, `company.ts`) each import and spread the new sub-builders. No renamed exports.
25 lines
1.0 KiB
TypeScript
25 lines
1.0 KiB
TypeScript
import type { DatabaseSync } from "node:sqlite";
|
|
import type { ProfileSnapshot } from "@shared/types";
|
|
import type { ReadAll, Transaction } from "./helpers";
|
|
import { buildCompanyCrudMethods } from "./company-crud";
|
|
import { buildCompanyMetricsMethods } from "./company-metrics";
|
|
import { buildCompanySettingsMethods } from "./company-settings";
|
|
|
|
export function buildCompanyMethods(
|
|
getDb: () => DatabaseSync,
|
|
readAll: ReadAll,
|
|
transaction: Transaction,
|
|
deps: {
|
|
getSetting: (key: string) => string | null;
|
|
setSetting: (key: string, value: string) => void;
|
|
listSnapshot: (options: { companyId?: string | null }) => ProfileSnapshot;
|
|
addComment: (input: { companyId: string; taskId: string; authorAgentId: string | null; authorName: string; body: string }) => void;
|
|
},
|
|
) {
|
|
return {
|
|
...buildCompanyCrudMethods(getDb, readAll, transaction, deps),
|
|
...buildCompanySettingsMethods(getDb, readAll, transaction, { listSnapshot: deps.listSnapshot }),
|
|
...buildCompanyMetricsMethods(getDb, readAll, transaction),
|
|
};
|
|
}
|