sonamu 0.0.3 → 0.0.5

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 (95) hide show
  1. package/dist/api/init.d.ts +0 -1
  2. package/dist/api/init.d.ts.map +1 -1
  3. package/dist/api/init.js +6 -4
  4. package/dist/api/init.js.map +1 -1
  5. package/dist/database/db.d.ts.map +1 -1
  6. package/dist/database/db.js +6 -6
  7. package/dist/database/db.js.map +1 -1
  8. package/dist/templates/view_form.template.d.ts +2 -2
  9. package/dist/templates/view_list.template.d.ts +2 -2
  10. package/dist/testing/fixture-manager.d.ts +7 -3
  11. package/dist/testing/fixture-manager.d.ts.map +1 -1
  12. package/dist/testing/fixture-manager.js +66 -28
  13. package/dist/testing/fixture-manager.js.map +1 -1
  14. package/dist/types/types.d.ts +10 -10
  15. package/dist/utils/utils.d.ts +1 -0
  16. package/dist/utils/utils.d.ts.map +1 -1
  17. package/dist/utils/utils.js +18 -1
  18. package/dist/utils/utils.js.map +1 -1
  19. package/package.json +1 -1
  20. package/src/api/init.ts +6 -5
  21. package/src/database/db.ts +8 -7
  22. package/src/testing/fixture-manager.ts +53 -29
  23. package/src/utils/utils.ts +14 -0
  24. package/dist/database/f9-base-model.d.ts +0 -39
  25. package/dist/database/f9-base-model.d.ts.map +0 -1
  26. package/dist/database/f9-base-model.js +0 -229
  27. package/dist/database/f9-base-model.js.map +0 -1
  28. package/dist/database/f9-db.d.ts +0 -23
  29. package/dist/database/f9-db.d.ts.map +0 -1
  30. package/dist/database/f9-db.js +0 -109
  31. package/dist/database/f9-db.js.map +0 -1
  32. package/dist/exceptions/exceptions.d.ts +0 -48
  33. package/dist/exceptions/exceptions.d.ts.map +0 -1
  34. package/dist/exceptions/exceptions.js +0 -105
  35. package/dist/exceptions/exceptions.js.map +0 -1
  36. package/dist/exceptions/f9-exception.d.ts +0 -48
  37. package/dist/exceptions/f9-exception.d.ts.map +0 -1
  38. package/dist/exceptions/f9-exception.js +0 -105
  39. package/dist/exceptions/f9-exception.js.map +0 -1
  40. package/dist/exceptions/index.d.ts +0 -3
  41. package/dist/exceptions/index.d.ts.map +0 -1
  42. package/dist/exceptions/index.js +0 -19
  43. package/dist/exceptions/index.js.map +0 -1
  44. package/dist/f9-md/f9-md.d.ts +0 -29
  45. package/dist/f9-md/f9-md.d.ts.map +0 -1
  46. package/dist/f9-md/f9-md.js +0 -148
  47. package/dist/f9-md/f9-md.js.map +0 -1
  48. package/dist/f9-md/index.d.ts +0 -5
  49. package/dist/f9-md/index.d.ts.map +0 -1
  50. package/dist/f9-md/index.js +0 -21
  51. package/dist/f9-md/index.js.map +0 -1
  52. package/dist/f9-md/md-utils.d.ts +0 -55
  53. package/dist/f9-md/md-utils.d.ts.map +0 -1
  54. package/dist/f9-md/md-utils.js +0 -104
  55. package/dist/f9-md/md-utils.js.map +0 -1
  56. package/dist/f9-md/migrator.d.ts +0 -79
  57. package/dist/f9-md/migrator.d.ts.map +0 -1
  58. package/dist/f9-md/migrator.js +0 -1084
  59. package/dist/f9-md/migrator.js.map +0 -1
  60. package/dist/f9-md/model-definition.d.ts +0 -40
  61. package/dist/f9-md/model-definition.d.ts.map +0 -1
  62. package/dist/f9-md/model-definition.js +0 -409
  63. package/dist/f9-md/model-definition.js.map +0 -1
  64. package/dist/templates/bridge.template.d.ts +0 -17
  65. package/dist/templates/bridge.template.d.ts.map +0 -1
  66. package/dist/templates/bridge.template.js +0 -79
  67. package/dist/templates/bridge.template.js.map +0 -1
  68. package/dist/templates/md.template.d.ts +0 -17
  69. package/dist/templates/md.template.d.ts.map +0 -1
  70. package/dist/templates/md.template.js +0 -45
  71. package/dist/templates/md.template.js.map +0 -1
  72. package/dist/testing/f9-fixture-manager.d.ts +0 -16
  73. package/dist/testing/f9-fixture-manager.d.ts.map +0 -1
  74. package/dist/testing/f9-fixture-manager.js +0 -211
  75. package/dist/testing/f9-fixture-manager.js.map +0 -1
  76. package/dist/types/index.d.ts +0 -2
  77. package/dist/types/index.d.ts.map +0 -1
  78. package/dist/types/index.js +0 -18
  79. package/dist/types/index.js.map +0 -1
  80. package/dist/types/shared.d.ts +0 -725
  81. package/dist/types/shared.d.ts.map +0 -1
  82. package/dist/types/shared.js +0 -288
  83. package/dist/types/shared.js.map +0 -1
  84. package/dist/utils/f9-cache.d.ts +0 -1
  85. package/dist/utils/f9-cache.d.ts.map +0 -1
  86. package/dist/utils/f9-cache.js +0 -113
  87. package/dist/utils/f9-cache.js.map +0 -1
  88. package/dist/utils/index.d.ts +0 -4
  89. package/dist/utils/index.d.ts.map +0 -1
  90. package/dist/utils/index.js +0 -20
  91. package/dist/utils/index.js.map +0 -1
  92. package/dist/utils/tf-utils.d.ts +0 -6
  93. package/dist/utils/tf-utils.d.ts.map +0 -1
  94. package/dist/utils/tf-utils.js +0 -67
  95. package/dist/utils/tf-utils.js.map +0 -1
@@ -2,7 +2,7 @@ export type DBPreset = "w" | "r";
2
2
  import knex, { Knex } from "knex";
3
3
  import path from "path";
4
4
  import { ServiceUnavailableException } from "../exceptions/so-exceptions";
5
- import { Syncer } from "../syncer";
5
+ import { findAppRootPath } from "../utils/utils";
6
6
 
7
7
  export type SonamuDBConfig = {
8
8
  development_master: Knex.Config;
@@ -19,9 +19,13 @@ class DBClass {
19
19
  private rdb?: Knex;
20
20
  private knexfile?: SonamuDBConfig;
21
21
 
22
- async readKnexfile() {
22
+ async readKnexfile(): Promise<SonamuDBConfig> {
23
+ if (this.knexfile) {
24
+ return this.knexfile;
25
+ }
26
+
23
27
  const configPath: string = path.join(
24
- Syncer.getInstance().config.appRootPath,
28
+ await findAppRootPath(),
25
29
  "/api/dist/configs/db"
26
30
  );
27
31
  try {
@@ -40,7 +44,7 @@ class DBClass {
40
44
  return this.knexfile;
41
45
  }
42
46
 
43
- throw new ServiceUnavailableException("DB설정 파일을 찾을 수 없습니다.");
47
+ throw new ServiceUnavailableException("DB설정이 로드되지 않았습니다.");
44
48
  }
45
49
 
46
50
  getDB(which: DBPreset): Knex {
@@ -80,9 +84,6 @@ class DBClass {
80
84
 
81
85
  async destroy(): Promise<void> {
82
86
  if (this.wdb !== undefined) {
83
- if (this.wdb.destroy === undefined) {
84
- console.log(this.wdb);
85
- }
86
87
  await this.wdb.destroy();
87
88
  this.wdb = undefined;
88
89
  }
@@ -11,16 +11,18 @@ import {
11
11
  } from "../types/types";
12
12
 
13
13
  export class FixtureManager {
14
- private tdb: Knex;
15
- private fdb: Knex;
16
- private knexfile: SonamuDBConfig;
14
+ private config?: {
15
+ tdb: Knex;
16
+ fdb: Knex;
17
+ knexfile: SonamuDBConfig;
18
+ };
17
19
 
18
20
  constructor(public usingTables?: string[]) {
19
- this.knexfile = DB.getKnexfile();
20
- this.tdb = knex(this.knexfile.test);
21
- this.fdb = knex(this.knexfile.fixture_local);
22
-
23
21
  if (process.env.NODE_ENV === "test") {
22
+ beforeAll(async () => {
23
+ await this.init();
24
+ });
25
+
24
26
  beforeEach(async () => {
25
27
  await this.cleanAndSeed();
26
28
  });
@@ -32,13 +34,32 @@ export class FixtureManager {
32
34
  }
33
35
  }
34
36
 
37
+ async init(): Promise<{
38
+ tdb: Knex;
39
+ fdb: Knex;
40
+ knexfile: SonamuDBConfig;
41
+ }> {
42
+ if (this.config) {
43
+ return this.config;
44
+ }
45
+
46
+ const knexfile = await DB.readKnexfile();
47
+ this.config = {
48
+ knexfile,
49
+ tdb: knex(knexfile.test),
50
+ fdb: knex(knexfile.fixture_local),
51
+ };
52
+ return this.config;
53
+ }
54
+
35
55
  async cleanAndSeed() {
56
+ const { tdb, fdb, knexfile } = await this.init();
36
57
  // console.time("FIXTURE-CleanAndSeed");
37
58
 
38
59
  let tableNames: string[] = [];
39
60
 
40
61
  if (this.usingTables === undefined) {
41
- const [tables] = await this.tdb.raw(
62
+ const [tables] = await tdb.raw(
42
63
  "SHOW TABLE STATUS WHERE Engine IS NOT NULL"
43
64
  );
44
65
  tableNames = tables.map((tableInfo: any) => tableInfo["Name"]);
@@ -46,35 +67,31 @@ export class FixtureManager {
46
67
  tableNames = this.usingTables;
47
68
  }
48
69
 
49
- await this.tdb.raw(`SET FOREIGN_KEY_CHECKS = 0`);
50
- for (let tableName of tableNames) {
70
+ await tdb.raw(`SET FOREIGN_KEY_CHECKS = 0`);
71
+ for await (let tableName of tableNames) {
51
72
  if (tableName == "migrations") {
52
73
  continue;
53
74
  }
54
75
 
55
- const [[fdbChecksumRow]] = await this.fdb.raw(
56
- `CHECKSUM TABLE ${tableName}`
57
- );
76
+ const [[fdbChecksumRow]] = await fdb.raw(`CHECKSUM TABLE ${tableName}`);
58
77
  const fdbChecksum = fdbChecksumRow["Checksum"];
59
78
 
60
- const [[tdbChecksumRow]] = await this.tdb.raw(
61
- `CHECKSUM TABLE ${tableName}`
62
- );
79
+ const [[tdbChecksumRow]] = await tdb.raw(`CHECKSUM TABLE ${tableName}`);
63
80
  const tdbChecksum = tdbChecksumRow["Checksum"];
64
81
 
65
82
  if (fdbChecksum !== tdbChecksum) {
66
- await this.tdb(tableName).truncate();
83
+ await tdb(tableName).truncate();
67
84
  const rawQuery = `INSERT INTO ${
68
- (this.knexfile.test.connection as Knex.ConnectionConfig).database
85
+ (knexfile.test.connection as Knex.ConnectionConfig).database
69
86
  }.${tableName}
70
87
  SELECT * FROM ${
71
- (this.knexfile.fixture_local.connection as Knex.ConnectionConfig)
88
+ (knexfile.fixture_local.connection as Knex.ConnectionConfig)
72
89
  .database
73
90
  }.${tableName}`;
74
- await this.tdb.raw(rawQuery);
91
+ await tdb.raw(rawQuery);
75
92
  }
76
93
  }
77
- await this.tdb.raw(`SET FOREIGN_KEY_CHECKS = 1`);
94
+ await tdb.raw(`SET FOREIGN_KEY_CHECKS = 1`);
78
95
 
79
96
  // console.timeEnd("FIXTURE-CleanAndSeed");
80
97
  }
@@ -129,9 +146,10 @@ export class FixtureManager {
129
146
  }
130
147
 
131
148
  async sync() {
132
- const frdb = knex(this.knexfile.fixture_remote);
149
+ const { fdb, knexfile } = await this.init();
150
+ const frdb = knex(knexfile.fixture_remote);
133
151
 
134
- const [tables] = await this.fdb.raw(
152
+ const [tables] = await fdb.raw(
135
153
  "SHOW TABLE STATUS WHERE Engine IS NOT NULL"
136
154
  );
137
155
  const tableNames: string[] = tables.map(
@@ -146,10 +164,10 @@ export class FixtureManager {
146
164
  }
147
165
 
148
166
  const remoteChecksum = await this.getChecksum(frdb, tableName);
149
- const localChecksum = await this.getChecksum(this.fdb, tableName);
167
+ const localChecksum = await this.getChecksum(fdb, tableName);
150
168
 
151
169
  if (remoteChecksum !== localChecksum) {
152
- await this.fdb.transaction(async (transaction) => {
170
+ await fdb.transaction(async (transaction) => {
153
171
  await transaction.raw(`SET FOREIGN_KEY_CHECKS = 0`);
154
172
  await transaction(tableName).truncate();
155
173
 
@@ -204,6 +222,8 @@ export class FixtureManager {
204
222
  field: string,
205
223
  id: number
206
224
  ): Promise<string[]> {
225
+ const { knexfile } = await this.init();
226
+
207
227
  console.log({ smdId, field, id });
208
228
  const smd = SMDManager.get(smdId);
209
229
  const wdb = BaseModel.getDB("w");
@@ -215,9 +235,9 @@ export class FixtureManager {
215
235
  }
216
236
 
217
237
  // 픽스쳐DB, 실DB
218
- const fixtureDatabase = (this.knexfile.fixture_remote.connection as any)
238
+ const fixtureDatabase = (knexfile.fixture_remote.connection as any)
219
239
  .database;
220
- const realDatabase = (this.knexfile.production_master.connection as any)
240
+ const realDatabase = (knexfile.production_master.connection as any)
221
241
  .database;
222
242
 
223
243
  const selfQuery = `INSERT IGNORE INTO \`${fixtureDatabase}\`.\`${smd.table}\` (SELECT * FROM \`${realDatabase}\`.\`${smd.table}\` WHERE \`id\` = ${id})`;
@@ -265,7 +285,11 @@ export class FixtureManager {
265
285
  }
266
286
 
267
287
  async destory() {
268
- await this.tdb.destroy();
269
- await this.fdb.destroy();
288
+ if (!this.config) {
289
+ return;
290
+ }
291
+ const { tdb, fdb } = await this.init();
292
+ await tdb.destroy();
293
+ await fdb.destroy();
270
294
  }
271
295
  }
@@ -1,5 +1,6 @@
1
1
  import path from "path";
2
2
  import glob from "glob";
3
+ import { existsSync } from "fs";
3
4
 
4
5
  export function globAsync(pathPattern: string): Promise<string[]> {
5
6
  return new Promise((resolve, reject) => {
@@ -26,3 +27,16 @@ export async function importMultiple(
26
27
  })
27
28
  );
28
29
  }
30
+ export async function findAppRootPath() {
31
+ if (require.main === undefined) {
32
+ throw new Error("Cannot find AppRoot using Sonamu");
33
+ }
34
+ let dir = path.dirname(require.main.path);
35
+ do {
36
+ if (existsSync(path.join(dir, "/package.json"))) {
37
+ return dir.split(path.sep).slice(0, -1).join(path.sep);
38
+ }
39
+ dir = dir.split(path.sep).slice(0, -1).join(path.sep);
40
+ } while (dir.split(path.sep).length > 1);
41
+ throw new Error("Cannot find AppRoot using Sonamu");
42
+ }
@@ -1,39 +0,0 @@
1
- import { Knex } from "knex";
2
- import { DBPreset } from "./db";
3
- import { ModelDefinition } from "../f9-md/model-definition";
4
- import { SubsetQuery } from "../types/shared";
5
- import { BaseListParams } from "../utils/model";
6
- import { UpsertBuilder } from "./upsert-builder";
7
- export declare class F9BaseModelClass {
8
- modelName: string;
9
- private _md?;
10
- get md(): ModelDefinition;
11
- getDB(which: DBPreset): Knex;
12
- destroy(): Promise<void>;
13
- myNow(timestamp?: number): string;
14
- getInsertedIds(wdb: Knex, rows: any[], tableName: string, unqKeyFields: string[], chunkSize?: number): Promise<number[]>;
15
- useLoaders(db: Knex, rows: any[], loaders: SubsetQuery["loaders"]): Promise<any[]>;
16
- hydrate<T>(rows: T[]): T[];
17
- runSubsetQuery<T extends BaseListParams, U extends string>({ params, baseTable, subset, subsetQuery, build, debug, }: {
18
- subset: U;
19
- params: T;
20
- subsetQuery: SubsetQuery;
21
- build: (buildParams: {
22
- qb: Knex.QueryBuilder;
23
- db: Knex;
24
- select: string[];
25
- joins: SubsetQuery["joins"];
26
- virtual: string[];
27
- }) => Knex.QueryBuilder;
28
- baseTable?: string;
29
- debug?: boolean | "list" | "count";
30
- }): Promise<{
31
- rows: any[];
32
- total?: number | undefined;
33
- subsetQuery: SubsetQuery;
34
- }>;
35
- getJoinClause(db: Knex<any, unknown>, join: SubsetQuery["joins"][number]): Knex.Raw<any>;
36
- getUpsertBuilder(): UpsertBuilder;
37
- }
38
- export declare const F9BaseModel: F9BaseModelClass;
39
- //# sourceMappingURL=f9-base-model.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"f9-base-model.d.ts","sourceRoot":"","sources":["../../src/database/f9-base-model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAK5B,OAAO,EAAE,QAAQ,EAAQ,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAsB,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAa,gBAAgB;IACpB,SAAS,EAAE,MAAM,CAAa;IAGrC,OAAO,CAAC,GAAG,CAAC,CAAkB;IAC9B,IAAW,EAAE,oBAKZ;IAGD,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAGtB,OAAO;IAIb,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM;IAQ3B,cAAc,CAClB,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,GAAG,EAAE,EACX,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EAAE,EACtB,SAAS,GAAE,MAAY;IAkCnB,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC;IA6DvE,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;IAuCpB,cAAc,CAAC,CAAC,SAAS,cAAc,EAAE,CAAC,SAAS,MAAM,EAAE,EAC/D,MAAM,EACN,SAAS,EACT,MAAM,EACN,WAAW,EACX,KAAK,EACL,KAAK,GACN,EAAE;QACD,MAAM,EAAE,CAAC,CAAC;QACV,MAAM,EAAE,CAAC,CAAC;QACV,WAAW,EAAE,WAAW,CAAC;QACzB,KAAK,EAAE,CAAC,WAAW,EAAE;YACnB,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC;YACtB,EAAE,EAAE,IAAI,CAAC;YACT,MAAM,EAAE,MAAM,EAAE,CAAC;YACjB,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,EAAE,MAAM,EAAE,CAAC;SACnB,KAAK,IAAI,CAAC,YAAY,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;KACpC,GAAG,OAAO,CAAC;QACV,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,WAAW,EAAE,WAAW,CAAC;KAC1B,CAAC;IA6EF,aAAa,CACX,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,EACtB,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAQhB,gBAAgB,IAAI,aAAa;CAGlC;AACD,eAAO,MAAM,WAAW,kBAAyB,CAAC"}
@@ -1,229 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.F9BaseModel = exports.F9BaseModelClass = void 0;
16
- const luxon_1 = require("luxon");
17
- const lodash_1 = require("lodash");
18
- const knex_on_duplicate_update_1 = require("./knex-plugins/knex-on-duplicate-update");
19
- const f9_md_1 = require("../f9-md/f9-md");
20
- (0, knex_on_duplicate_update_1.attachOnDuplicateUpdate)();
21
- const db_1 = require("./db");
22
- const shared_1 = require("../types/shared");
23
- const inflection_1 = require("inflection");
24
- const chalk_1 = __importDefault(require("chalk"));
25
- const upsert_builder_1 = require("./upsert-builder");
26
- class F9BaseModelClass {
27
- constructor() {
28
- this.modelName = "Unknown";
29
- }
30
- get md() {
31
- if (this._md === undefined) {
32
- this._md = f9_md_1.F9MD.get("Product");
33
- }
34
- return this._md;
35
- }
36
- /* F9DB 인스턴스 get, destroy */
37
- getDB(which) {
38
- return db_1.F9DB.getDB(which);
39
- }
40
- destroy() {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- return db_1.F9DB.destroy();
43
- });
44
- }
45
- myNow(timestamp) {
46
- const dt = timestamp === undefined
47
- ? luxon_1.DateTime.local()
48
- : luxon_1.DateTime.fromSeconds(timestamp);
49
- return dt.toFormat("yyyy-MM-dd HH:mm:ss");
50
- }
51
- getInsertedIds(wdb, rows, tableName, unqKeyFields, chunkSize = 500) {
52
- return __awaiter(this, void 0, void 0, function* () {
53
- if (!wdb) {
54
- wdb = this.getDB("w");
55
- }
56
- let unqKeys;
57
- let whereInField, selectField;
58
- if (unqKeyFields.length > 1) {
59
- whereInField = wdb.raw(`CONCAT_WS('_', '${unqKeyFields.join(",")}')`);
60
- selectField = `${whereInField} as tmpUid`;
61
- unqKeys = rows.map((row) => unqKeyFields.map((field) => row[field]).join("_"));
62
- }
63
- else {
64
- whereInField = unqKeyFields[0];
65
- selectField = unqKeyFields[0];
66
- unqKeys = rows.map((row) => row[unqKeyFields[0]]);
67
- }
68
- const chunks = (0, lodash_1.chunk)(unqKeys, chunkSize);
69
- let resultIds = [];
70
- for (let chunk of chunks) {
71
- const dbRows = yield wdb(tableName)
72
- .select("id", wdb.raw(selectField))
73
- .whereIn(whereInField, chunk);
74
- resultIds = resultIds.concat(dbRows.map((dbRow) => parseInt(dbRow.id)));
75
- }
76
- return resultIds;
77
- });
78
- }
79
- useLoaders(db, rows, loaders) {
80
- return __awaiter(this, void 0, void 0, function* () {
81
- if (loaders.length > 0) {
82
- for (let loader of loaders) {
83
- let subQ;
84
- let subRows;
85
- let toCol;
86
- const fromIds = rows.map((row) => row[loader.manyJoin.idField]);
87
- if (loader.manyJoin.through === undefined) {
88
- // HasMany
89
- subQ = db(loader.manyJoin.toTable)
90
- .whereIn(loader.manyJoin.toCol, fromIds)
91
- .select([...loader.select, loader.manyJoin.toCol]);
92
- loader.oneJoins.map((join) => {
93
- if (join.join == "inner") {
94
- subQ.innerJoin(`${join.table} as ${join.as}`, this.getJoinClause(db, join));
95
- }
96
- else if (join.join == "outer") {
97
- subQ.leftOuterJoin(`${join.table} as ${join.as}`, this.getJoinClause(db, join));
98
- }
99
- });
100
- toCol = loader.manyJoin.toCol;
101
- }
102
- else {
103
- // ManyToMany
104
- subQ = db(loader.manyJoin.through.table)
105
- .join(loader.manyJoin.toTable, `${loader.manyJoin.through.table}.${loader.manyJoin.through.toCol}`, `${loader.manyJoin.toTable}.${loader.manyJoin.toCol}`)
106
- .whereIn(loader.manyJoin.through.fromCol, fromIds)
107
- .select((0, lodash_1.uniq)([...loader.select, loader.manyJoin.through.fromCol]));
108
- toCol = loader.manyJoin.through.fromCol;
109
- }
110
- subRows = yield subQ;
111
- if (loader.loaders) {
112
- // 추가 -Many 케이스가 있는 경우 recursion 처리
113
- subRows = yield this.useLoaders(db, subRows, loader.loaders);
114
- }
115
- // 불러온 row들을 참조ID 기준으로 분류 배치
116
- const subRowGroups = (0, lodash_1.groupBy)(subRows, toCol);
117
- rows = rows.map((row) => {
118
- var _a;
119
- row[loader.as] = ((_a = subRowGroups[row[loader.manyJoin.idField]]) !== null && _a !== void 0 ? _a : []).map((r) => (0, lodash_1.omit)(r, toCol));
120
- return row;
121
- });
122
- }
123
- }
124
- return rows;
125
- });
126
- }
127
- hydrate(rows) {
128
- return rows.map((row) => {
129
- // nullable relation인 경우 관련된 필드가 전부 null로 생성되는 것 방지하는 코드
130
- const nestedKeys = Object.keys(row).filter((key) => key.includes("__"));
131
- const groups = (0, lodash_1.groupBy)(nestedKeys, (key) => key.split("__")[0]);
132
- const nullKeys = Object.keys(groups).filter((key) => groups[key].length > 1 &&
133
- groups[key].every((field) => row[field] === null));
134
- const hydrated = Object.keys(row).reduce((r, field) => {
135
- if (!field.includes("__")) {
136
- if (Array.isArray(row[field]) && (0, lodash_1.isObject)(row[field][0])) {
137
- r[field] = this.hydrate(row[field]);
138
- return r;
139
- }
140
- else {
141
- r[field] = row[field];
142
- return r;
143
- }
144
- }
145
- const parts = field.split("__");
146
- const objPath = parts[0] +
147
- parts
148
- .slice(1)
149
- .map((part) => `[${part}]`)
150
- .join("");
151
- (0, lodash_1.set)(r, objPath, row[field]);
152
- return r;
153
- }, {});
154
- nullKeys.map((nullKey) => (hydrated[nullKey] = null));
155
- return hydrated;
156
- });
157
- }
158
- runSubsetQuery({ params, baseTable, subset, subsetQuery, build, debug, }) {
159
- return __awaiter(this, void 0, void 0, function* () {
160
- const db = this.getDB(subset.startsWith("A") ? "w" : "r");
161
- baseTable = baseTable !== null && baseTable !== void 0 ? baseTable : (0, inflection_1.pluralize)((0, inflection_1.underscore)(this.modelName));
162
- const { select, virtual, joins, loaders } = subsetQuery;
163
- const qb = build({
164
- qb: db.from(baseTable),
165
- db,
166
- select,
167
- joins,
168
- virtual,
169
- });
170
- // join
171
- joins.map((join) => {
172
- if (join.join == "inner") {
173
- qb.innerJoin(`${join.table} as ${join.as}`, this.getJoinClause(db, join));
174
- }
175
- else if (join.join == "outer") {
176
- qb.leftOuterJoin(`${join.table} as ${join.as}`, this.getJoinClause(db, join));
177
- }
178
- });
179
- // count
180
- let countQuery;
181
- if (params.id === undefined && params.withoutCount !== true) {
182
- countQuery = qb.clone().clearOrder().count("*", { as: "total" });
183
- }
184
- // limit, offset
185
- if (params.num !== 0) {
186
- qb.limit(params.num);
187
- qb.offset(params.num * (params.page - 1));
188
- }
189
- // select, rows
190
- qb.select(select);
191
- const listQuery = qb.clone();
192
- // debug: listQuery
193
- if (debug === true || debug === "list") {
194
- console.debug("DEBUG: list query", chalk_1.default.blue(listQuery.toQuery().toString()));
195
- }
196
- // listQuery
197
- let rows = yield listQuery;
198
- rows = yield this.useLoaders(db, rows, loaders);
199
- rows = this.hydrate(rows);
200
- // countQuery
201
- let total = 0;
202
- if (countQuery) {
203
- const countResult = yield countQuery;
204
- if (countResult && countResult[0] && countResult[0].total) {
205
- total = countResult[0].total;
206
- }
207
- // debug: countQuery
208
- if (debug === true || debug === "count") {
209
- console.debug("DEBUG: count query", chalk_1.default.blue(countQuery.toQuery().toString()));
210
- }
211
- }
212
- return { rows, total, subsetQuery };
213
- });
214
- }
215
- getJoinClause(db, join) {
216
- if (!(0, shared_1.isCustomJoinClause)(join)) {
217
- return db.raw(`${join.from} = ${join.to}`);
218
- }
219
- else {
220
- return db.raw(join.custom);
221
- }
222
- }
223
- getUpsertBuilder() {
224
- return new upsert_builder_1.UpsertBuilder();
225
- }
226
- }
227
- exports.F9BaseModelClass = F9BaseModelClass;
228
- exports.F9BaseModel = new F9BaseModelClass();
229
- //# sourceMappingURL=f9-base-model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"f9-base-model.js","sourceRoot":"","sources":["../../src/database/f9-base-model.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- export declare type DBPreset = "w" | "r";
2
- import { Knex } from "knex";
3
- export declare type F9Knexfile = {
4
- development_master: Knex.Config;
5
- development_slave: Knex.Config;
6
- test: Knex.Config;
7
- fixture_local: Knex.Config;
8
- fixture_remote: Knex.Config;
9
- production_master: Knex.Config;
10
- production_slave: Knex.Config;
11
- };
12
- declare class F9DBClass {
13
- private wdb?;
14
- private rdb?;
15
- private knexfile?;
16
- readKnexfile(): Promise<F9Knexfile>;
17
- getKnexfile(): F9Knexfile;
18
- getDB(which: DBPreset): Knex;
19
- destroy(): Promise<void>;
20
- }
21
- export declare const F9DB: F9DBClass;
22
- export {};
23
- //# sourceMappingURL=f9-db.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"f9-db.d.ts","sourceRoot":"","sources":["../../src/database/f9-db.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AACjC,OAAa,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKlC,oBAAY,UAAU,GAAG;IACvB,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC;IAChC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC;IAClB,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC;IAC3B,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;IAC5B,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC;IAC/B,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;CAC/B,CAAC;AAEF,cAAM,SAAS;IACb,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,GAAG,CAAC,CAAO;IACnB,OAAO,CAAC,QAAQ,CAAC,CAAa;IAExB,YAAY;IAgBlB,WAAW,IAAI,UAAU;IAQzB,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAmCtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAa/B;AACD,eAAO,MAAM,IAAI,WAAkB,CAAC"}
@@ -1,109 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
- return new (P || (P = Promise))(function (resolve, reject) {
28
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
- step((generator = generator.apply(thisArg, _arguments || [])).next());
32
- });
33
- };
34
- var __importDefault = (this && this.__importDefault) || function (mod) {
35
- return (mod && mod.__esModule) ? mod : { "default": mod };
36
- };
37
- Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.F9DB = void 0;
39
- const knex_1 = __importDefault(require("knex"));
40
- const path_1 = __importDefault(require("path"));
41
- const exceptions_1 = require("../exceptions");
42
- const syncer_1 = require("../syncer");
43
- class F9DBClass {
44
- readKnexfile() {
45
- return __awaiter(this, void 0, void 0, function* () {
46
- const configPath = path_1.default.join(syncer_1.Syncer.getInstance().config.appRootPath, "/api/dist/configs/db");
47
- try {
48
- const knexfileModule = yield Promise.resolve().then(() => __importStar(require(configPath)));
49
- this.knexfile = knexfileModule.default;
50
- return this.knexfile;
51
- }
52
- catch (_a) { }
53
- throw new exceptions_1.ServiceUnavailableException(`DB설정 파일을 찾을 수 없습니다. ${configPath}`);
54
- });
55
- }
56
- getKnexfile() {
57
- if (this.knexfile) {
58
- return this.knexfile;
59
- }
60
- throw new exceptions_1.ServiceUnavailableException("DB설정 파일을 찾을 수 없습니다.");
61
- }
62
- getDB(which) {
63
- var _a, _b, _c;
64
- const knexfile = this.getKnexfile();
65
- const instanceName = which === "w" ? "wdb" : "rdb";
66
- if (!this[instanceName]) {
67
- let config;
68
- switch ((_a = process.env.NODE_ENV) !== null && _a !== void 0 ? _a : "development") {
69
- case "development":
70
- case "staging":
71
- config =
72
- which === "w"
73
- ? knexfile["development_master"]
74
- : (_b = knexfile["development_slave"]) !== null && _b !== void 0 ? _b : knexfile["development_master"];
75
- break;
76
- case "production":
77
- config =
78
- which === "w"
79
- ? knexfile["production_master"]
80
- : (_c = knexfile["production_slave"]) !== null && _c !== void 0 ? _c : knexfile["production_master"];
81
- break;
82
- case "test":
83
- config = knexfile["test"];
84
- break;
85
- default:
86
- throw new Error(`현재 ENV ${process.env.NODE_ENV}에는 설정 가능한 DB설정이 없습니다.`);
87
- }
88
- this[instanceName] = (0, knex_1.default)(config);
89
- }
90
- return this[instanceName];
91
- }
92
- destroy() {
93
- return __awaiter(this, void 0, void 0, function* () {
94
- if (this.wdb !== undefined) {
95
- if (this.wdb.destroy === undefined) {
96
- console.log(this.wdb);
97
- }
98
- yield this.wdb.destroy();
99
- this.wdb = undefined;
100
- }
101
- if (this.rdb !== undefined) {
102
- yield this.rdb.destroy();
103
- this.rdb = undefined;
104
- }
105
- });
106
- }
107
- }
108
- exports.F9DB = new F9DBClass();
109
- //# sourceMappingURL=f9-db.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"f9-db.js","sourceRoot":"","sources":["../../src/database/f9-db.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAAkC;AAClC,gDAAwB;AACxB,8CAA4D;AAC5D,sCAAmC;AAYnC,MAAM,SAAS;IAKP,YAAY;;YAChB,MAAM,UAAU,GAAW,cAAI,CAAC,IAAI,CAClC,eAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,WAAW,EACvC,sBAAsB,CACvB,CAAC;YACF,IAAI;gBACF,MAAM,cAAc,GAAG,wDAAa,UAAU,GAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,OAAqB,CAAC;gBACrD,OAAO,IAAI,CAAC,QAAQ,CAAC;aACtB;YAAC,WAAM,GAAE;YAEV,MAAM,IAAI,wCAA2B,CACnC,uBAAuB,UAAU,EAAE,CACpC,CAAC;QACJ,CAAC;KAAA;IAED,WAAW;QACT,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,OAAO,IAAI,CAAC,QAAQ,CAAC;SACtB;QAED,MAAM,IAAI,wCAA2B,CAAC,qBAAqB,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,KAAe;;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEpC,MAAM,YAAY,GAAG,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAEnD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACvB,IAAI,MAAmB,CAAC;YACxB,QAAQ,MAAA,OAAO,CAAC,GAAG,CAAC,QAAQ,mCAAI,aAAa,EAAE;gBAC7C,KAAK,aAAa,CAAC;gBACnB,KAAK,SAAS;oBACZ,MAAM;wBACJ,KAAK,KAAK,GAAG;4BACX,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;4BAChC,CAAC,CAAC,MAAA,QAAQ,CAAC,mBAAmB,CAAC,mCAAI,QAAQ,CAAC,oBAAoB,CAAC,CAAC;oBACtE,MAAM;gBACR,KAAK,YAAY;oBACf,MAAM;wBACJ,KAAK,KAAK,GAAG;4BACX,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;4BAC/B,CAAC,CAAC,MAAA,QAAQ,CAAC,kBAAkB,CAAC,mCAAI,QAAQ,CAAC,mBAAmB,CAAC,CAAC;oBACpE,MAAM;gBACR,KAAK,MAAM;oBACT,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC1B,MAAM;gBACR;oBACE,MAAM,IAAI,KAAK,CACb,UAAU,OAAO,CAAC,GAAG,CAAC,QAAQ,uBAAuB,CACtD,CAAC;aACL;YACD,IAAI,CAAC,YAAY,CAAC,GAAG,IAAA,cAAI,EAAC,MAAM,CAAC,CAAC;SACnC;QAED,OAAO,IAAI,CAAC,YAAY,CAAE,CAAC;IAC7B,CAAC;IAEK,OAAO;;YACX,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;gBAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE;oBAClC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBACvB;gBACD,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;aACtB;YACD,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE;gBAC1B,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;aACtB;QACH,CAAC;KAAA;CACF;AACY,QAAA,IAAI,GAAG,IAAI,SAAS,EAAE,CAAC"}