@spinajs/orm 1.0.60 → 1.2.32
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/README.md +11 -2
- package/lib/builders.d.ts +30 -23
- package/lib/builders.js +74 -195
- package/lib/builders.js.map +1 -1
- package/lib/decorators.d.ts +18 -19
- package/lib/decorators.js +30 -30
- package/lib/decorators.js.map +1 -1
- package/lib/driver.d.ts +10 -9
- package/lib/driver.js +10 -20
- package/lib/driver.js.map +1 -1
- package/lib/exceptions.d.ts +6 -0
- package/lib/exceptions.js +11 -0
- package/lib/exceptions.js.map +1 -0
- package/lib/helpers.js +2 -2
- package/lib/helpers.js.map +1 -1
- package/lib/hydrators.d.ts +4 -4
- package/lib/hydrators.js +6 -6
- package/lib/hydrators.js.map +1 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -2
- package/lib/index.js.map +1 -1
- package/lib/interfaces.d.ts +19 -27
- package/lib/interfaces.js +14 -14
- package/lib/interfaces.js.map +1 -1
- package/lib/log-common/src/index.d.ts +180 -0
- package/lib/log-common/src/index.js +49 -0
- package/lib/log-common/src/index.js.map +1 -0
- package/lib/model.d.ts +55 -53
- package/lib/model.js +132 -149
- package/lib/model.js.map +1 -1
- package/lib/orm/src/builders.d.ts +429 -0
- package/lib/orm/src/builders.js +1082 -0
- package/lib/orm/src/builders.js.map +1 -0
- package/lib/orm/src/cli.d.ts +1 -0
- package/lib/orm/src/cli.js +2 -0
- package/lib/orm/src/cli.js.map +1 -0
- package/lib/orm/src/converters.d.ts +9 -0
- package/lib/orm/src/converters.js +22 -0
- package/lib/orm/src/converters.js.map +1 -0
- package/lib/orm/src/decorators.d.ts +122 -0
- package/lib/orm/src/decorators.js +380 -0
- package/lib/orm/src/decorators.js.map +1 -0
- package/lib/orm/src/driver.d.ts +77 -0
- package/lib/orm/src/driver.js +84 -0
- package/lib/orm/src/driver.js.map +1 -0
- package/lib/orm/src/enums.d.ts +111 -0
- package/lib/orm/src/enums.js +122 -0
- package/lib/orm/src/enums.js.map +1 -0
- package/lib/orm/src/exceptions.d.ts +6 -0
- package/lib/orm/src/exceptions.js +11 -0
- package/lib/orm/src/exceptions.js.map +1 -0
- package/lib/orm/src/hydrators.d.ts +16 -0
- package/lib/orm/src/hydrators.js +70 -0
- package/lib/orm/src/hydrators.js.map +1 -0
- package/lib/orm/src/index.d.ts +12 -0
- package/lib/orm/src/index.js +25 -0
- package/lib/orm/src/index.js.map +1 -0
- package/lib/orm/src/interfaces.d.ts +615 -0
- package/lib/orm/src/interfaces.js +186 -0
- package/lib/orm/src/interfaces.js.map +1 -0
- package/lib/orm/src/model.d.ts +135 -0
- package/lib/orm/src/model.js +449 -0
- package/lib/orm/src/model.js.map +1 -0
- package/lib/orm/src/orm.d.ts +59 -0
- package/lib/orm/src/orm.js +278 -0
- package/lib/orm/src/orm.js.map +1 -0
- package/lib/orm/src/relations.d.ts +96 -0
- package/lib/orm/src/relations.js +503 -0
- package/lib/orm/src/relations.js.map +1 -0
- package/lib/orm/src/statements.d.ts +132 -0
- package/lib/orm/src/statements.js +257 -0
- package/lib/orm/src/statements.js.map +1 -0
- package/lib/orm/src/types.d.ts +2 -0
- package/lib/orm/src/types.js +3 -0
- package/lib/orm/src/types.js.map +1 -0
- package/lib/orm/src/wrappers.d.ts +5 -0
- package/lib/orm/src/wrappers.js +13 -0
- package/lib/orm/src/wrappers.js.map +1 -0
- package/lib/orm.d.ts +9 -9
- package/lib/orm.js +69 -47
- package/lib/orm.js.map +1 -1
- package/lib/relations.d.ts +14 -13
- package/lib/relations.js +60 -81
- package/lib/relations.js.map +1 -1
- package/lib/statements.d.ts +1 -1
- package/lib/statements.js +19 -21
- package/lib/statements.js.map +1 -1
- package/lib/wrappers.d.ts +1 -1
- package/lib/wrappers.js.map +1 -1
- package/package.json +37 -61
- package/LICENSE +0 -674
package/lib/model.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { IModelDescrtiptor, InsertBehaviour } from './interfaces';
|
|
2
2
|
import { WhereFunction } from './types';
|
|
3
|
-
import { RawQuery, UpdateQueryBuilder, SelectQueryBuilder,
|
|
3
|
+
import { RawQuery, UpdateQueryBuilder, SelectQueryBuilder, InsertQueryBuilder } from './builders';
|
|
4
4
|
import { WhereOperators } from './enums';
|
|
5
5
|
export declare function extractModelDescriptor(targetOrForward: any): IModelDescrtiptor;
|
|
6
|
-
export declare
|
|
6
|
+
export declare class ModelBase {
|
|
7
7
|
/**
|
|
8
8
|
* Gets descriptor for this model. It contains information about relations, orm driver, connection properties,
|
|
9
9
|
* db table attached, column information and others.
|
|
@@ -15,119 +15,121 @@ export declare abstract class ModelBase<T> {
|
|
|
15
15
|
/**
|
|
16
16
|
* Get all data from db
|
|
17
17
|
*/
|
|
18
|
-
static all<T>(_page?: number, _perPage?: number): SelectQueryBuilder<T
|
|
18
|
+
static all<T extends typeof ModelBase>(this: T, _page?: number, _perPage?: number): SelectQueryBuilder<Array<InstanceType<T>>>;
|
|
19
19
|
/**
|
|
20
|
-
* Inserts data to DB
|
|
20
|
+
* Inserts data to DB.
|
|
21
21
|
*
|
|
22
|
-
* @param _data data to insert
|
|
22
|
+
* @param _data - data to insert
|
|
23
23
|
*/
|
|
24
|
-
static insert<T extends ModelBase
|
|
24
|
+
static insert<T extends typeof ModelBase>(this: T, _data: InstanceType<T> | Partial<InstanceType<T>> | Array<InstanceType<T>> | Array<Partial<InstanceType<T>>>): InsertQueryBuilder;
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Search entities in db
|
|
27
27
|
*
|
|
28
|
-
* @param
|
|
28
|
+
* @param column - column to search or function
|
|
29
|
+
* @param operator - boolean operator
|
|
30
|
+
* @param value - value to compare
|
|
29
31
|
*/
|
|
30
|
-
static
|
|
32
|
+
static where<T extends typeof ModelBase>(this: T, _column: string | boolean | WhereFunction | RawQuery | object, _operator?: WhereOperators | any, _value?: any): SelectQueryBuilder<Array<InstanceType<T>>>;
|
|
31
33
|
/**
|
|
32
|
-
*
|
|
34
|
+
* Updates single or multiple records at once with provided value based on condition
|
|
33
35
|
*
|
|
34
|
-
* @param
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
* @param _data - data to set
|
|
37
|
+
*/
|
|
38
|
+
static update<T extends typeof ModelBase>(this: T, _data: Partial<InstanceType<T>>): UpdateQueryBuilder;
|
|
39
|
+
/**
|
|
40
|
+
* Tries to find all models with given primary keys
|
|
41
|
+
*/
|
|
42
|
+
static find<T extends typeof ModelBase>(this: T, _pks: any[]): Promise<Array<InstanceType<T>>>;
|
|
43
|
+
/**
|
|
44
|
+
* Tries to find all models in db. If not all exists, throws exception
|
|
45
|
+
*/
|
|
46
|
+
static findOrFail<T extends typeof ModelBase>(this: T, _pks: any[]): Promise<Array<InstanceType<T>>>;
|
|
47
|
+
/**
|
|
48
|
+
* gets model by specified pk, if not exists, returns null
|
|
37
49
|
*
|
|
38
|
-
* @returns {SelectQueryBuilder} fluent query builder to add more conditions if needed
|
|
39
50
|
*/
|
|
40
|
-
static
|
|
51
|
+
static get<T extends typeof ModelBase>(this: T, _pk: any): Promise<InstanceType<T>>;
|
|
41
52
|
/**
|
|
42
|
-
*
|
|
53
|
+
* Finds model by specified pk. If model not exists in db throws exception
|
|
43
54
|
*
|
|
44
|
-
* @param _data data to set
|
|
45
55
|
*/
|
|
46
|
-
static
|
|
47
|
-
static find<T>(pks: any[]): Promise<T[]>;
|
|
48
|
-
static find<T>(pks: any): Promise<T>;
|
|
56
|
+
static getOrFail<T extends typeof ModelBase>(this: T, _pk: any): Promise<InstanceType<T>>;
|
|
49
57
|
/**
|
|
50
|
-
* Finds model by specified pk
|
|
51
58
|
*
|
|
52
|
-
*
|
|
59
|
+
* Checks if model with pk key or unique fields exists and if not creates one AND NOT save in db
|
|
60
|
+
* NOTE: it checks for unique fields constraint
|
|
53
61
|
*/
|
|
54
|
-
static
|
|
62
|
+
static getOrNew<T extends typeof ModelBase>(this: T, _pk?: any, _data?: Partial<InstanceType<T>>): Promise<InstanceType<T>>;
|
|
55
63
|
/**
|
|
56
64
|
* Creates raw query on this model. used for quering db for partial data or to perform some kind of operations
|
|
57
65
|
* that dont need full ORM model to involve
|
|
58
66
|
*/
|
|
59
|
-
static query<T>(): SelectQueryBuilder<T>;
|
|
67
|
+
static query<T>(this: T): SelectQueryBuilder<T>;
|
|
60
68
|
/**
|
|
61
69
|
*
|
|
62
70
|
* Checks if model with pk key / unique fields exists and if not creates one and saves to db
|
|
63
71
|
* NOTE: it checks for unique fields too.
|
|
64
72
|
*
|
|
65
|
-
* @param
|
|
73
|
+
* @param data - model width data to check
|
|
66
74
|
*/
|
|
67
|
-
static
|
|
75
|
+
static getOrCreate<T extends typeof ModelBase>(this: T, _pk: any, _data?: Partial<InstanceType<T>>): Promise<InstanceType<T>>;
|
|
68
76
|
/**
|
|
69
77
|
* Creates new model & saves is to db
|
|
70
78
|
*
|
|
71
|
-
* @param
|
|
72
|
-
*/
|
|
73
|
-
static create<T>(_data?: any): Promise<T>;
|
|
74
|
-
/**
|
|
75
|
-
*
|
|
76
|
-
* Checks if model with pk key or unique fields exists and if not creates one AND NOT save in db
|
|
77
|
-
* NOTE: it checks for unique fields constraint
|
|
78
|
-
*
|
|
79
|
-
* @param {any} data - model to check
|
|
79
|
+
* @param data - initial model data
|
|
80
80
|
*/
|
|
81
|
-
static
|
|
81
|
+
static create<T extends typeof ModelBase>(this: T, _data: Partial<InstanceType<T>>): Promise<InstanceType<T>>;
|
|
82
82
|
/**
|
|
83
83
|
* Deletes model from db
|
|
84
84
|
*
|
|
85
|
-
* @param pk
|
|
85
|
+
* @param pk - primary key
|
|
86
86
|
*/
|
|
87
|
-
static destroy():
|
|
87
|
+
static destroy(_pk?: any | any[]): Promise<void>;
|
|
88
88
|
constructor(data?: any);
|
|
89
89
|
/**
|
|
90
90
|
* Fills model with data. It only fills properties that exists in database
|
|
91
91
|
*
|
|
92
|
-
* @param data data to fill
|
|
92
|
+
* @param data - data to fill
|
|
93
93
|
*/
|
|
94
|
-
hydrate(data:
|
|
94
|
+
hydrate(data: Partial<this>): void;
|
|
95
95
|
/**
|
|
96
96
|
* Extracts all data from model. It takes only properties that exists in DB
|
|
97
97
|
*/
|
|
98
|
-
dehydrate():
|
|
98
|
+
dehydrate(): Partial<this>;
|
|
99
99
|
/**
|
|
100
100
|
* deletes enitt from db. If model have SoftDelete decorator, model is marked as deleted
|
|
101
101
|
*/
|
|
102
102
|
destroy(): Promise<void>;
|
|
103
|
+
update(): Promise<void>;
|
|
103
104
|
/**
|
|
104
105
|
* Save all changes to db. It creates new entry id db or updates existing one if
|
|
105
106
|
* primary key exists
|
|
106
107
|
*/
|
|
107
|
-
|
|
108
|
+
insert(insertBehaviour?: InsertBehaviour): Promise<void>;
|
|
108
109
|
/**
|
|
109
110
|
* Gets model data from database and returns as fresh instance.
|
|
110
111
|
*/
|
|
111
|
-
fresh(): Promise<
|
|
112
|
+
fresh(): Promise<this>;
|
|
112
113
|
/**
|
|
113
114
|
* sets default values for model. values are taken from DB default column prop
|
|
114
115
|
*/
|
|
115
|
-
protected
|
|
116
|
+
protected setDefaults(): void;
|
|
116
117
|
}
|
|
117
118
|
export declare const MODEL_STATIC_MIXINS: {
|
|
118
119
|
query(): SelectQueryBuilder;
|
|
119
120
|
where(column: string | boolean | WhereFunction | RawQuery | {}, operator?: WhereOperators | any, value?: any): SelectQueryBuilder;
|
|
120
|
-
update(data:
|
|
121
|
+
update<T extends typeof ModelBase>(data: Partial<InstanceType<T>>): UpdateQueryBuilder;
|
|
121
122
|
all(page: number, perPage: number): SelectQueryBuilder;
|
|
122
|
-
insertBulk<T>(data: (object | ModelBase<T>)[]): InsertQueryBuilder;
|
|
123
123
|
/**
|
|
124
124
|
* Try to insert new value
|
|
125
125
|
*/
|
|
126
|
-
insert<T_1>(data:
|
|
127
|
-
find(
|
|
128
|
-
findOrFail<
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
126
|
+
insert<T_1 extends typeof ModelBase>(this: T_1, data: InstanceType<T_1> | Partial<InstanceType<T_1>> | InstanceType<T_1>[] | Partial<InstanceType<T_1>>[]): InsertQueryBuilder;
|
|
127
|
+
find<T_2 extends typeof ModelBase>(this: T_2, pks: any[]): Promise<InstanceType<T_2>[]>;
|
|
128
|
+
findOrFail<T_3 extends typeof ModelBase>(this: T_3, pks: any[]): Promise<InstanceType<T_3>[]>;
|
|
129
|
+
get<T_4 extends typeof ModelBase>(this: T_4, pk: any): Promise<InstanceType<T_4>>;
|
|
130
|
+
getOrFail<T_5 extends typeof ModelBase>(this: T_5, pk: any): Promise<InstanceType<T_5>>;
|
|
131
|
+
destroy(pks: any | any[]): Promise<void>;
|
|
132
|
+
create<T_6 extends typeof ModelBase>(this: T_6, data: Partial<InstanceType<T_6>>): Promise<InstanceType<T_6>>;
|
|
133
|
+
getOrCreate<T_7 extends typeof ModelBase>(this: T_7, pk: any, data: Partial<InstanceType<T_7>>): Promise<InstanceType<T_7>>;
|
|
134
|
+
getOrNew<T_8 extends typeof ModelBase>(this: T_8, pk: any, data?: Partial<InstanceType<T_8>>): Promise<InstanceType<T_8>>;
|
|
133
135
|
};
|
package/lib/model.js
CHANGED
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
3
|
exports.MODEL_STATIC_MIXINS = exports.ModelBase = exports.extractModelDescriptor = void 0;
|
|
4
|
+
/* eslint-disable prettier/prettier */
|
|
23
5
|
const relations_1 = require("./relations");
|
|
24
6
|
const decorators_1 = require("./decorators");
|
|
25
7
|
const interfaces_1 = require("./interfaces");
|
|
@@ -27,10 +9,11 @@ const builders_1 = require("./builders");
|
|
|
27
9
|
const di_1 = require("@spinajs/di");
|
|
28
10
|
const orm_1 = require("./orm");
|
|
29
11
|
const hydrators_1 = require("./hydrators");
|
|
30
|
-
const _ =
|
|
12
|
+
const _ = require("lodash");
|
|
31
13
|
const uuid_1 = require("uuid");
|
|
14
|
+
const exceptions_1 = require("./exceptions");
|
|
32
15
|
function extractModelDescriptor(targetOrForward) {
|
|
33
|
-
const target = !di_1.isConstructor(targetOrForward) && targetOrForward ? targetOrForward() : targetOrForward;
|
|
16
|
+
const target = !(0, di_1.isConstructor)(targetOrForward) && targetOrForward ? targetOrForward() : targetOrForward;
|
|
34
17
|
if (!target) {
|
|
35
18
|
return null;
|
|
36
19
|
}
|
|
@@ -82,51 +65,63 @@ class ModelBase {
|
|
|
82
65
|
throw Error('Not implemented');
|
|
83
66
|
}
|
|
84
67
|
/**
|
|
85
|
-
* Inserts data to DB
|
|
68
|
+
* Inserts data to DB.
|
|
86
69
|
*
|
|
87
|
-
* @param _data data to insert
|
|
70
|
+
* @param _data - data to insert
|
|
88
71
|
*/
|
|
89
72
|
static insert(_data) {
|
|
90
73
|
throw Error('Not implemented');
|
|
91
74
|
}
|
|
92
75
|
/**
|
|
93
|
-
*
|
|
76
|
+
* Search entities in db
|
|
94
77
|
*
|
|
95
|
-
* @param
|
|
78
|
+
* @param column - column to search or function
|
|
79
|
+
* @param operator - boolean operator
|
|
80
|
+
* @param value - value to compare
|
|
96
81
|
*/
|
|
97
|
-
static
|
|
82
|
+
static where(_column, _operator, _value) {
|
|
98
83
|
throw Error('Not implemented');
|
|
99
84
|
}
|
|
100
85
|
/**
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
* @param column column to search or function
|
|
104
|
-
* @param operator boolean operator
|
|
105
|
-
* @param value value to compare
|
|
86
|
+
* Updates single or multiple records at once with provided value based on condition
|
|
106
87
|
*
|
|
107
|
-
* @
|
|
88
|
+
* @param _data - data to set
|
|
108
89
|
*/
|
|
109
|
-
static
|
|
90
|
+
static update(_data) {
|
|
110
91
|
throw Error('Not implemented');
|
|
111
92
|
}
|
|
112
93
|
/**
|
|
113
|
-
*
|
|
94
|
+
* Tries to find all models with given primary keys
|
|
95
|
+
*/
|
|
96
|
+
static find(_pks) {
|
|
97
|
+
throw Error('Not implemented');
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Tries to find all models in db. If not all exists, throws exception
|
|
101
|
+
*/
|
|
102
|
+
static findOrFail(_pks) {
|
|
103
|
+
throw Error('Not implemented');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* gets model by specified pk, if not exists, returns null
|
|
114
107
|
*
|
|
115
|
-
* @param _data data to set
|
|
116
108
|
*/
|
|
117
|
-
static
|
|
109
|
+
static get(_pk) {
|
|
118
110
|
throw Error('Not implemented');
|
|
119
111
|
}
|
|
120
|
-
|
|
121
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Finds model by specified pk. If model not exists in db throws exception
|
|
114
|
+
*
|
|
115
|
+
*/
|
|
116
|
+
static getOrFail(_pk) {
|
|
122
117
|
throw Error('Not implemented');
|
|
123
118
|
}
|
|
124
119
|
/**
|
|
125
|
-
* Finds model by specified pk
|
|
126
120
|
*
|
|
127
|
-
*
|
|
121
|
+
* Checks if model with pk key or unique fields exists and if not creates one AND NOT save in db
|
|
122
|
+
* NOTE: it checks for unique fields constraint
|
|
128
123
|
*/
|
|
129
|
-
static
|
|
124
|
+
static getOrNew(_pk, _data) {
|
|
130
125
|
throw Error('Not implemented');
|
|
131
126
|
}
|
|
132
127
|
/**
|
|
@@ -141,34 +136,29 @@ class ModelBase {
|
|
|
141
136
|
* Checks if model with pk key / unique fields exists and if not creates one and saves to db
|
|
142
137
|
* NOTE: it checks for unique fields too.
|
|
143
138
|
*
|
|
144
|
-
* @param
|
|
139
|
+
* @param data - model width data to check
|
|
145
140
|
*/
|
|
146
|
-
static
|
|
141
|
+
static getOrCreate(_pk, _data) {
|
|
147
142
|
throw Error('Not implemented');
|
|
148
143
|
}
|
|
149
144
|
/**
|
|
150
145
|
* Creates new model & saves is to db
|
|
151
146
|
*
|
|
152
|
-
* @param
|
|
147
|
+
* @param data - initial model data
|
|
153
148
|
*/
|
|
154
149
|
static create(_data) {
|
|
155
150
|
throw Error('Not implemented');
|
|
156
151
|
}
|
|
157
152
|
/**
|
|
153
|
+
* Deletes model from db
|
|
158
154
|
*
|
|
159
|
-
*
|
|
160
|
-
* NOTE: it checks for unique fields constraint
|
|
161
|
-
*
|
|
162
|
-
* @param {any} data - model to check
|
|
155
|
+
* @param pk - primary key
|
|
163
156
|
*/
|
|
164
|
-
static firstOrNew(_data) {
|
|
165
|
-
throw Error('Not implemented');
|
|
166
|
-
}
|
|
167
157
|
static destroy(_pk) {
|
|
168
158
|
throw Error('Not implemented');
|
|
169
159
|
}
|
|
170
160
|
constructor(data) {
|
|
171
|
-
this.
|
|
161
|
+
this.setDefaults();
|
|
172
162
|
if (data) {
|
|
173
163
|
Object.assign(this, data);
|
|
174
164
|
}
|
|
@@ -176,10 +166,10 @@ class ModelBase {
|
|
|
176
166
|
/**
|
|
177
167
|
* Fills model with data. It only fills properties that exists in database
|
|
178
168
|
*
|
|
179
|
-
* @param data data to fill
|
|
169
|
+
* @param data - data to fill
|
|
180
170
|
*/
|
|
181
171
|
hydrate(data) {
|
|
182
|
-
di_1.DI.resolve(Array.ofType(hydrators_1.ModelHydrator)).forEach(h => h.hydrate(this, data));
|
|
172
|
+
di_1.DI.resolve(Array.ofType(hydrators_1.ModelHydrator)).forEach((h) => h.hydrate(this, data));
|
|
183
173
|
}
|
|
184
174
|
/**
|
|
185
175
|
* Extracts all data from model. It takes only properties that exists in DB
|
|
@@ -187,8 +177,11 @@ class ModelBase {
|
|
|
187
177
|
dehydrate() {
|
|
188
178
|
var _a;
|
|
189
179
|
const obj = {};
|
|
190
|
-
(_a = this.ModelDescriptor.Columns) === null || _a === void 0 ? void 0 : _a.forEach(c => {
|
|
180
|
+
(_a = this.ModelDescriptor.Columns) === null || _a === void 0 ? void 0 : _a.forEach((c) => {
|
|
191
181
|
const val = this[c.Name];
|
|
182
|
+
if (!c.Nullable && (val === null || val === undefined || val === '')) {
|
|
183
|
+
throw new exceptions_1.OrmException(`Field ${c.Name} cannot be null`);
|
|
184
|
+
}
|
|
192
185
|
obj[c.Name] = c.Converter ? c.Converter.toDB(val) : val;
|
|
193
186
|
});
|
|
194
187
|
for (const [, val] of this.ModelDescriptor.Relations) {
|
|
@@ -209,62 +202,60 @@ class ModelBase {
|
|
|
209
202
|
}
|
|
210
203
|
await this.constructor.destroy(this.PrimaryKeyValue);
|
|
211
204
|
}
|
|
205
|
+
async update() {
|
|
206
|
+
const { query } = _createQuery(this.constructor, builders_1.UpdateQueryBuilder);
|
|
207
|
+
if (this.ModelDescriptor.Timestamps.UpdatedAt) {
|
|
208
|
+
this[this.ModelDescriptor.Timestamps.UpdatedAt] = new Date();
|
|
209
|
+
}
|
|
210
|
+
await query.update(this.dehydrate()).where(this.PrimaryKeyName, this.PrimaryKeyValue);
|
|
211
|
+
}
|
|
212
212
|
/**
|
|
213
213
|
* Save all changes to db. It creates new entry id db or updates existing one if
|
|
214
214
|
* primary key exists
|
|
215
215
|
*/
|
|
216
|
-
async
|
|
216
|
+
async insert(insertBehaviour = interfaces_1.InsertBehaviour.None) {
|
|
217
217
|
const self = this;
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
218
|
+
const { query, description } = _createQuery(this.constructor, builders_1.InsertQueryBuilder);
|
|
219
|
+
switch (insertBehaviour) {
|
|
220
|
+
case interfaces_1.InsertBehaviour.OnDuplicateIgnore:
|
|
221
|
+
query.ignore();
|
|
222
|
+
break;
|
|
223
|
+
case interfaces_1.InsertBehaviour.OnDuplicateUpdate:
|
|
224
|
+
query.onDuplicate().update(description.Columns.filter((c) => !c.PrimaryKey).map((c) => c.Name));
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
const id = await query.values(this.dehydrate());
|
|
228
|
+
// ignore fired, we dont have insert ID
|
|
229
|
+
if (insertBehaviour !== interfaces_1.InsertBehaviour.None && id === 0 && !this.PrimaryKeyValue) {
|
|
230
|
+
const { query, description } = _createQuery(this.constructor, builders_1.SelectQueryBuilder, false);
|
|
231
|
+
const idRes = await query
|
|
232
|
+
.columns([this.PrimaryKeyName])
|
|
233
|
+
.where(function () {
|
|
234
|
+
description.Columns.filter((c) => c.Unique).forEach((c) => {
|
|
235
|
+
this.where(c, self[c.Name]);
|
|
236
|
+
});
|
|
237
|
+
})
|
|
238
|
+
.first();
|
|
239
|
+
this.PrimaryKeyValue = idRes[this.PrimaryKeyName];
|
|
224
240
|
}
|
|
225
241
|
else {
|
|
226
|
-
|
|
227
|
-
switch (insertBehaviour) {
|
|
228
|
-
case interfaces_1.InsertBehaviour.OnDuplicateIgnore:
|
|
229
|
-
query.ignore();
|
|
230
|
-
break;
|
|
231
|
-
case interfaces_1.InsertBehaviour.OnDuplicateUpdate:
|
|
232
|
-
query.onDuplicate().update(description.Columns.filter(c => !c.PrimaryKey).map(c => c.Name));
|
|
233
|
-
break;
|
|
234
|
-
}
|
|
235
|
-
const id = await query.values(this.dehydrate());
|
|
236
|
-
// ignore fired, we dont have insert ID
|
|
237
|
-
if (insertBehaviour !== interfaces_1.InsertBehaviour.None && id === 0 && !this.PrimaryKeyValue) {
|
|
238
|
-
const { query, description } = _createQuery(this.constructor, builders_1.SelectQueryBuilder, false);
|
|
239
|
-
const idRes = await query
|
|
240
|
-
.columns([this.PrimaryKeyName])
|
|
241
|
-
.where(function () {
|
|
242
|
-
description.Columns.filter(c => c.Unique).forEach(c => {
|
|
243
|
-
this.where(c, self[c.Name]);
|
|
244
|
-
});
|
|
245
|
-
})
|
|
246
|
-
.first();
|
|
247
|
-
this.PrimaryKeyValue = idRes[this.PrimaryKeyName];
|
|
248
|
-
}
|
|
249
|
-
else {
|
|
250
|
-
this.PrimaryKeyValue = id;
|
|
251
|
-
}
|
|
242
|
+
this.PrimaryKeyValue = id;
|
|
252
243
|
}
|
|
253
244
|
}
|
|
254
245
|
/**
|
|
255
246
|
* Gets model data from database and returns as fresh instance.
|
|
256
247
|
*/
|
|
257
248
|
async fresh() {
|
|
258
|
-
return this.constructor.
|
|
249
|
+
return this.constructor.get(this.PrimaryKeyValue);
|
|
259
250
|
}
|
|
260
251
|
/**
|
|
261
252
|
* sets default values for model. values are taken from DB default column prop
|
|
262
253
|
*/
|
|
263
|
-
|
|
254
|
+
setDefaults() {
|
|
264
255
|
var _a;
|
|
265
|
-
(_a = this.ModelDescriptor.Columns) === null || _a === void 0 ? void 0 : _a.forEach(c => {
|
|
256
|
+
(_a = this.ModelDescriptor.Columns) === null || _a === void 0 ? void 0 : _a.forEach((c) => {
|
|
266
257
|
if (c.Uuid) {
|
|
267
|
-
this[c.Name] = uuid_1.v4();
|
|
258
|
+
this[c.Name] = (0, uuid_1.v4)();
|
|
268
259
|
}
|
|
269
260
|
else {
|
|
270
261
|
this[c.Name] = c.DefaultValue;
|
|
@@ -329,31 +320,32 @@ exports.MODEL_STATIC_MIXINS = {
|
|
|
329
320
|
},
|
|
330
321
|
all(page, perPage) {
|
|
331
322
|
const { query } = _createQuery(this, builders_1.SelectQueryBuilder);
|
|
332
|
-
query.select(
|
|
323
|
+
query.select('*');
|
|
333
324
|
if (page >= 0 && perPage > 0) {
|
|
334
325
|
query.take(perPage).skip(page * perPage);
|
|
335
326
|
}
|
|
336
327
|
return query;
|
|
337
328
|
},
|
|
338
|
-
insertBulk(data) {
|
|
339
|
-
const { query } = _createQuery(this, builders_1.InsertQueryBuilder);
|
|
340
|
-
return query.values(data.map(d => {
|
|
341
|
-
if (d instanceof ModelBase) {
|
|
342
|
-
return d.dehydrate();
|
|
343
|
-
}
|
|
344
|
-
return d;
|
|
345
|
-
}));
|
|
346
|
-
},
|
|
347
329
|
/**
|
|
348
330
|
* Try to insert new value
|
|
349
331
|
*/
|
|
350
332
|
insert(data) {
|
|
351
333
|
const { query } = _createQuery(this, builders_1.InsertQueryBuilder);
|
|
352
|
-
if (data
|
|
353
|
-
query.values(data.
|
|
334
|
+
if (Array.isArray(data)) {
|
|
335
|
+
query.values(data.map((d) => {
|
|
336
|
+
if (d instanceof ModelBase) {
|
|
337
|
+
return d.dehydrate();
|
|
338
|
+
}
|
|
339
|
+
return d;
|
|
340
|
+
}));
|
|
354
341
|
}
|
|
355
342
|
else {
|
|
356
|
-
|
|
343
|
+
if (data instanceof ModelBase) {
|
|
344
|
+
query.values(data.dehydrate());
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
query.values(data);
|
|
348
|
+
}
|
|
357
349
|
}
|
|
358
350
|
return query;
|
|
359
351
|
},
|
|
@@ -361,7 +353,8 @@ exports.MODEL_STATIC_MIXINS = {
|
|
|
361
353
|
const { query, description } = _createQuery(this, builders_1.SelectQueryBuilder);
|
|
362
354
|
const pkey = description.PrimaryKey;
|
|
363
355
|
query.select('*');
|
|
364
|
-
|
|
356
|
+
query.whereIn(pkey, pks);
|
|
357
|
+
return await query;
|
|
365
358
|
},
|
|
366
359
|
async findOrFail(pks) {
|
|
367
360
|
const { query, description } = _createQuery(this, builders_1.SelectQueryBuilder);
|
|
@@ -380,80 +373,70 @@ exports.MODEL_STATIC_MIXINS = {
|
|
|
380
373
|
async afterHydration(_data) { },
|
|
381
374
|
};
|
|
382
375
|
query.select('*');
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
return await query;
|
|
387
|
-
}
|
|
388
|
-
else {
|
|
389
|
-
return await query.where(pkey, pks).firstOrFail();
|
|
390
|
-
}
|
|
376
|
+
query.whereIn(pkey, pks);
|
|
377
|
+
query.middleware(middleware);
|
|
378
|
+
return await query;
|
|
391
379
|
},
|
|
392
|
-
|
|
393
|
-
|
|
380
|
+
async get(pk) {
|
|
381
|
+
const { query, description } = _createQuery(this, builders_1.SelectQueryBuilder);
|
|
382
|
+
const pkey = description.PrimaryKey;
|
|
383
|
+
query.select('*');
|
|
384
|
+
query.where(pkey, pk);
|
|
385
|
+
return await query.first();
|
|
386
|
+
},
|
|
387
|
+
async getOrFail(pk) {
|
|
388
|
+
const { query, description } = _createQuery(this, builders_1.SelectQueryBuilder);
|
|
389
|
+
const pkey = description.PrimaryKey;
|
|
390
|
+
query.select('*');
|
|
391
|
+
query.where(pkey, pk);
|
|
392
|
+
return await query.firstOrFail();
|
|
393
|
+
},
|
|
394
|
+
async destroy(pks) {
|
|
395
|
+
var _a;
|
|
394
396
|
const description = _descriptor(this);
|
|
395
397
|
const orm = di_1.DI.get(orm_1.Orm);
|
|
396
398
|
const driver = orm.Connections.get(description.Connection);
|
|
397
399
|
const converter = driver.Container.resolve(interfaces_1.DatetimeValueConverter);
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
const { query } = _createQuery(this, builders_1.UpdateQueryBuilder);
|
|
401
|
-
query.update({
|
|
402
|
-
[description.SoftDelete.DeletedAt]: converter.toDB(new Date()),
|
|
403
|
-
});
|
|
404
|
-
return query;
|
|
405
|
-
}
|
|
406
|
-
else {
|
|
407
|
-
const { query } = _createQuery(this, builders_1.DeleteQueryBuilder);
|
|
408
|
-
return query;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
if ((_b = description.SoftDelete) === null || _b === void 0 ? void 0 : _b.DeletedAt) {
|
|
412
|
-
const data = Array.isArray(pks) ? pks : [pks];
|
|
400
|
+
const data = Array.isArray(pks) ? pks : [pks];
|
|
401
|
+
if ((_a = description.SoftDelete) === null || _a === void 0 ? void 0 : _a.DeletedAt) {
|
|
413
402
|
const { query } = _createQuery(this, builders_1.UpdateQueryBuilder);
|
|
414
|
-
|
|
415
|
-
.whereIn(description.PrimaryKey, data)
|
|
416
|
-
.update({
|
|
403
|
+
await query.whereIn(description.PrimaryKey, data).update({
|
|
417
404
|
[description.SoftDelete.DeletedAt]: converter.toDB(new Date()),
|
|
418
405
|
});
|
|
419
406
|
}
|
|
420
407
|
else {
|
|
421
408
|
const { query } = _createQuery(this, builders_1.DeleteQueryBuilder);
|
|
422
|
-
|
|
409
|
+
await query.whereIn(description.PrimaryKey, data);
|
|
423
410
|
}
|
|
424
411
|
},
|
|
425
412
|
async create(data) {
|
|
426
413
|
const entity = new (Function.prototype.bind.apply(this))(data);
|
|
427
|
-
await entity.
|
|
414
|
+
await entity.insert();
|
|
428
415
|
return entity;
|
|
429
416
|
},
|
|
430
|
-
async
|
|
417
|
+
async getOrCreate(pk, data) {
|
|
431
418
|
const { query, description } = _createQuery(this, builders_1.SelectQueryBuilder);
|
|
432
419
|
// pk constrain
|
|
433
|
-
|
|
434
|
-
query.where(description.PrimaryKey, data[description.PrimaryKey]);
|
|
435
|
-
}
|
|
420
|
+
query.where(description.PrimaryKey, pk);
|
|
436
421
|
// check for all unique columns ( unique constrain )
|
|
437
|
-
description.Columns.filter(c => c.Unique).forEach(c => {
|
|
438
|
-
query.
|
|
422
|
+
description.Columns.filter((c) => c.Unique).forEach((c) => {
|
|
423
|
+
query.andWhere(c, data[c.Name]);
|
|
439
424
|
});
|
|
440
425
|
let entity = (await query.first());
|
|
441
426
|
if (!entity) {
|
|
442
427
|
entity = new (Function.prototype.bind.apply(this))(data);
|
|
443
|
-
await entity.
|
|
428
|
+
await entity.insert();
|
|
444
429
|
return entity;
|
|
445
430
|
}
|
|
446
431
|
return entity;
|
|
447
432
|
},
|
|
448
|
-
async
|
|
433
|
+
async getOrNew(pk, data) {
|
|
449
434
|
const { query, description } = _createQuery(this, builders_1.SelectQueryBuilder);
|
|
450
435
|
// pk constrain
|
|
451
|
-
|
|
452
|
-
query.where(description.PrimaryKey, data[description.PrimaryKey]);
|
|
453
|
-
}
|
|
436
|
+
query.where(description.PrimaryKey, pk);
|
|
454
437
|
// check for all unique columns ( unique constrain )
|
|
455
|
-
description.Columns.filter(c => c.Unique).forEach(c => {
|
|
456
|
-
query.
|
|
438
|
+
description.Columns.filter((c) => c.Unique).forEach((c) => {
|
|
439
|
+
query.andWhere(c, data[c.Name]);
|
|
457
440
|
});
|
|
458
441
|
let entity = (await query.first());
|
|
459
442
|
if (!entity) {
|