sqlew 3.7.3 → 3.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +184 -0
- package/LICENSE +0 -0
- package/README.md +2 -2
- package/assets/config.example.toml +0 -0
- package/assets/kanban-style.png +0 -0
- package/assets/sample-agents/README.md +0 -0
- package/assets/sample-agents/sqlew-architect.md +0 -0
- package/assets/sample-agents/sqlew-researcher.md +0 -0
- package/assets/sample-agents/sqlew-scrum-master.md +0 -0
- package/assets/schema.sql +0 -0
- package/assets/sqlew-logo.png +0 -0
- package/dist/cli/db-export.d.ts +29 -0
- package/dist/cli/db-export.d.ts.map +1 -0
- package/dist/cli/db-export.js +251 -0
- package/dist/cli/db-export.js.map +1 -0
- package/dist/cli/db-import.d.ts +31 -0
- package/dist/cli/db-import.d.ts.map +1 -0
- package/dist/cli/db-import.js +258 -0
- package/dist/cli/db-import.js.map +1 -0
- package/dist/cli.js +24 -2
- package/dist/cli.js.map +1 -1
- package/dist/tests/migrations/test-all-versions-real.js +3 -2
- package/dist/tests/migrations/test-all-versions-real.js.map +1 -1
- package/dist/types.d.ts +121 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/exporter/export.d.ts +100 -0
- package/dist/utils/exporter/export.d.ts.map +1 -0
- package/dist/utils/exporter/export.js +363 -0
- package/dist/utils/exporter/export.js.map +1 -0
- package/dist/utils/importer/import.d.ts +29 -0
- package/dist/utils/importer/import.d.ts.map +1 -0
- package/dist/utils/importer/import.js +514 -0
- package/dist/utils/importer/import.js.map +1 -0
- package/dist/utils/importer/master-tables.d.ts +18 -0
- package/dist/utils/importer/master-tables.d.ts.map +1 -0
- package/dist/utils/importer/master-tables.js +255 -0
- package/dist/utils/importer/master-tables.js.map +1 -0
- package/dist/utils/importer/topological-sort.d.ts +61 -0
- package/dist/utils/importer/topological-sort.d.ts.map +1 -0
- package/dist/utils/importer/topological-sort.js +143 -0
- package/dist/utils/importer/topological-sort.js.map +1 -0
- package/docs/ACCEPTANCE_CRITERIA.md +0 -0
- package/docs/AI_AGENT_GUIDE.md +0 -0
- package/docs/ARCHITECTURE.md +0 -0
- package/docs/AUTO_FILE_TRACKING.md +0 -1
- package/docs/BEST_PRACTICES.md +0 -0
- package/docs/CONFIGURATION.md +0 -0
- package/docs/DATABASE_AUTH.md +1 -2
- package/docs/DECISION_CONTEXT.md +0 -0
- package/docs/DECISION_TO_TASK_MIGRATION_GUIDE.md +0 -0
- package/docs/GIT_AWARE_AUTO_COMPLETE.md +0 -0
- package/docs/SHARED_CONCEPTS.md +0 -0
- package/docs/SPECIALIZED_AGENTS.md +0 -0
- package/docs/TASK_ACTIONS.md +0 -0
- package/docs/TASK_DEPENDENCIES.md +0 -0
- package/docs/TASK_LINKING.md +0 -0
- package/docs/TASK_MIGRATION.md +0 -0
- package/docs/TASK_OVERVIEW.md +0 -0
- package/docs/TASK_PRUNING.md +0 -0
- package/docs/TASK_SYSTEM.md +0 -0
- package/docs/TOOL_REFERENCE.md +0 -2
- package/docs/TOOL_SELECTION.md +0 -0
- package/docs/WORKFLOWS.md +0 -0
- package/docs/{DATABASE_MIGRATION.md → cli/DATABASE_MIGRATION.md} +71 -32
- package/docs/cli/DATA_EXPORT_IMPORT.md +400 -0
- package/docs/cli/README.md +227 -0
- package/package.json +3 -2
- package/docs/BASEADAPTER_IMPLEMENTATION.md +0 -399
- package/docs/HELP_PREVIEW_COMPARISON.md +0 -259
- package/docs/MIGRATION_CHAIN.md +0 -293
- package/docs/MIGRATION_v2.md +0 -538
- package/docs/MIGRATION_v3.3.md +0 -602
- package/docs/MIGRATION_v3.6.0.md +0 -170
- package/docs/MULTI_PROJECT_ARCHITECTURE.md +0 -497
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Export Utility - Data-only export for append-import
|
|
3
|
+
* Schema-less export format for merging data across sqlew databases
|
|
4
|
+
*/
|
|
5
|
+
import { Knex } from 'knex';
|
|
6
|
+
export interface JsonExportOptions {
|
|
7
|
+
projectName?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface JsonExport {
|
|
10
|
+
metadata: {
|
|
11
|
+
sqlew_version: string;
|
|
12
|
+
schema_version: number;
|
|
13
|
+
exported_at: string;
|
|
14
|
+
export_mode: 'single_project' | 'all_projects';
|
|
15
|
+
database_type: string;
|
|
16
|
+
};
|
|
17
|
+
version: string;
|
|
18
|
+
exported_at: string;
|
|
19
|
+
export_mode: 'single_project' | 'all_projects';
|
|
20
|
+
database_type: string;
|
|
21
|
+
project?: {
|
|
22
|
+
name: string;
|
|
23
|
+
display_name: string | null;
|
|
24
|
+
detection_source: string;
|
|
25
|
+
project_root_path: string | null;
|
|
26
|
+
created_ts: number;
|
|
27
|
+
last_active_ts: number;
|
|
28
|
+
metadata: string | null;
|
|
29
|
+
};
|
|
30
|
+
projects?: Array<{
|
|
31
|
+
name: string;
|
|
32
|
+
display_name: string | null;
|
|
33
|
+
detection_source: string;
|
|
34
|
+
project_root_path: string | null;
|
|
35
|
+
created_ts: number;
|
|
36
|
+
last_active_ts: number;
|
|
37
|
+
metadata: string | null;
|
|
38
|
+
}>;
|
|
39
|
+
master_tables: {
|
|
40
|
+
agents: Array<{
|
|
41
|
+
id: number;
|
|
42
|
+
name: string;
|
|
43
|
+
last_active_ts: number;
|
|
44
|
+
}>;
|
|
45
|
+
files: Array<{
|
|
46
|
+
id: number;
|
|
47
|
+
project_id: number;
|
|
48
|
+
path: string;
|
|
49
|
+
}>;
|
|
50
|
+
context_keys: Array<{
|
|
51
|
+
id: number;
|
|
52
|
+
key: string;
|
|
53
|
+
}>;
|
|
54
|
+
tags: Array<{
|
|
55
|
+
id: number;
|
|
56
|
+
project_id: number;
|
|
57
|
+
name: string;
|
|
58
|
+
}>;
|
|
59
|
+
scopes: Array<{
|
|
60
|
+
id: number;
|
|
61
|
+
project_id: number;
|
|
62
|
+
name: string;
|
|
63
|
+
}>;
|
|
64
|
+
constraint_categories: Array<{
|
|
65
|
+
id: number;
|
|
66
|
+
name: string;
|
|
67
|
+
}>;
|
|
68
|
+
layers: Array<{
|
|
69
|
+
id: number;
|
|
70
|
+
name: string;
|
|
71
|
+
}>;
|
|
72
|
+
task_statuses: Array<{
|
|
73
|
+
id: number;
|
|
74
|
+
name: string;
|
|
75
|
+
}>;
|
|
76
|
+
};
|
|
77
|
+
transaction_tables: {
|
|
78
|
+
decisions: any[];
|
|
79
|
+
decisions_numeric: any[];
|
|
80
|
+
decision_history: any[];
|
|
81
|
+
decision_tags: any[];
|
|
82
|
+
decision_scopes: any[];
|
|
83
|
+
decision_context: any[];
|
|
84
|
+
file_changes: any[];
|
|
85
|
+
constraints: any[];
|
|
86
|
+
constraint_tags: any[];
|
|
87
|
+
tasks: any[];
|
|
88
|
+
task_details: any[];
|
|
89
|
+
task_tags: any[];
|
|
90
|
+
task_file_links: any[];
|
|
91
|
+
task_decision_links: any[];
|
|
92
|
+
task_dependencies: any[];
|
|
93
|
+
activity_log: any[];
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Generate JSON export from database
|
|
98
|
+
*/
|
|
99
|
+
export declare function generateJsonExport(knex: Knex, options?: JsonExportOptions): Promise<string>;
|
|
100
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/utils/exporter/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Export Utility - Data-only export for append-import
|
|
3
|
+
* Schema-less export format for merging data across sqlew databases
|
|
4
|
+
*/
|
|
5
|
+
// ============================================================================
|
|
6
|
+
// Export Functions
|
|
7
|
+
// ============================================================================
|
|
8
|
+
/**
|
|
9
|
+
* Generate JSON export from database
|
|
10
|
+
*/
|
|
11
|
+
export async function generateJsonExport(knex, options = {}) {
|
|
12
|
+
const { projectName } = options;
|
|
13
|
+
// Determine export mode and get project ID(s)
|
|
14
|
+
let exportMode;
|
|
15
|
+
let projectIds;
|
|
16
|
+
let projectData;
|
|
17
|
+
if (projectName) {
|
|
18
|
+
exportMode = 'single_project';
|
|
19
|
+
// Get project by name
|
|
20
|
+
const project = await knex('m_projects')
|
|
21
|
+
.where({ name: projectName })
|
|
22
|
+
.first();
|
|
23
|
+
if (!project) {
|
|
24
|
+
throw new Error(`Project not found: ${projectName}`);
|
|
25
|
+
}
|
|
26
|
+
projectIds = [project.id];
|
|
27
|
+
projectData = {
|
|
28
|
+
name: project.name,
|
|
29
|
+
display_name: project.display_name,
|
|
30
|
+
detection_source: project.detection_source,
|
|
31
|
+
project_root_path: project.project_root_path,
|
|
32
|
+
created_ts: project.created_ts,
|
|
33
|
+
last_active_ts: project.last_active_ts,
|
|
34
|
+
metadata: project.metadata,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
exportMode = 'all_projects';
|
|
39
|
+
// Get all projects
|
|
40
|
+
const projects = await knex('m_projects').select('*');
|
|
41
|
+
projectIds = projects.map(p => p.id);
|
|
42
|
+
projectData = projects.map(p => ({
|
|
43
|
+
name: p.name,
|
|
44
|
+
display_name: p.display_name,
|
|
45
|
+
detection_source: p.detection_source,
|
|
46
|
+
project_root_path: p.project_root_path,
|
|
47
|
+
created_ts: p.created_ts,
|
|
48
|
+
last_active_ts: p.last_active_ts,
|
|
49
|
+
metadata: p.metadata,
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
// Get database type
|
|
53
|
+
const dbType = knex.client.config.client;
|
|
54
|
+
const databaseType = dbType === 'better-sqlite3' || dbType === 'sqlite3' ? 'sqlite'
|
|
55
|
+
: dbType === 'mysql' || dbType === 'mysql2' ? 'mysql'
|
|
56
|
+
: 'postgresql';
|
|
57
|
+
// Build JSON export structure
|
|
58
|
+
const exportTimestamp = new Date().toISOString();
|
|
59
|
+
const jsonExport = {
|
|
60
|
+
// New metadata format (v3.7.3+)
|
|
61
|
+
metadata: {
|
|
62
|
+
sqlew_version: '3.7.3',
|
|
63
|
+
schema_version: 3, // Schema v3 = v3.7.x multi-project support
|
|
64
|
+
exported_at: exportTimestamp,
|
|
65
|
+
export_mode: exportMode,
|
|
66
|
+
database_type: databaseType,
|
|
67
|
+
},
|
|
68
|
+
// Legacy fields (backward compatibility)
|
|
69
|
+
version: '3.7.3',
|
|
70
|
+
exported_at: exportTimestamp,
|
|
71
|
+
export_mode: exportMode,
|
|
72
|
+
database_type: databaseType,
|
|
73
|
+
master_tables: {
|
|
74
|
+
agents: [],
|
|
75
|
+
files: [],
|
|
76
|
+
context_keys: [],
|
|
77
|
+
tags: [],
|
|
78
|
+
scopes: [],
|
|
79
|
+
constraint_categories: [],
|
|
80
|
+
layers: [],
|
|
81
|
+
task_statuses: [],
|
|
82
|
+
},
|
|
83
|
+
transaction_tables: {
|
|
84
|
+
decisions: [],
|
|
85
|
+
decisions_numeric: [],
|
|
86
|
+
decision_history: [],
|
|
87
|
+
decision_tags: [],
|
|
88
|
+
decision_scopes: [],
|
|
89
|
+
decision_context: [],
|
|
90
|
+
file_changes: [],
|
|
91
|
+
constraints: [],
|
|
92
|
+
constraint_tags: [],
|
|
93
|
+
tasks: [],
|
|
94
|
+
task_details: [],
|
|
95
|
+
task_tags: [],
|
|
96
|
+
task_file_links: [],
|
|
97
|
+
task_decision_links: [],
|
|
98
|
+
task_dependencies: [],
|
|
99
|
+
activity_log: [],
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
// Add project data
|
|
103
|
+
if (exportMode === 'single_project') {
|
|
104
|
+
jsonExport.project = projectData;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
jsonExport.projects = projectData;
|
|
108
|
+
}
|
|
109
|
+
// Export master tables (only used IDs)
|
|
110
|
+
jsonExport.master_tables = await exportMasterTables(knex, projectIds);
|
|
111
|
+
// Export transaction tables (filtered by project_id)
|
|
112
|
+
jsonExport.transaction_tables = await exportTransactionTables(knex, projectIds);
|
|
113
|
+
return JSON.stringify(jsonExport, null, 2);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Export master tables - only entries used by specified project(s)
|
|
117
|
+
*/
|
|
118
|
+
async function exportMasterTables(knex, projectIds) {
|
|
119
|
+
const masterTables = {
|
|
120
|
+
agents: [],
|
|
121
|
+
files: [],
|
|
122
|
+
context_keys: [],
|
|
123
|
+
tags: [],
|
|
124
|
+
scopes: [],
|
|
125
|
+
constraint_categories: [],
|
|
126
|
+
layers: [],
|
|
127
|
+
task_statuses: [],
|
|
128
|
+
};
|
|
129
|
+
// Get used agent IDs from all transaction tables
|
|
130
|
+
const usedAgentIds = new Set();
|
|
131
|
+
// From t_decisions
|
|
132
|
+
const decisionAgents = await knex('t_decisions')
|
|
133
|
+
.whereIn('project_id', projectIds)
|
|
134
|
+
.whereNotNull('agent_id')
|
|
135
|
+
.distinct('agent_id');
|
|
136
|
+
decisionAgents.forEach(row => usedAgentIds.add(row.agent_id));
|
|
137
|
+
// From t_file_changes
|
|
138
|
+
const fileChangeAgents = await knex('t_file_changes')
|
|
139
|
+
.whereIn('project_id', projectIds)
|
|
140
|
+
.distinct('agent_id');
|
|
141
|
+
fileChangeAgents.forEach(row => usedAgentIds.add(row.agent_id));
|
|
142
|
+
// From t_constraints
|
|
143
|
+
const constraintAgents = await knex('t_constraints')
|
|
144
|
+
.whereIn('project_id', projectIds)
|
|
145
|
+
.whereNotNull('agent_id')
|
|
146
|
+
.distinct('agent_id');
|
|
147
|
+
constraintAgents.forEach(row => usedAgentIds.add(row.agent_id));
|
|
148
|
+
// From t_tasks
|
|
149
|
+
const taskAgents = await knex('t_tasks')
|
|
150
|
+
.whereIn('project_id', projectIds)
|
|
151
|
+
.whereNotNull('assigned_agent_id')
|
|
152
|
+
.distinct('assigned_agent_id as agent_id');
|
|
153
|
+
taskAgents.forEach(row => usedAgentIds.add(row.agent_id));
|
|
154
|
+
// From t_decision_context
|
|
155
|
+
const contextAgents = await knex('t_decision_context')
|
|
156
|
+
.whereIn('project_id', projectIds)
|
|
157
|
+
.whereNotNull('agent_id')
|
|
158
|
+
.distinct('agent_id');
|
|
159
|
+
contextAgents.forEach(row => usedAgentIds.add(row.agent_id));
|
|
160
|
+
if (usedAgentIds.size > 0) {
|
|
161
|
+
masterTables.agents = await knex('m_agents')
|
|
162
|
+
.whereIn('id', Array.from(usedAgentIds))
|
|
163
|
+
.select('id', 'name', 'last_active_ts');
|
|
164
|
+
}
|
|
165
|
+
// Get used file IDs from t_file_changes and t_task_file_links
|
|
166
|
+
const usedFileIds = new Set();
|
|
167
|
+
const fileChanges = await knex('t_file_changes')
|
|
168
|
+
.whereIn('project_id', projectIds)
|
|
169
|
+
.distinct('file_id');
|
|
170
|
+
fileChanges.forEach(row => usedFileIds.add(row.file_id));
|
|
171
|
+
const taskFiles = await knex('t_task_file_links')
|
|
172
|
+
.whereIn('project_id', projectIds)
|
|
173
|
+
.distinct('file_id');
|
|
174
|
+
taskFiles.forEach(row => usedFileIds.add(row.file_id));
|
|
175
|
+
if (usedFileIds.size > 0) {
|
|
176
|
+
masterTables.files = await knex('m_files')
|
|
177
|
+
.whereIn('id', Array.from(usedFileIds))
|
|
178
|
+
.select('id', 'project_id', 'path');
|
|
179
|
+
}
|
|
180
|
+
// Get used context key IDs from t_decisions
|
|
181
|
+
const usedKeyIds = new Set();
|
|
182
|
+
const decisions = await knex('t_decisions')
|
|
183
|
+
.whereIn('project_id', projectIds)
|
|
184
|
+
.distinct('key_id');
|
|
185
|
+
decisions.forEach(row => usedKeyIds.add(row.key_id));
|
|
186
|
+
const decisionsNumeric = await knex('t_decisions_numeric')
|
|
187
|
+
.whereIn('project_id', projectIds)
|
|
188
|
+
.distinct('key_id');
|
|
189
|
+
decisionsNumeric.forEach(row => usedKeyIds.add(row.key_id));
|
|
190
|
+
const taskDecisionLinks = await knex('t_task_decision_links')
|
|
191
|
+
.whereIn('project_id', projectIds)
|
|
192
|
+
.distinct('decision_key_id as key_id');
|
|
193
|
+
taskDecisionLinks.forEach(row => usedKeyIds.add(row.key_id));
|
|
194
|
+
if (usedKeyIds.size > 0) {
|
|
195
|
+
masterTables.context_keys = await knex('m_context_keys')
|
|
196
|
+
.whereIn('id', Array.from(usedKeyIds))
|
|
197
|
+
.select('id', 'key');
|
|
198
|
+
}
|
|
199
|
+
// Get used tag IDs from various tag tables
|
|
200
|
+
const usedTagIds = new Set();
|
|
201
|
+
// Join through parent table (t_decisions) to filter by project_id
|
|
202
|
+
// Note: t_decision_tags uses decision_key_id (references m_context_keys.id)
|
|
203
|
+
const decisionTags = await knex('t_decision_tags as dt')
|
|
204
|
+
.join('t_decisions as d', 'dt.decision_key_id', 'd.key_id')
|
|
205
|
+
.whereIn('d.project_id', projectIds)
|
|
206
|
+
.distinct('dt.tag_id');
|
|
207
|
+
decisionTags.forEach(row => usedTagIds.add(row.tag_id));
|
|
208
|
+
// Join through parent table (t_constraints) to filter by project_id
|
|
209
|
+
const constraintTags = await knex('t_constraint_tags as ct')
|
|
210
|
+
.join('t_constraints as c', 'ct.constraint_id', 'c.id')
|
|
211
|
+
.whereIn('c.project_id', projectIds)
|
|
212
|
+
.distinct('ct.tag_id');
|
|
213
|
+
constraintTags.forEach(row => usedTagIds.add(row.tag_id));
|
|
214
|
+
// Join through parent table (t_tasks) to filter by project_id
|
|
215
|
+
const taskTags = await knex('t_task_tags as tt')
|
|
216
|
+
.join('t_tasks as t', 'tt.task_id', 't.id')
|
|
217
|
+
.whereIn('t.project_id', projectIds)
|
|
218
|
+
.distinct('tt.tag_id');
|
|
219
|
+
taskTags.forEach(row => usedTagIds.add(row.tag_id));
|
|
220
|
+
if (usedTagIds.size > 0) {
|
|
221
|
+
masterTables.tags = await knex('m_tags')
|
|
222
|
+
.whereIn('id', Array.from(usedTagIds))
|
|
223
|
+
.select('id', 'project_id', 'name');
|
|
224
|
+
}
|
|
225
|
+
// Get used scope IDs from t_decision_scopes
|
|
226
|
+
const usedScopeIds = new Set();
|
|
227
|
+
// Join through parent table (t_decisions) to filter by project_id
|
|
228
|
+
// Note: t_decision_scopes uses decision_key_id (references m_context_keys.id)
|
|
229
|
+
const decisionScopes = await knex('t_decision_scopes as ds')
|
|
230
|
+
.join('t_decisions as d', 'ds.decision_key_id', 'd.key_id')
|
|
231
|
+
.whereIn('d.project_id', projectIds)
|
|
232
|
+
.distinct('ds.scope_id');
|
|
233
|
+
decisionScopes.forEach(row => usedScopeIds.add(row.scope_id));
|
|
234
|
+
if (usedScopeIds.size > 0) {
|
|
235
|
+
masterTables.scopes = await knex('m_scopes')
|
|
236
|
+
.whereIn('id', Array.from(usedScopeIds))
|
|
237
|
+
.select('id', 'project_id', 'name');
|
|
238
|
+
}
|
|
239
|
+
// Get used category IDs from t_constraints
|
|
240
|
+
const usedCategoryIds = new Set();
|
|
241
|
+
const constraints = await knex('t_constraints')
|
|
242
|
+
.whereIn('project_id', projectIds)
|
|
243
|
+
.distinct('category_id');
|
|
244
|
+
constraints.forEach(row => usedCategoryIds.add(row.category_id));
|
|
245
|
+
if (usedCategoryIds.size > 0) {
|
|
246
|
+
masterTables.constraint_categories = await knex('m_constraint_categories')
|
|
247
|
+
.whereIn('id', Array.from(usedCategoryIds))
|
|
248
|
+
.select('id', 'name');
|
|
249
|
+
}
|
|
250
|
+
// Get used layer IDs from all tables that reference layers
|
|
251
|
+
const usedLayerIds = new Set();
|
|
252
|
+
const decisionLayers = await knex('t_decisions')
|
|
253
|
+
.whereIn('project_id', projectIds)
|
|
254
|
+
.whereNotNull('layer_id')
|
|
255
|
+
.distinct('layer_id');
|
|
256
|
+
decisionLayers.forEach(row => usedLayerIds.add(row.layer_id));
|
|
257
|
+
const fileChangeLayers = await knex('t_file_changes')
|
|
258
|
+
.whereIn('project_id', projectIds)
|
|
259
|
+
.whereNotNull('layer_id')
|
|
260
|
+
.distinct('layer_id');
|
|
261
|
+
fileChangeLayers.forEach(row => usedLayerIds.add(row.layer_id));
|
|
262
|
+
const constraintLayers = await knex('t_constraints')
|
|
263
|
+
.whereIn('project_id', projectIds)
|
|
264
|
+
.whereNotNull('layer_id')
|
|
265
|
+
.distinct('layer_id');
|
|
266
|
+
constraintLayers.forEach(row => usedLayerIds.add(row.layer_id));
|
|
267
|
+
const taskLayers = await knex('t_tasks')
|
|
268
|
+
.whereIn('project_id', projectIds)
|
|
269
|
+
.whereNotNull('layer_id')
|
|
270
|
+
.distinct('layer_id');
|
|
271
|
+
taskLayers.forEach(row => usedLayerIds.add(row.layer_id));
|
|
272
|
+
if (usedLayerIds.size > 0) {
|
|
273
|
+
masterTables.layers = await knex('m_layers')
|
|
274
|
+
.whereIn('id', Array.from(usedLayerIds))
|
|
275
|
+
.select('id', 'name');
|
|
276
|
+
}
|
|
277
|
+
// Get all task statuses (these are static enum-like data)
|
|
278
|
+
masterTables.task_statuses = await knex('m_task_statuses')
|
|
279
|
+
.select('id', 'name');
|
|
280
|
+
return masterTables;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Export transaction tables filtered by project_id
|
|
284
|
+
*/
|
|
285
|
+
async function exportTransactionTables(knex, projectIds) {
|
|
286
|
+
const transactionTables = {
|
|
287
|
+
decisions: [],
|
|
288
|
+
decisions_numeric: [],
|
|
289
|
+
decision_history: [],
|
|
290
|
+
decision_tags: [],
|
|
291
|
+
decision_scopes: [],
|
|
292
|
+
decision_context: [],
|
|
293
|
+
file_changes: [],
|
|
294
|
+
constraints: [],
|
|
295
|
+
constraint_tags: [],
|
|
296
|
+
tasks: [],
|
|
297
|
+
task_details: [],
|
|
298
|
+
task_tags: [],
|
|
299
|
+
task_file_links: [],
|
|
300
|
+
task_decision_links: [],
|
|
301
|
+
task_dependencies: [],
|
|
302
|
+
activity_log: [],
|
|
303
|
+
};
|
|
304
|
+
// Export each transaction table
|
|
305
|
+
transactionTables.decisions = await knex('t_decisions')
|
|
306
|
+
.whereIn('project_id', projectIds)
|
|
307
|
+
.select('*');
|
|
308
|
+
transactionTables.decisions_numeric = await knex('t_decisions_numeric')
|
|
309
|
+
.whereIn('project_id', projectIds)
|
|
310
|
+
.select('*');
|
|
311
|
+
transactionTables.decision_history = await knex('t_decision_history')
|
|
312
|
+
.whereIn('project_id', projectIds)
|
|
313
|
+
.select('*');
|
|
314
|
+
// Junction tables - filter by joining through parent table
|
|
315
|
+
// Note: decision junction tables use decision_key_id (references m_context_keys.id)
|
|
316
|
+
transactionTables.decision_tags = await knex('t_decision_tags as dt')
|
|
317
|
+
.join('t_decisions as d', 'dt.decision_key_id', 'd.key_id')
|
|
318
|
+
.whereIn('d.project_id', projectIds)
|
|
319
|
+
.select('dt.*');
|
|
320
|
+
transactionTables.decision_scopes = await knex('t_decision_scopes as ds')
|
|
321
|
+
.join('t_decisions as d', 'ds.decision_key_id', 'd.key_id')
|
|
322
|
+
.whereIn('d.project_id', projectIds)
|
|
323
|
+
.select('ds.*');
|
|
324
|
+
transactionTables.decision_context = await knex('t_decision_context')
|
|
325
|
+
.whereIn('project_id', projectIds)
|
|
326
|
+
.select('*');
|
|
327
|
+
transactionTables.file_changes = await knex('t_file_changes')
|
|
328
|
+
.whereIn('project_id', projectIds)
|
|
329
|
+
.select('*');
|
|
330
|
+
transactionTables.constraints = await knex('t_constraints')
|
|
331
|
+
.whereIn('project_id', projectIds)
|
|
332
|
+
.select('*');
|
|
333
|
+
// Junction table - filter by joining through parent table
|
|
334
|
+
transactionTables.constraint_tags = await knex('t_constraint_tags as ct')
|
|
335
|
+
.join('t_constraints as c', 'ct.constraint_id', 'c.id')
|
|
336
|
+
.whereIn('c.project_id', projectIds)
|
|
337
|
+
.select('ct.*');
|
|
338
|
+
transactionTables.tasks = await knex('t_tasks')
|
|
339
|
+
.whereIn('project_id', projectIds)
|
|
340
|
+
.select('*');
|
|
341
|
+
transactionTables.task_details = await knex('t_task_details')
|
|
342
|
+
.whereIn('project_id', projectIds)
|
|
343
|
+
.select('*');
|
|
344
|
+
// Junction table - filter by joining through parent table
|
|
345
|
+
transactionTables.task_tags = await knex('t_task_tags as tt')
|
|
346
|
+
.join('t_tasks as t', 'tt.task_id', 't.id')
|
|
347
|
+
.whereIn('t.project_id', projectIds)
|
|
348
|
+
.select('tt.*');
|
|
349
|
+
transactionTables.task_file_links = await knex('t_task_file_links')
|
|
350
|
+
.whereIn('project_id', projectIds)
|
|
351
|
+
.select('*');
|
|
352
|
+
transactionTables.task_decision_links = await knex('t_task_decision_links')
|
|
353
|
+
.whereIn('project_id', projectIds)
|
|
354
|
+
.select('*');
|
|
355
|
+
transactionTables.task_dependencies = await knex('t_task_dependencies')
|
|
356
|
+
.whereIn('project_id', projectIds)
|
|
357
|
+
.select('*');
|
|
358
|
+
transactionTables.activity_log = await knex('t_activity_log')
|
|
359
|
+
.whereIn('project_id', projectIds)
|
|
360
|
+
.select('*');
|
|
361
|
+
return transactionTables;
|
|
362
|
+
}
|
|
363
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/utils/exporter/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JSON Import Main Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Coordinates the entire import process with transaction atomicity.
|
|
5
|
+
* Implements architectural decisions #247-259 for safe multi-project data migration.
|
|
6
|
+
*
|
|
7
|
+
* Import Order:
|
|
8
|
+
* 1. Validate JSON schema
|
|
9
|
+
* 2. Check project name conflict (skip if exists)
|
|
10
|
+
* 3. Create new project
|
|
11
|
+
* 4. Import master tables → ID mappings
|
|
12
|
+
* 5. Import transaction data with remapped IDs
|
|
13
|
+
* 6. Import junction tables with remapped IDs
|
|
14
|
+
*/
|
|
15
|
+
import type { Knex } from 'knex';
|
|
16
|
+
import type { JsonImportOptions, JsonImportResult } from '../../types.js';
|
|
17
|
+
/**
|
|
18
|
+
* Main import function
|
|
19
|
+
*
|
|
20
|
+
* Architectural Decision #256: Transaction atomicity
|
|
21
|
+
* All imports wrapped in transaction, rollback on error
|
|
22
|
+
*
|
|
23
|
+
* @param knex - Knex database instance
|
|
24
|
+
* @param jsonData - Parsed JSON export data
|
|
25
|
+
* @param options - Import options
|
|
26
|
+
* @returns Import result with statistics
|
|
27
|
+
*/
|
|
28
|
+
export declare function importJsonData(knex: Knex, jsonData: any, options?: JsonImportOptions): Promise<JsonImportResult>;
|
|
29
|
+
//# sourceMappingURL=import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/utils/importer/import.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAIjB,MAAM,gBAAgB,CAAC;AAIxB;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,GAAG,EACb,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAuD3B"}
|