@reldens/storage 0.30.0 → 0.32.0

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.
@@ -7,6 +7,8 @@
7
7
  const { MikroOrmDriver } = require('./mikro-orm-driver');
8
8
  const { BaseDataServer } = require('../base-data-server');
9
9
  const { MikroORM } = require('@mikro-orm/core');
10
+ const { MySqlDriver } = require('@mikro-orm/mysql');
11
+ const { MongoDriver } = require('@mikro-orm/mongodb');
10
12
  const { Logger, ErrorManager } = require('@reldens/utils');
11
13
 
12
14
  class MikroOrmDataServer extends BaseDataServer
@@ -14,26 +16,43 @@ class MikroOrmDataServer extends BaseDataServer
14
16
 
15
17
  orm = {};
16
18
  clientsMapped = {
17
- mysql: 'mysql',
18
- mongodb: 'mongo'
19
+ mysql: MySqlDriver,
20
+ mongodb: MongoDriver
19
21
  };
20
22
 
23
+ constructor(props)
24
+ {
25
+ // @TODO - BETA - Finish implementation.
26
+ super(props);
27
+ this.entitiesPath = props.entitiesPath;
28
+ }
29
+
21
30
  async connect()
22
31
  {
23
32
  if(this.initialized){
24
33
  return this.initialized;
25
34
  }
26
- this.orm = await MikroORM.init({
27
- entities: Object.values(this.rawEntities),
28
- type: this.clientsMapped[(this.client || 'mongo')],
35
+ let providedSetup = {
36
+ driver: this.clientsMapped[(this.client || 'mongodb')],
37
+ dbName: this.config.database,
29
38
  clientUrl: this.connectString,
30
39
  allowGlobalContext: true
31
- });
40
+ };
41
+ if(this.rawEntities){
42
+ providedSetup.entities = Object.values(this.rawEntities);
43
+ }
44
+ if(0 < Object.keys(this.entities).length){
45
+ providedSetup.entities = this.entities;
46
+ }
47
+ if(this.entitiesPath){
48
+ providedSetup.entities = this.entitiesPath;
49
+ }
50
+ this.orm = await MikroORM.init(providedSetup);
32
51
  this.initialized = Date.now();
33
52
  return this.initialized;
34
53
  }
35
54
 
36
- generateEntities(rawEntities)
55
+ generateEntities()
37
56
  {
38
57
  if(!this.initialized){
39
58
  Logger.critical('In order to generate entities with Mikro ORM driver you need to connect to the server.');
@@ -44,8 +63,8 @@ class MikroOrmDataServer extends BaseDataServer
44
63
  return {};
45
64
  }
46
65
  this.entities = {};
47
- for(let i of Object.keys(rawEntities)){
48
- let rawEntity = rawEntities[i];
66
+ for(let i of Object.keys(this.rawEntities)){
67
+ let rawEntity = this.rawEntities[i];
49
68
  this.entities[i] = new MikroOrmDriver({
50
69
  rawModel: rawEntity,
51
70
  id: i,
@@ -12,6 +12,7 @@ class MikroOrmDriver extends BaseDriver
12
12
 
13
13
  constructor(props)
14
14
  {
15
+ // @TODO - BETA - Finish implementation.
15
16
  super(props);
16
17
  if(!props.orm){
17
18
  ErrorManager.error('Missing ORM on Mikro ORM driver.');
@@ -24,7 +25,7 @@ class MikroOrmDriver extends BaseDriver
24
25
  }
25
26
  this.orm = props.orm;
26
27
  this.server = props.server;
27
- this.repository = this.orm.em.getRepository(this.rawModel.entity);
28
+ this.repository = this.orm.em.getRepository(this.rawModel);
28
29
  }
29
30
 
30
31
  databaseName()
@@ -54,9 +55,8 @@ class MikroOrmDriver extends BaseDriver
54
55
 
55
56
  async create(params)
56
57
  {
57
- let newInstance = this.rawModel.entity.createByProps(params);
58
- await this.repository.persist(newInstance).flush();
59
- await this.orm.em.flush();
58
+ let newInstance = await this.orm.em.create(this.rawModel, params);
59
+ await this.orm.em.upsert(newInstance);
60
60
  return newInstance;
61
61
  }
62
62
 
@@ -75,7 +75,7 @@ class MikroOrmDriver extends BaseDriver
75
75
  }
76
76
  for(let entity of entities){
77
77
  Object.assign(entity, updatePatch);
78
- await this.repository.persist(entity).flush();
78
+ await this.orm.em.upsert(entity);
79
79
  await this.orm.em.flush();
80
80
  }
81
81
  return entities;
@@ -90,7 +90,7 @@ class MikroOrmDriver extends BaseDriver
90
90
  }
91
91
  for(let entity of entities){
92
92
  Object.assign(entity, updatePatch);
93
- await this.repository.persist(entity).flush();
93
+ await this.orm.em.upsert(entity);
94
94
  await this.orm.em.flush();
95
95
  }
96
96
  return entities;
@@ -101,6 +101,22 @@ class MikroOrmDriver extends BaseDriver
101
101
  return this.update({id}, params);
102
102
  }
103
103
 
104
+ async upsert(params, filters)
105
+ {
106
+ if(params.id){
107
+ let patch = Object.assign({}, params);
108
+ delete patch.id;
109
+ return this.updateById(params.id, patch);
110
+ }
111
+ if(filters){
112
+ let existent = await this.loadOne(filters);
113
+ if(existent){
114
+ return this.updateById(existent.id, params);
115
+ }
116
+ }
117
+ return this.create(params);
118
+ }
119
+
104
120
  async delete(filters = {})
105
121
  {
106
122
  let entries = await this.load(filters);
@@ -207,6 +223,9 @@ class MikroOrmDriver extends BaseDriver
207
223
  queryBuilder(useLimit = false, useOffset = false, useSort = false)
208
224
  {
209
225
  let queryBuilder = {};
226
+ if(0 < this.select.length){
227
+ queryBuilder.select(...this.select);
228
+ }
210
229
  if(useLimit && 0 !== this.limit){
211
230
  queryBuilder.limit = this.limit;
212
231
  }
@@ -86,11 +86,6 @@ class ObjectionJsDriver extends BaseDriver
86
86
  return this.appendFilters(queryBuilder, filters).delete();
87
87
  }
88
88
 
89
- deleteBy(filters)
90
- {
91
- this.delete(filters);
92
- }
93
-
94
89
  deleteById(id)
95
90
  {
96
91
  return this.queryBuilder().deleteById(id);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@reldens/storage",
3
3
  "scope": "@reldens",
4
- "version": "0.30.0",
4
+ "version": "0.32.0",
5
5
  "description": "Reldens - Storage",
6
6
  "author": "Damian A. Pastorini",
7
7
  "license": "MIT",
@@ -44,11 +44,13 @@
44
44
  "url": "https://github.com/damian-pastorini/reldens-storage/issues"
45
45
  },
46
46
  "dependencies": {
47
- "@mikro-orm/core": "^6.3.13",
48
- "@mikro-orm/mongodb": "^6.3.13",
49
- "@reldens/utils": "^0.38.0",
47
+ "@mikro-orm/core": "^6.4.13",
48
+ "@mikro-orm/mongodb": "^6.4.13",
49
+ "@mikro-orm/mysql": "^6.4.13",
50
+ "@reldens/utils": "^0.40.0",
50
51
  "knex": "^3.1.0",
51
52
  "mysql": "^2.18.1",
53
+ "mysql2": "^3.14.0",
52
54
  "objection": "^3.1.5"
53
55
  }
54
56
  }