@sqlml/ui 0.3.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.
Files changed (104) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/client/dist/assets/index-CpRgSqWF.js +672 -0
  4. package/client/dist/assets/index-DMcl7wPy.css +1 -0
  5. package/client/dist/favicon.svg +17 -0
  6. package/client/dist/index.html +14 -0
  7. package/package.json +66 -0
  8. package/server/dist/app.module.d.ts +2 -0
  9. package/server/dist/app.module.js +55 -0
  10. package/server/dist/app.module.js.map +1 -0
  11. package/server/dist/common/entities/workspace.entity.d.ts +42 -0
  12. package/server/dist/common/entities/workspace.entity.js +48 -0
  13. package/server/dist/common/entities/workspace.entity.js.map +1 -0
  14. package/server/dist/core/core.module.d.ts +2 -0
  15. package/server/dist/core/core.module.js +31 -0
  16. package/server/dist/core/core.module.js.map +1 -0
  17. package/server/dist/core/health.controller.d.ts +7 -0
  18. package/server/dist/core/health.controller.js +37 -0
  19. package/server/dist/core/health.controller.js.map +1 -0
  20. package/server/dist/core/root.controller.d.ts +4 -0
  21. package/server/dist/core/root.controller.js +95 -0
  22. package/server/dist/core/root.controller.js.map +1 -0
  23. package/server/dist/core/sqlml.service.d.ts +80 -0
  24. package/server/dist/core/sqlml.service.js +237 -0
  25. package/server/dist/core/sqlml.service.js.map +1 -0
  26. package/server/dist/main.d.ts +1 -0
  27. package/server/dist/main.js +45 -0
  28. package/server/dist/main.js.map +1 -0
  29. package/server/dist/modules/config/config.controller.d.ts +18 -0
  30. package/server/dist/modules/config/config.controller.js +76 -0
  31. package/server/dist/modules/config/config.controller.js.map +1 -0
  32. package/server/dist/modules/config/config.module.d.ts +2 -0
  33. package/server/dist/modules/config/config.module.js +27 -0
  34. package/server/dist/modules/config/config.module.js.map +1 -0
  35. package/server/dist/modules/config/config.service.d.ts +31 -0
  36. package/server/dist/modules/config/config.service.js +376 -0
  37. package/server/dist/modules/config/config.service.js.map +1 -0
  38. package/server/dist/modules/database/database-connection.entity.d.ts +17 -0
  39. package/server/dist/modules/database/database-connection.entity.js +78 -0
  40. package/server/dist/modules/database/database-connection.entity.js.map +1 -0
  41. package/server/dist/modules/database/database.controller.d.ts +103 -0
  42. package/server/dist/modules/database/database.controller.js +236 -0
  43. package/server/dist/modules/database/database.controller.js.map +1 -0
  44. package/server/dist/modules/database/database.module.d.ts +2 -0
  45. package/server/dist/modules/database/database.module.js +26 -0
  46. package/server/dist/modules/database/database.module.js.map +1 -0
  47. package/server/dist/modules/database/database.service.d.ts +102 -0
  48. package/server/dist/modules/database/database.service.js +415 -0
  49. package/server/dist/modules/database/database.service.js.map +1 -0
  50. package/server/dist/modules/migration/migration-history.entity.d.ts +14 -0
  51. package/server/dist/modules/migration/migration-history.entity.js +66 -0
  52. package/server/dist/modules/migration/migration-history.entity.js.map +1 -0
  53. package/server/dist/modules/migration/migration-template.entity.d.ts +10 -0
  54. package/server/dist/modules/migration/migration-template.entity.js +52 -0
  55. package/server/dist/modules/migration/migration-template.entity.js.map +1 -0
  56. package/server/dist/modules/migration/migration.controller.d.ts +60 -0
  57. package/server/dist/modules/migration/migration.controller.js +159 -0
  58. package/server/dist/modules/migration/migration.controller.js.map +1 -0
  59. package/server/dist/modules/migration/migration.module.d.ts +2 -0
  60. package/server/dist/modules/migration/migration.module.js +27 -0
  61. package/server/dist/modules/migration/migration.module.js.map +1 -0
  62. package/server/dist/modules/migration/migration.service.d.ts +65 -0
  63. package/server/dist/modules/migration/migration.service.js +195 -0
  64. package/server/dist/modules/migration/migration.service.js.map +1 -0
  65. package/server/dist/modules/schema/dbml-diff.util.d.ts +42 -0
  66. package/server/dist/modules/schema/dbml-diff.util.js +193 -0
  67. package/server/dist/modules/schema/dbml-diff.util.js.map +1 -0
  68. package/server/dist/modules/schema/schema-snapshot.entity.d.ts +13 -0
  69. package/server/dist/modules/schema/schema-snapshot.entity.js +62 -0
  70. package/server/dist/modules/schema/schema-snapshot.entity.js.map +1 -0
  71. package/server/dist/modules/schema/schema.controller.d.ts +62 -0
  72. package/server/dist/modules/schema/schema.controller.js +188 -0
  73. package/server/dist/modules/schema/schema.controller.js.map +1 -0
  74. package/server/dist/modules/schema/schema.module.d.ts +2 -0
  75. package/server/dist/modules/schema/schema.module.js +30 -0
  76. package/server/dist/modules/schema/schema.module.js.map +1 -0
  77. package/server/dist/modules/schema/schema.service.d.ts +53 -0
  78. package/server/dist/modules/schema/schema.service.js +276 -0
  79. package/server/dist/modules/schema/schema.service.js.map +1 -0
  80. package/server/dist/modules/system/process-info.entity.d.ts +8 -0
  81. package/server/dist/modules/system/process-info.entity.js +44 -0
  82. package/server/dist/modules/system/process-info.entity.js.map +1 -0
  83. package/server/dist/modules/system/system.controller.d.ts +25 -0
  84. package/server/dist/modules/system/system.controller.js +64 -0
  85. package/server/dist/modules/system/system.controller.js.map +1 -0
  86. package/server/dist/modules/system/system.module.d.ts +2 -0
  87. package/server/dist/modules/system/system.module.js +26 -0
  88. package/server/dist/modules/system/system.module.js.map +1 -0
  89. package/server/dist/modules/system/system.service.d.ts +25 -0
  90. package/server/dist/modules/system/system.service.js +100 -0
  91. package/server/dist/modules/system/system.service.js.map +1 -0
  92. package/server/dist/modules/workspace/workspace.controller.d.ts +35 -0
  93. package/server/dist/modules/workspace/workspace.controller.js +132 -0
  94. package/server/dist/modules/workspace/workspace.controller.js.map +1 -0
  95. package/server/dist/modules/workspace/workspace.dto.d.ts +9 -0
  96. package/server/dist/modules/workspace/workspace.dto.js +39 -0
  97. package/server/dist/modules/workspace/workspace.dto.js.map +1 -0
  98. package/server/dist/modules/workspace/workspace.module.d.ts +2 -0
  99. package/server/dist/modules/workspace/workspace.module.js +26 -0
  100. package/server/dist/modules/workspace/workspace.module.js.map +1 -0
  101. package/server/dist/modules/workspace/workspace.service.d.ts +44 -0
  102. package/server/dist/modules/workspace/workspace.service.js +93 -0
  103. package/server/dist/modules/workspace/workspace.service.js.map +1 -0
  104. package/server/dist/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,376 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ConfigService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const typeorm_1 = require("@nestjs/typeorm");
18
+ const typeorm_2 = require("typeorm");
19
+ const fs = require("fs");
20
+ const path = require("path");
21
+ const workspace_entity_1 = require("../../common/entities/workspace.entity");
22
+ let ConfigService = class ConfigService {
23
+ constructor(workspaceRepository) {
24
+ this.workspaceRepository = workspaceRepository;
25
+ this.workspacePath = process.env.SQLML_WORKSPACE || process.cwd();
26
+ this.configFilePath = path.join(this.workspacePath, '.sqlml', '.config-sqlml');
27
+ }
28
+ ensureConfigDir() {
29
+ const configDir = path.join(this.workspacePath, '.sqlml');
30
+ if (!fs.existsSync(configDir)) {
31
+ fs.mkdirSync(configDir, { recursive: true });
32
+ }
33
+ }
34
+ parseDotenv(content) {
35
+ const result = {};
36
+ const lines = content.split('\n');
37
+ for (const line of lines) {
38
+ const trimmed = line.trim();
39
+ if (trimmed && !trimmed.startsWith('#')) {
40
+ const eqIndex = trimmed.indexOf('=');
41
+ if (eqIndex > 0) {
42
+ const key = trimmed.substring(0, eqIndex).trim();
43
+ const value = trimmed.substring(eqIndex + 1).trim();
44
+ result[key] = value;
45
+ }
46
+ }
47
+ }
48
+ return result;
49
+ }
50
+ dotenvToConfig(env) {
51
+ return {
52
+ database: {
53
+ type: env.DB_TYPE || 'postgres',
54
+ host: env.DB_HOST || 'localhost',
55
+ port: env.DB_PORT ? parseInt(env.DB_PORT, 10) : 5432,
56
+ name: env.DB_NAME || 'database',
57
+ user: env.DB_USER || 'postgres',
58
+ password: env.DB_PASSWORD,
59
+ ssl: env.DB_SSL === 'true',
60
+ },
61
+ paths: {
62
+ schema: env.SCHEMA_DIR || './sqlml/src/lib/schema',
63
+ sql: env.SQL_DIR || './sqlml/src/lib/sql',
64
+ entities: env.ENTITIES_DIR || (env.ORM_TYPE === 'prisma' ? './sqlml/src/lib/prisma' : './sqlml/src/lib/entities'),
65
+ ...(env.ORM_TYPE !== 'prisma' && { migrations: env.MIGRATIONS_DIR || './sqlml/src/lib/migrations' }),
66
+ },
67
+ generation: {
68
+ entityCase: env.CASE_ENTITY || 'pascal',
69
+ fileCase: env.CASE_FILE || 'pascal',
70
+ propertyCase: env.CASE_PROPERTY || 'camel',
71
+ pluralize: env.PLURALIZE_NAMES !== 'false',
72
+ ormType: env.ORM_TYPE || 'typeorm',
73
+ },
74
+ ui: {
75
+ port: env.UI_PORT ? parseInt(env.UI_PORT, 10) : 4200,
76
+ theme: env.UI_THEME || 'dark',
77
+ openBrowser: env.UI_OPEN_BROWSER !== 'false',
78
+ },
79
+ };
80
+ }
81
+ configToDotenv(config) {
82
+ const lines = [];
83
+ if (config.paths) {
84
+ if (config.paths.schema)
85
+ lines.push(`SCHEMA_DIR=${config.paths.schema}`);
86
+ if (config.paths.sql)
87
+ lines.push(`SQL_DIR=${config.paths.sql}`);
88
+ if (config.paths.entities)
89
+ lines.push(`ENTITIES_DIR=${config.paths.entities}`);
90
+ if (config.paths.migrations && config.generation?.ormType !== 'prisma')
91
+ lines.push(`MIGRATIONS_DIR=${config.paths.migrations}`);
92
+ }
93
+ if (config.database) {
94
+ if (config.database.type)
95
+ lines.push(`DB_TYPE=${config.database.type}`);
96
+ if (config.database.host)
97
+ lines.push(`DB_HOST=${config.database.host}`);
98
+ if (config.database.port)
99
+ lines.push(`DB_PORT=${config.database.port}`);
100
+ if (config.database.name)
101
+ lines.push(`DB_NAME=${config.database.name}`);
102
+ if (config.database.user)
103
+ lines.push(`DB_USER=${config.database.user}`);
104
+ if (config.database.password)
105
+ lines.push(`DB_PASSWORD=${config.database.password}`);
106
+ if (config.database.ssl !== undefined)
107
+ lines.push(`DB_SSL=${config.database.ssl}`);
108
+ }
109
+ if (config.generation) {
110
+ if (config.generation.entityCase)
111
+ lines.push(`CASE_ENTITY=${config.generation.entityCase}`);
112
+ if (config.generation.fileCase)
113
+ lines.push(`CASE_FILE=${config.generation.fileCase}`);
114
+ if (config.generation.propertyCase)
115
+ lines.push(`CASE_PROPERTY=${config.generation.propertyCase}`);
116
+ if (config.generation.pluralize !== undefined)
117
+ lines.push(`PLURALIZE_NAMES=${config.generation.pluralize}`);
118
+ if (config.generation.ormType)
119
+ lines.push(`ORM_TYPE=${config.generation.ormType}`);
120
+ }
121
+ if (config.ui) {
122
+ if (config.ui.port)
123
+ lines.push(`UI_PORT=${config.ui.port}`);
124
+ if (config.ui.theme)
125
+ lines.push(`UI_THEME=${config.ui.theme}`);
126
+ if (config.ui.openBrowser !== undefined)
127
+ lines.push(`UI_OPEN_BROWSER=${config.ui.openBrowser}`);
128
+ }
129
+ return lines.join('\n');
130
+ }
131
+ readConfigFile() {
132
+ try {
133
+ if (fs.existsSync(this.configFilePath)) {
134
+ const content = fs.readFileSync(this.configFilePath, 'utf-8');
135
+ const env = this.parseDotenv(content);
136
+ return this.dotenvToConfig(env);
137
+ }
138
+ }
139
+ catch {
140
+ }
141
+ return null;
142
+ }
143
+ writeConfigFile(config) {
144
+ this.ensureConfigDir();
145
+ const content = this.configToDotenv(config);
146
+ fs.writeFileSync(this.configFilePath, content, 'utf-8');
147
+ }
148
+ generateUUID() {
149
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
150
+ const r = Math.random() * 16 | 0;
151
+ const v = c === 'x' ? r : (r & 0x3 | 0x8);
152
+ return v.toString(16);
153
+ });
154
+ }
155
+ async getCurrentWorkspace() {
156
+ let workspace = await this.workspaceRepository.findOne({
157
+ where: { path: this.workspacePath },
158
+ });
159
+ if (!workspace) {
160
+ const fileConfig = this.readConfigFile();
161
+ const pathParts = this.workspacePath.split('/');
162
+ const name = pathParts[pathParts.length - 1] || 'workspace';
163
+ workspace = this.workspaceRepository.create({
164
+ name,
165
+ path: this.workspacePath,
166
+ config: fileConfig || this.getDefaultConfig(),
167
+ });
168
+ workspace = await this.workspaceRepository.save(workspace);
169
+ }
170
+ else {
171
+ const fileConfig = this.readConfigFile();
172
+ if (fileConfig) {
173
+ workspace.config = this.deepMerge(workspace.config || {}, fileConfig);
174
+ await this.workspaceRepository.save(workspace);
175
+ }
176
+ }
177
+ return workspace;
178
+ }
179
+ async getConfig() {
180
+ const fileConfig = this.readConfigFile();
181
+ if (fileConfig) {
182
+ return fileConfig;
183
+ }
184
+ const workspace = await this.getCurrentWorkspace();
185
+ return workspace.config || this.getDefaultConfig();
186
+ }
187
+ async updateConfig(data) {
188
+ const workspace = await this.getCurrentWorkspace();
189
+ const updated = this.deepMerge(workspace.config || {}, data);
190
+ workspace.config = updated;
191
+ await this.workspaceRepository.save(workspace);
192
+ this.writeConfigFile(updated);
193
+ return updated;
194
+ }
195
+ async validateConfig() {
196
+ const config = await this.getConfig();
197
+ const errors = [];
198
+ const warnings = [];
199
+ if (config.database) {
200
+ if (!config.database.type) {
201
+ errors.push('database.type is required');
202
+ }
203
+ if (!config.database.host) {
204
+ errors.push('database.host is required');
205
+ }
206
+ if (!config.database.name) {
207
+ errors.push('database.name is required');
208
+ }
209
+ }
210
+ if (config.generation) {
211
+ const validCases = ['pascal', 'camel', 'snake', 'kebab'];
212
+ if (config.generation.entityCase && !validCases.includes(config.generation.entityCase)) {
213
+ errors.push(`Invalid entityCase: ${config.generation.entityCase}`);
214
+ }
215
+ if (config.generation.fileCase && !validCases.includes(config.generation.fileCase)) {
216
+ errors.push(`Invalid fileCase: ${config.generation.fileCase}`);
217
+ }
218
+ if (config.generation.propertyCase && !validCases.includes(config.generation.propertyCase)) {
219
+ errors.push(`Invalid propertyCase: ${config.generation.propertyCase}`);
220
+ }
221
+ }
222
+ return {
223
+ valid: errors.length === 0,
224
+ errors,
225
+ warnings,
226
+ };
227
+ }
228
+ getDefaultConfig() {
229
+ return {
230
+ database: {
231
+ type: 'postgres',
232
+ host: 'localhost',
233
+ port: 5432,
234
+ name: 'database',
235
+ user: 'postgres',
236
+ ssl: false,
237
+ },
238
+ paths: {
239
+ schema: './sqlml/src/lib/schema',
240
+ sql: './sqlml/src/lib/sql',
241
+ entities: './sqlml/src/lib/entities',
242
+ migrations: './sqlml/src/lib/migrations',
243
+ },
244
+ generation: {
245
+ entityCase: 'pascal',
246
+ fileCase: 'pascal',
247
+ propertyCase: 'camel',
248
+ pluralize: true,
249
+ ormType: 'typeorm',
250
+ },
251
+ ui: {
252
+ port: 4200,
253
+ theme: 'dark',
254
+ openBrowser: true,
255
+ },
256
+ };
257
+ }
258
+ deepMerge(target, source) {
259
+ const result = { ...target };
260
+ for (const key of Object.keys(source)) {
261
+ const sourceValue = source[key];
262
+ const targetValue = target[key];
263
+ if (sourceValue &&
264
+ typeof sourceValue === 'object' &&
265
+ !Array.isArray(sourceValue) &&
266
+ targetValue &&
267
+ typeof targetValue === 'object' &&
268
+ !Array.isArray(targetValue)) {
269
+ result[key] = {
270
+ ...targetValue,
271
+ ...sourceValue,
272
+ };
273
+ }
274
+ else if (sourceValue !== undefined) {
275
+ result[key] = sourceValue;
276
+ }
277
+ }
278
+ return result;
279
+ }
280
+ async testConnection(dbConfig) {
281
+ const config = dbConfig || (await this.getConfig()).database;
282
+ if (!config) {
283
+ return {
284
+ success: false,
285
+ message: 'No database configuration found',
286
+ error: 'Database configuration is missing',
287
+ };
288
+ }
289
+ if (!config.type || !config.host || !config.name) {
290
+ return {
291
+ success: false,
292
+ message: 'Incomplete database configuration',
293
+ error: 'Database type, host, and name are required',
294
+ };
295
+ }
296
+ try {
297
+ const port = config.port || this.getDefaultPort(config.type);
298
+ const dbType = config.type;
299
+ const baseOptions = {
300
+ type: dbType,
301
+ host: config.host,
302
+ port: port,
303
+ database: config.name,
304
+ username: config.user,
305
+ password: config.password,
306
+ };
307
+ let options;
308
+ if (dbType === 'postgres') {
309
+ options = {
310
+ ...baseOptions,
311
+ type: 'postgres',
312
+ ssl: config.ssl ? { rejectUnauthorized: false } : false,
313
+ };
314
+ }
315
+ else if (dbType === 'mysql' || dbType === 'mariadb') {
316
+ options = {
317
+ ...baseOptions,
318
+ type: dbType,
319
+ ssl: config.ssl ? { rejectUnauthorized: false } : undefined,
320
+ };
321
+ }
322
+ else if (dbType === 'mssql') {
323
+ options = {
324
+ ...baseOptions,
325
+ type: 'mssql',
326
+ options: {
327
+ encrypt: config.ssl || false,
328
+ trustServerCertificate: true,
329
+ },
330
+ };
331
+ }
332
+ else {
333
+ options = {
334
+ ...baseOptions,
335
+ type: 'sqlite',
336
+ database: config.name,
337
+ };
338
+ }
339
+ const dataSource = new typeorm_2.DataSource(options);
340
+ await dataSource.initialize();
341
+ await dataSource.destroy();
342
+ return {
343
+ success: true,
344
+ message: `Successfully connected to ${config.type} database "${config.name}" at ${config.host}:${port}`,
345
+ };
346
+ }
347
+ catch (error) {
348
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
349
+ return {
350
+ success: false,
351
+ message: 'Failed to connect to database',
352
+ error: errorMessage,
353
+ };
354
+ }
355
+ }
356
+ getDefaultPort(dbType) {
357
+ switch (dbType) {
358
+ case 'postgres':
359
+ return 5432;
360
+ case 'mysql':
361
+ case 'mariadb':
362
+ return 3306;
363
+ case 'mssql':
364
+ return 1433;
365
+ default:
366
+ return 5432;
367
+ }
368
+ }
369
+ };
370
+ exports.ConfigService = ConfigService;
371
+ exports.ConfigService = ConfigService = __decorate([
372
+ (0, common_1.Injectable)(),
373
+ __param(0, (0, typeorm_1.InjectRepository)(workspace_entity_1.Workspace)),
374
+ __metadata("design:paramtypes", [typeorm_2.Repository])
375
+ ], ConfigService);
376
+ //# sourceMappingURL=config.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../../src/modules/config/config.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Workspace } from '../../common/entities/workspace.entity';
2
+ export declare class DatabaseConnection {
3
+ id: string;
4
+ workspaceId: string;
5
+ workspace: Workspace;
6
+ name: string;
7
+ type: string;
8
+ host: string;
9
+ port: number;
10
+ databaseName: string;
11
+ username: string;
12
+ password: string;
13
+ ssl: boolean;
14
+ isDefault: boolean;
15
+ createdAt: Date;
16
+ updatedAt: Date;
17
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DatabaseConnection = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ const workspace_entity_1 = require("../../common/entities/workspace.entity");
15
+ let DatabaseConnection = class DatabaseConnection {
16
+ };
17
+ exports.DatabaseConnection = DatabaseConnection;
18
+ __decorate([
19
+ (0, typeorm_1.PrimaryGeneratedColumn)('uuid'),
20
+ __metadata("design:type", String)
21
+ ], DatabaseConnection.prototype, "id", void 0);
22
+ __decorate([
23
+ (0, typeorm_1.Column)({ name: 'workspace_id' }),
24
+ __metadata("design:type", String)
25
+ ], DatabaseConnection.prototype, "workspaceId", void 0);
26
+ __decorate([
27
+ (0, typeorm_1.ManyToOne)(() => workspace_entity_1.Workspace, { onDelete: 'CASCADE' }),
28
+ (0, typeorm_1.JoinColumn)({ name: 'workspace_id' }),
29
+ __metadata("design:type", workspace_entity_1.Workspace)
30
+ ], DatabaseConnection.prototype, "workspace", void 0);
31
+ __decorate([
32
+ (0, typeorm_1.Column)({ length: 100 }),
33
+ __metadata("design:type", String)
34
+ ], DatabaseConnection.prototype, "name", void 0);
35
+ __decorate([
36
+ (0, typeorm_1.Column)({ length: 50 }),
37
+ __metadata("design:type", String)
38
+ ], DatabaseConnection.prototype, "type", void 0);
39
+ __decorate([
40
+ (0, typeorm_1.Column)({ length: 255 }),
41
+ __metadata("design:type", String)
42
+ ], DatabaseConnection.prototype, "host", void 0);
43
+ __decorate([
44
+ (0, typeorm_1.Column)({ type: 'int' }),
45
+ __metadata("design:type", Number)
46
+ ], DatabaseConnection.prototype, "port", void 0);
47
+ __decorate([
48
+ (0, typeorm_1.Column)({ name: 'database_name', length: 100 }),
49
+ __metadata("design:type", String)
50
+ ], DatabaseConnection.prototype, "databaseName", void 0);
51
+ __decorate([
52
+ (0, typeorm_1.Column)({ length: 100 }),
53
+ __metadata("design:type", String)
54
+ ], DatabaseConnection.prototype, "username", void 0);
55
+ __decorate([
56
+ (0, typeorm_1.Column)({ length: 255, nullable: true }),
57
+ __metadata("design:type", String)
58
+ ], DatabaseConnection.prototype, "password", void 0);
59
+ __decorate([
60
+ (0, typeorm_1.Column)({ type: 'boolean', default: false }),
61
+ __metadata("design:type", Boolean)
62
+ ], DatabaseConnection.prototype, "ssl", void 0);
63
+ __decorate([
64
+ (0, typeorm_1.Column)({ name: 'is_default', type: 'boolean', default: false }),
65
+ __metadata("design:type", Boolean)
66
+ ], DatabaseConnection.prototype, "isDefault", void 0);
67
+ __decorate([
68
+ (0, typeorm_1.CreateDateColumn)({ name: 'created_at' }),
69
+ __metadata("design:type", Date)
70
+ ], DatabaseConnection.prototype, "createdAt", void 0);
71
+ __decorate([
72
+ (0, typeorm_1.UpdateDateColumn)({ name: 'updated_at' }),
73
+ __metadata("design:type", Date)
74
+ ], DatabaseConnection.prototype, "updatedAt", void 0);
75
+ exports.DatabaseConnection = DatabaseConnection = __decorate([
76
+ (0, typeorm_1.Entity)('connections')
77
+ ], DatabaseConnection);
78
+ //# sourceMappingURL=database-connection.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database-connection.entity.js","sourceRoot":"","sources":["../../../src/modules/database/database-connection.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAQiB;AACjB,6EAAmE;AAG5D,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;CA2C9B,CAAA;AA3CY,gDAAkB;AAE7B;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;8CACpB;AAGX;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;;uDACb;AAIpB;IAFC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,4BAAS,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACnD,IAAA,oBAAU,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;8BAC1B,4BAAS;qDAAC;AAGrB;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;gDACX;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;;gDACV;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;gDACX;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;gDACX;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;wDAC1B;AAGrB;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;oDACP;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;oDACvB;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;+CAC/B;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;qDAC7C;AAGnB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAC9B,IAAI;qDAAC;AAGhB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;8BAC9B,IAAI;qDAAC;6BA1CL,kBAAkB;IAD9B,IAAA,gBAAM,EAAC,aAAa,CAAC;GACT,kBAAkB,CA2C9B"}
@@ -0,0 +1,103 @@
1
+ import { DatabaseService } from './database.service';
2
+ export declare class DatabaseController {
3
+ private readonly databaseService;
4
+ constructor(databaseService: DatabaseService);
5
+ listConnections(workspaceId?: string): Promise<import("./database-connection.entity").DatabaseConnection[]>;
6
+ getConnection(id: string): Promise<import("./database-connection.entity").DatabaseConnection | null>;
7
+ createConnection(data: {
8
+ workspaceId: string;
9
+ name: string;
10
+ type: string;
11
+ host: string;
12
+ port: number;
13
+ databaseName: string;
14
+ username: string;
15
+ password?: string;
16
+ ssl?: boolean;
17
+ }): Promise<import("./database-connection.entity").DatabaseConnection>;
18
+ updateConnection(id: string, data: {
19
+ name?: string;
20
+ host?: string;
21
+ port?: number;
22
+ databaseName?: string;
23
+ username?: string;
24
+ password?: string;
25
+ ssl?: boolean;
26
+ }): Promise<import("./database-connection.entity").DatabaseConnection | null>;
27
+ deleteConnection(id: string): Promise<void>;
28
+ testConnection(id: string): Promise<{
29
+ success: boolean;
30
+ error?: string;
31
+ }>;
32
+ setDefault(id: string, workspaceId: string): Promise<void>;
33
+ getSchema(id: string): Promise<{
34
+ tables: Array<{
35
+ name: string;
36
+ columns: Array<{
37
+ name: string;
38
+ type: string;
39
+ nullable: boolean;
40
+ }>;
41
+ }>;
42
+ }>;
43
+ getSchemas(id: string): Promise<{
44
+ schemas: Array<{
45
+ name: string;
46
+ tables: Array<{
47
+ name: string;
48
+ rowCount?: number;
49
+ columns: Array<{
50
+ name: string;
51
+ type: string;
52
+ nullable: boolean;
53
+ primaryKey: boolean;
54
+ defaultValue?: string;
55
+ }>;
56
+ }>;
57
+ }>;
58
+ }>;
59
+ getTableData(id: string, schema: string, table: string, page?: string, pageSize?: string, orderBy?: string, orderDir?: string): Promise<{
60
+ rows: unknown[];
61
+ totalCount: number;
62
+ fields: Array<{
63
+ name: string;
64
+ type: string;
65
+ primaryKey: boolean;
66
+ }>;
67
+ page: number;
68
+ pageSize: number;
69
+ }>;
70
+ insertRow(id: string, data: {
71
+ schema: string;
72
+ table: string;
73
+ row: Record<string, unknown>;
74
+ }): Promise<{
75
+ success: boolean;
76
+ row?: unknown;
77
+ }>;
78
+ updateRow(id: string, data: {
79
+ schema: string;
80
+ table: string;
81
+ where: Record<string, unknown>;
82
+ set: Record<string, unknown>;
83
+ }): Promise<{
84
+ success: boolean;
85
+ rowCount: number;
86
+ }>;
87
+ deleteRow(id: string, data: {
88
+ schema: string;
89
+ table: string;
90
+ where: Record<string, unknown>;
91
+ }): Promise<{
92
+ success: boolean;
93
+ rowCount: number;
94
+ }>;
95
+ executeQuery(id: string, data: {
96
+ query: string;
97
+ schema?: string;
98
+ }): Promise<{
99
+ rows: unknown[];
100
+ rowCount: number;
101
+ fields: string[];
102
+ }>;
103
+ }