chyz 1.0.12-rc.8 → 1.0.13-rc.3
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/BaseChyz.ts +72 -12
- package/Examples/Controllers/ApiController.ts +88 -30
- package/Examples/Controllers/KeyCloakController.ts +100 -0
- package/Examples/Controllers/PublicController.ts +5 -7
- package/Examples/Controllers/SiteController.ts +82 -32
- package/Examples/Models/Categories.ts +36 -0
- package/Examples/Models/Customer.ts +115 -0
- package/Examples/Models/KeycloakUser.ts +66 -0
- package/Examples/Models/Order.ts +64 -0
- package/Examples/Models/OrderItem.ts +27 -0
- package/Examples/Models/ProductModels.ts +50 -0
- package/Examples/Models/ProductToCategories.ts +35 -0
- package/Examples/Models/Products.ts +49 -0
- package/Examples/Models/Stocks.ts +60 -0
- package/Examples/Models/User.ts +66 -35
- package/Examples/Models/UserPermission.ts +37 -0
- package/Examples/index-keycloack.ts +78 -0
- package/Examples/index.ts +16 -15
- package/Examples/keycloak.json +7 -0
- package/Examples/log/app.log +903 -1034
- package/Examples/log/errors.log +79 -256
- package/Examples/package.json +46 -44
- package/Examples/tsconfig.json +1 -1
- package/README.md +118 -16
- package/base/ActionFilter.ts +2 -2
- package/base/BaseError.ts +2 -2
- package/base/DataErrorDbException.ts +1 -1
- package/base/DbConnection.ts +6 -0
- package/base/ForbiddenHttpException.ts +1 -1
- package/base/InvalidConfigException.ts +1 -1
- package/base/Model.ts +204 -15
- package/base/NotFoundHttpException.ts +1 -1
- package/base/RestClient.ts +28 -0
- package/base/UnauthorizedHttpException.ts +2 -1
- package/base/ValidationHttpException.ts +14 -0
- package/base/db/Exception.ts +14 -0
- package/base/index.ts +2 -0
- package/dist/BaseChyz.js +56 -10
- package/dist/BaseChyz.js.map +1 -1
- package/dist/README.md +270 -0
- package/dist/base/ActionFilter.js +2 -2
- package/dist/base/ActionFilter.js.map +1 -1
- package/dist/base/BaseError.js +2 -2
- package/dist/base/BaseError.js.map +1 -1
- package/dist/base/DataErrorDbException.js +1 -1
- package/dist/base/DataErrorDbException.js.map +1 -1
- package/dist/base/DbConnection.js +3 -0
- package/dist/base/DbConnection.js.map +1 -1
- package/dist/base/ForbiddenHttpException.js +1 -1
- package/dist/base/ForbiddenHttpException.js.map +1 -1
- package/dist/base/InvalidConfigException.js +1 -1
- package/dist/base/InvalidConfigException.js.map +1 -1
- package/dist/base/Model.js +181 -13
- package/dist/base/Model.js.map +1 -1
- package/dist/base/NotFoundHttpException.js +1 -1
- package/dist/base/NotFoundHttpException.js.map +1 -1
- package/dist/base/RestClient.js +27 -0
- package/dist/base/RestClient.js.map +1 -0
- package/dist/base/UnauthorizedHttpException.js +1 -1
- package/dist/base/UnauthorizedHttpException.js.map +1 -1
- package/dist/base/ValidationHttpException.js +18 -0
- package/dist/base/ValidationHttpException.js.map +1 -0
- package/dist/base/db/Exception.js +16 -0
- package/dist/base/db/Exception.js.map +1 -0
- package/dist/base/index.js +2 -0
- package/dist/base/index.js.map +1 -1
- package/dist/filters/AccessControl.js +2 -2
- package/dist/filters/AccessControl.js.map +1 -1
- package/dist/filters/AccessRule.js.map +1 -1
- package/dist/filters/auth/AuthMethod.js +2 -2
- package/dist/filters/auth/AuthMethod.js.map +1 -1
- package/dist/filters/auth/HttpHeaderAuth.js.map +1 -1
- package/dist/filters/auth/JwtHttpBearerAuth.js +1 -0
- package/dist/filters/auth/JwtHttpBearerAuth.js.map +1 -1
- package/dist/filters/auth/KeyCloakHttpBearerAuth.js +117 -0
- package/dist/filters/auth/KeyCloakHttpBearerAuth.js.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/package.json +55 -0
- package/dist/web/{User.js → WebUser.js} +12 -7
- package/dist/web/WebUser.js.map +1 -0
- package/filters/AccessControl.ts +3 -3
- package/filters/AccessRule.ts +2 -2
- package/filters/auth/AuthMethod.ts +4 -4
- package/filters/auth/HttpHeaderAuth.ts +2 -2
- package/filters/auth/JwtHttpBearerAuth.ts +4 -5
- package/filters/auth/KeyCloakHttpBearerAuth.ts +115 -0
- package/index.ts +14 -0
- package/package-lock.json +5259 -0
- package/package.json +56 -52
- package/web/{User.ts → WebUser.ts} +10 -6
- package/.idea/Chy-Nodejs-Framework.iml +0 -12
- package/.idea/jsLibraryMappings.xml +0 -6
- package/.idea/modules.xml +0 -8
- package/.idea/vcs.xml +0 -6
- package/dist/web/User.js.map +0 -1
package/dist/README.md
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
Hızlı şekilde microservis hazırlama için geliştirmeye başladım<br>
|
|
2
|
+
|
|
3
|
+
Temel olarak yii2 php framework'ten örnekler alındı<br>
|
|
4
|
+
|
|
5
|
+
Temel olarak basit bir Controller geliştirildi, ayrıca authentication geliştirildi.<br>
|
|
6
|
+
|
|
7
|
+
Klasör Yapısı<br>
|
|
8
|
+
*---Controllers <br>
|
|
9
|
+
*---Models<br>
|
|
10
|
+
*---Log<br>
|
|
11
|
+
*---Framework<br>
|
|
12
|
+
index.ts<br>
|
|
13
|
+
|
|
14
|
+
`##Başlangıç<br>
|
|
15
|
+
yarn start
|
|
16
|
+
|
|
17
|
+
## index.ts alanlar düzenlenmeli.
|
|
18
|
+
|
|
19
|
+
```typescript
|
|
20
|
+
require('dotenv-flow').config();
|
|
21
|
+
|
|
22
|
+
import BaseChyz from "chyz/dist/BaseChyz";
|
|
23
|
+
import Chyz, {DbConnection} from "chyz/dist";
|
|
24
|
+
import {WebUser} from "../web/WebUser";
|
|
25
|
+
import {User} from "./Models/User";
|
|
26
|
+
|
|
27
|
+
let config = {
|
|
28
|
+
components: {
|
|
29
|
+
db: {
|
|
30
|
+
class: DbConnection,
|
|
31
|
+
database: process.env.DBDATABASE,
|
|
32
|
+
username: process.env.DBUSER,
|
|
33
|
+
password: process.env.DBPASS,
|
|
34
|
+
options: {
|
|
35
|
+
host: process.env.DBHOST,
|
|
36
|
+
dialect: 'postgres', /* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */
|
|
37
|
+
// disable logging; default: console.log
|
|
38
|
+
logging: false
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
user: {
|
|
42
|
+
'class': WebUser,
|
|
43
|
+
'identityClass': User
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
Chyz.app(config).Start();
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Create Model
|
|
51
|
+
|
|
52
|
+
Veritabanı işlemleri için model oluşturma, sequelize desteklidir.
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
import {Model, DataTypes} from "chyz/base/Model";
|
|
56
|
+
|
|
57
|
+
export class CustomerCLass extends Model {
|
|
58
|
+
public tableName() {
|
|
59
|
+
return 'customer';
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public attributes() {
|
|
63
|
+
return {
|
|
64
|
+
username: {
|
|
65
|
+
type: DataTypes.STRING,
|
|
66
|
+
allowNull: false,
|
|
67
|
+
validate: {
|
|
68
|
+
notEmpty: true,
|
|
69
|
+
len: [4, 255],
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
email: {
|
|
73
|
+
type: DataTypes.STRING,
|
|
74
|
+
validate: {
|
|
75
|
+
isEmail: true
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
firstname: {
|
|
79
|
+
type: DataTypes.STRING,
|
|
80
|
+
allowNull: false
|
|
81
|
+
},
|
|
82
|
+
lastname: {
|
|
83
|
+
type: DataTypes.STRING,
|
|
84
|
+
},
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
const Customer= new CustomerCLass();
|
|
90
|
+
export { Customer };
|
|
91
|
+
|
|
92
|
+
```
|
|
93
|
+
````typescript
|
|
94
|
+
export class ProductsClass extends Model {
|
|
95
|
+
[x: string]: any;
|
|
96
|
+
|
|
97
|
+
tableName() {
|
|
98
|
+
return 'products';
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
attributes() {
|
|
102
|
+
return {
|
|
103
|
+
// Model attributes are defined here
|
|
104
|
+
title: {
|
|
105
|
+
type: DataTypes.STRING,
|
|
106
|
+
allowNull: false
|
|
107
|
+
},
|
|
108
|
+
model_id: {
|
|
109
|
+
type: DataTypes.INTEGER,
|
|
110
|
+
allowNull: false
|
|
111
|
+
},
|
|
112
|
+
properties: {
|
|
113
|
+
type: DataTypes.STRING,
|
|
114
|
+
allowNull: false
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
relations(): Relation[] {
|
|
121
|
+
return [
|
|
122
|
+
{
|
|
123
|
+
type: "hasOne",
|
|
124
|
+
foreignKey: "id",
|
|
125
|
+
sourceKey: "customer_id",
|
|
126
|
+
model: Customer.model()
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const Products = new ProductsClass()
|
|
133
|
+
export {Products}
|
|
134
|
+
````
|
|
135
|
+
|
|
136
|
+
## Http POST ve GET verilerini model'e yükleme
|
|
137
|
+
|
|
138
|
+
````typescript
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* post data
|
|
142
|
+
* {
|
|
143
|
+
* "Customer":{
|
|
144
|
+
* "firstname":"cihan",
|
|
145
|
+
* "lastname":"ozturk"
|
|
146
|
+
* ....
|
|
147
|
+
* }
|
|
148
|
+
* }
|
|
149
|
+
* @type {Customer}
|
|
150
|
+
*/
|
|
151
|
+
import {Customer} from "./Customer";
|
|
152
|
+
//Customer Model Create
|
|
153
|
+
let customer: Customer = Customer;
|
|
154
|
+
customer.load(req.body, "Customer");//load customer data
|
|
155
|
+
let cus: any = await customer.save();
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
````
|
|
159
|
+
## Transaction
|
|
160
|
+
Transaction oluşturma
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
```typescript
|
|
164
|
+
let transaction
|
|
165
|
+
try {
|
|
166
|
+
// get transaction
|
|
167
|
+
transaction = await BaseChyz.getComponent("db").transaction();
|
|
168
|
+
//Customer Model Create
|
|
169
|
+
let customer: Customer = new Customer();
|
|
170
|
+
customer.load(data, "Customer");//load customer data
|
|
171
|
+
let cus: any = await customer.save({}, {transaction});
|
|
172
|
+
if (!cus) {
|
|
173
|
+
throw new ValidationHttpException(customer.errors);
|
|
174
|
+
}
|
|
175
|
+
} catch (e) {
|
|
176
|
+
if (transaction) {
|
|
177
|
+
await transaction.rollback();
|
|
178
|
+
BaseChyz.warn("Rollback transaction")
|
|
179
|
+
}
|
|
180
|
+
...
|
|
181
|
+
}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## Yetkilendirme için kullanıcı modeli
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
/*
|
|
188
|
+
* Copyright (c) 2021. Chy Bilgisayar Bilisim
|
|
189
|
+
* Author: Cihan Ozturk
|
|
190
|
+
* E-mail: cihan@chy.com.tr
|
|
191
|
+
* Github:https://github.com/cihan53/
|
|
192
|
+
*/
|
|
193
|
+
import {IdentityInterface} from "chyz/web/IdentityInterface";
|
|
194
|
+
// @ts-ignore
|
|
195
|
+
import {DataTypes} from "chyz/base";
|
|
196
|
+
import {Model} from "chyz/base";
|
|
197
|
+
import BaseChyz from "chyz/BaseChyz";
|
|
198
|
+
|
|
199
|
+
const bcrypt = require('bcrypt');
|
|
200
|
+
const JsonWebToken = require("jsonwebtoken");
|
|
201
|
+
|
|
202
|
+
export class User extends Model implements IdentityInterface {
|
|
203
|
+
public tableName() {
|
|
204
|
+
return 'users';
|
|
205
|
+
}
|
|
206
|
+
findIdentity(id: number) {
|
|
207
|
+
throw new Error("Method not implemented.");
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
getId(): number {
|
|
211
|
+
throw new Error("Method not implemented.");
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
getAuthKey(): string {
|
|
215
|
+
throw new Error("Method not implemented.");
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
validateAuthKey(authKey: string): boolean {
|
|
219
|
+
throw new Error("Method not implemented.");
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
public attributes() {
|
|
223
|
+
return {
|
|
224
|
+
// Model attributes are defined here
|
|
225
|
+
username: {
|
|
226
|
+
type: DataTypes.STRING,
|
|
227
|
+
allowNull: false
|
|
228
|
+
},
|
|
229
|
+
password: {
|
|
230
|
+
type: DataTypes.STRING,
|
|
231
|
+
allowNull: false
|
|
232
|
+
},
|
|
233
|
+
user_role: {
|
|
234
|
+
type: DataTypes.STRING,
|
|
235
|
+
allowNull: false
|
|
236
|
+
},
|
|
237
|
+
salt_text: {
|
|
238
|
+
type: DataTypes.STRING
|
|
239
|
+
// allowNull defaults to true
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
async findIdentityByAccessToken(token, type) {
|
|
245
|
+
let decoded = JsonWebToken.decode(token, {complete: true})
|
|
246
|
+
let identity = await this.findOne({where: {id: parseInt(decoded.payload.user)}});
|
|
247
|
+
if(identity){
|
|
248
|
+
BaseChyz.debug("Find Identity By AccessToken: User Found", decoded.payload)
|
|
249
|
+
try {
|
|
250
|
+
JsonWebToken.verify(token, identity.salt_text);
|
|
251
|
+
BaseChyz.debug("Find Identity By AccessToken: User Verify Success")
|
|
252
|
+
return identity;
|
|
253
|
+
} catch(err) {
|
|
254
|
+
BaseChyz.debug("Find Identity By AccessToken: User Verify Failed")
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
BaseChyz.debug("Find Identity By AccessToken: User Verify Failed")
|
|
259
|
+
return null;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
```
|
|
@@ -28,7 +28,7 @@ class ActionFilter extends Behavior_1.Behavior {
|
|
|
28
28
|
}
|
|
29
29
|
beforeFilter(route, req, res) {
|
|
30
30
|
return __awaiter(this, void 0, void 0, function* () {
|
|
31
|
-
if (!this.isActive(route
|
|
31
|
+
if (!this.isActive(route)) {
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
yield this.beforeAction(route, req, res);
|
|
@@ -53,7 +53,7 @@ class ActionFilter extends Behavior_1.Behavior {
|
|
|
53
53
|
for (const exceptKey in this.except) {
|
|
54
54
|
let pattern = this.except[exceptKey];
|
|
55
55
|
let match = id.match(pattern);
|
|
56
|
-
if (match.length > 0) {
|
|
56
|
+
if (match && match.length > 0) {
|
|
57
57
|
exceptMatch = true;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionFilter.js","sourceRoot":"","sources":["../../base/ActionFilter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAQA,gEAAwC;AACxC,yCAAoC;AAEpC,MAAa,YAAa,SAAQ,mBAAQ;IAA1C;;QAII;;;WAGG;QACI,WAAM,GAAG,EAAE,CAAC;IAmDvB,CAAC;IAhDU,IAAI;IAEX,CAAC;IAEY,YAAY,CAAC,KAAU,EAAE,GAAY,EAAE,GAAa;;YAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE
|
|
1
|
+
{"version":3,"file":"ActionFilter.js","sourceRoot":"","sources":["../../base/ActionFilter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAQA,gEAAwC;AACxC,yCAAoC;AAEpC,MAAa,YAAa,SAAQ,mBAAQ;IAA1C;;QAII;;;WAGG;QACI,WAAM,GAAG,EAAE,CAAC;IAmDvB,CAAC;IAhDU,IAAI;IAEX,CAAC;IAEY,YAAY,CAAC,KAAU,EAAE,GAAY,EAAE,GAAa;;YAC7D,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACvB,OAAO;aACV;YAED,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;QAC5C,CAAC;KAAA;IAES,QAAQ,CAAC,MAAW;QAC1B,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QACnB,IAAI,SAAS,GAAY,KAAK,CAAC;QAC/B,IAAI,WAAW,GAAY,KAAK,CAAC;QACjC,IAAI,eAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC1B,SAAS,GAAG,IAAI,CAAC;SACpB;aAAM;YACH,SAAS,GAAG,KAAK,CAAC;YAClB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE;gBAC7B,IAAI,eAAK,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;oBACtC,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;iBACT;aACJ;SACJ;QAED,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,MAAM,EAAE;YACjC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC7B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC3B,WAAW,GAAG,IAAI,CAAC;aACtB;SACJ;QAED,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC;IACrC,CAAC;IAED;;;;;OAKG;IACU,YAAY,CAAC,KAAU,EAAE,GAAY,EAAE,GAAa;;YAC7D,OAAO,IAAI,CAAC;QAChB,CAAC;KAAA;CACJ;AA3DD,oCA2DC"}
|
package/dist/base/BaseError.js
CHANGED
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.BaseError = void 0;
|
|
10
10
|
class BaseError extends Error {
|
|
11
|
-
constructor(message) {
|
|
11
|
+
constructor(message, statusCode = 500) {
|
|
12
12
|
super(message);
|
|
13
13
|
this.message = message;
|
|
14
14
|
this.name = this.constructor.name; // good practice
|
|
15
|
-
this.statusCode =
|
|
15
|
+
this.statusCode = statusCode; // error code for responding to client
|
|
16
16
|
Error.captureStackTrace(this);
|
|
17
17
|
}
|
|
18
18
|
toString() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseError.js","sourceRoot":"","sources":["../../base/BaseError.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,MAAa,SAAU,SAAQ,KAAK;IAGhC,YAAY,OAAe;
|
|
1
|
+
{"version":3,"file":"BaseError.js","sourceRoot":"","sources":["../../base/BaseError.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,MAAa,SAAU,SAAQ,KAAK;IAGhC,YAAY,OAAe,EAAC,UAAU,GAAC,GAAG;QACtC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,OAAO,GAAC,OAAO,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAA,CAAC,gBAAgB;QAClD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA,CAAC,sCAAsC;QACnE,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,QAAQ;QACJ,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,OAAO,EAAE,CAAA;IAC7D,CAAC;IACD,MAAM;QACF,OAAO,EAAC,IAAI,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAC,CAAA;IAC3E,CAAC;CACJ;AAjBD,8BAiBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataErrorDbException.js","sourceRoot":"","sources":["../../base/DataErrorDbException.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,2CAAsC;AAEtC,MAAa,oBAAqB,SAAQ,qBAAS;IAC/C,YAAqB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"DataErrorDbException.js","sourceRoot":"","sources":["../../base/DataErrorDbException.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,2CAAsC;AAEtC,MAAa,oBAAqB,SAAQ,qBAAS;IAC/C,YAAqB,OAAe;QAChC,KAAK,CAAC,OAAO,EAAC,GAAG,CAAC,CAAC;QADF,YAAO,GAAP,OAAO,CAAQ;IAEpC,CAAC;CACJ;AAJD,oDAIC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DbConnection.js","sourceRoot":"","sources":["../../base/DbConnection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,aAAa;AACb,MAAM,EAAC,SAAS,EAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AACzC,2CAAsC;AACtC,2DAAmC;AAEnC,MAAa,YAAa,SAAQ,qBAAS;
|
|
1
|
+
{"version":3,"file":"DbConnection.js","sourceRoot":"","sources":["../../base/DbConnection.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA;;;;;GAKG;AACH,aAAa;AACb,MAAM,EAAC,SAAS,EAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AACzC,2CAAsC;AACtC,2DAAmC;AAEnC,MAAa,YAAa,SAAQ,qBAAS;IAUjC,IAAI;;YACN,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAC3F,IAAI,CAAC,GAAG,GAAG,SAAS,CAAC;YACrB,SAAS;iBACJ,YAAY,EAAE;iBACd,IAAI,CAAC,GAAG,EAAE;gBACP,kBAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAQ,EAAE,EAAE;gBAChB,kBAAQ,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;YAE9D,CAAC,CAAC,CAAC;YAEP,wBAAwB;QAC5B,CAAC;KAAA;IAGD,IAAI,EAAE;QACF,OAAO,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,IAAI,EAAE,CAAC,KAAU;QACb,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,WAAW;QACd,OAAO,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC;IACjC,CAAC;CAEJ;AAvCD,oCAuCC"}
|
|
@@ -10,7 +10,7 @@ exports.ForbiddenHttpException = void 0;
|
|
|
10
10
|
const BaseError_1 = require("./BaseError");
|
|
11
11
|
class ForbiddenHttpException extends BaseError_1.BaseError {
|
|
12
12
|
constructor(message) {
|
|
13
|
-
super(message);
|
|
13
|
+
super(message, 403);
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
exports.ForbiddenHttpException = ForbiddenHttpException;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ForbiddenHttpException.js","sourceRoot":"","sources":["../../base/ForbiddenHttpException.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,2CAAsC;AACtC,MAAa,sBAAuB,SAAQ,qBAAS;IACjD,YAAc,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"ForbiddenHttpException.js","sourceRoot":"","sources":["../../base/ForbiddenHttpException.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,2CAAsC;AACtC,MAAa,sBAAuB,SAAQ,qBAAS;IACjD,YAAc,OAAe;QACzB,KAAK,CAAC,OAAO,EAAC,GAAG,CAAC,CAAC;IACvB,CAAC;CACJ;AAJD,wDAIC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvalidConfigException.js","sourceRoot":"","sources":["../../base/InvalidConfigException.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,2CAAsC;AAEtC,MAAa,sBAAuB,SAAQ,qBAAS;IACjD,YAAqB,OAAe;QAChC,KAAK,CAAC,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"InvalidConfigException.js","sourceRoot":"","sources":["../../base/InvalidConfigException.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAIH,2CAAsC;AAEtC,MAAa,sBAAuB,SAAQ,qBAAS;IACjD,YAAqB,OAAe;QAChC,KAAK,CAAC,OAAO,EAAC,GAAG,CAAC,CAAC;QADF,YAAO,GAAP,OAAO,CAAQ;IAEpC,CAAC;CACJ;AAJD,wDAIC"}
|
package/dist/base/Model.js
CHANGED
|
@@ -5,17 +5,29 @@
|
|
|
5
5
|
* E-mail: cihan@chy.com.tr
|
|
6
6
|
* Github:https://github.com/cihan53/
|
|
7
7
|
*/
|
|
8
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
9
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
10
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
11
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
12
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
13
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
14
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
15
|
+
});
|
|
16
|
+
};
|
|
8
17
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
18
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
19
|
};
|
|
11
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.Model = exports.DataTypes = void 0;
|
|
21
|
+
exports.Model = exports.NOW = exports.DataTypes = void 0;
|
|
13
22
|
const BaseChyz_1 = __importDefault(require("../BaseChyz"));
|
|
14
23
|
const Utils_1 = __importDefault(require("../requiments/Utils"));
|
|
15
24
|
const Component_1 = require("./Component");
|
|
16
25
|
const InvalidConfigException_1 = require("./InvalidConfigException");
|
|
17
|
-
|
|
18
|
-
|
|
26
|
+
const sequelize_1 = require("sequelize");
|
|
27
|
+
const Exception_1 = require("./db/Exception");
|
|
28
|
+
var sequelize_2 = require("sequelize");
|
|
29
|
+
Object.defineProperty(exports, "DataTypes", { enumerable: true, get: function () { return sequelize_2.DataTypes; } });
|
|
30
|
+
Object.defineProperty(exports, "NOW", { enumerable: true, get: function () { return sequelize_2.NOW; } });
|
|
19
31
|
/**
|
|
20
32
|
* ValidateMe.init({
|
|
21
33
|
bar: {
|
|
@@ -70,22 +82,77 @@ Object.defineProperty(exports, "DataTypes", { enumerable: true, get: function ()
|
|
|
70
82
|
}, { sequelize });
|
|
71
83
|
*/
|
|
72
84
|
class Model extends Component_1.Component {
|
|
73
|
-
constructor() {
|
|
85
|
+
constructor(sequelize) {
|
|
74
86
|
super();
|
|
75
87
|
this._attributes = {};
|
|
88
|
+
this._errors = {};
|
|
76
89
|
this._tableName = this.constructor.name;
|
|
77
|
-
this.
|
|
90
|
+
// this._sequelize = BaseChyz.getComponent("db").db;
|
|
91
|
+
if (sequelize != null)
|
|
92
|
+
this._sequelize = sequelize;
|
|
93
|
+
else
|
|
94
|
+
this._sequelize = BaseChyz_1.default.getComponent("db").db;
|
|
78
95
|
if (!Utils_1.default.isEmpty(this.attributes())) {
|
|
79
|
-
this._model = this.
|
|
96
|
+
this._model = this._sequelize.define(this.constructor.name, this.attributes(), {
|
|
80
97
|
tableName: this.tableName(),
|
|
81
98
|
timestamps: false
|
|
82
99
|
});
|
|
100
|
+
/**
|
|
101
|
+
* init buraya
|
|
102
|
+
*/
|
|
103
|
+
for (const relation of this.relations()) {
|
|
104
|
+
let m = relation.model;
|
|
105
|
+
if (relation.type == "hasOne") {
|
|
106
|
+
// @ts-ignore
|
|
107
|
+
delete relation.model;
|
|
108
|
+
this.model().hasOne(m, relation);
|
|
109
|
+
}
|
|
110
|
+
if (relation.type == "hasMany") {
|
|
111
|
+
// @ts-ignore
|
|
112
|
+
delete relation.model;
|
|
113
|
+
this.model().hasMany(m, relation);
|
|
114
|
+
}
|
|
115
|
+
if (relation.type == "belongsTo") {
|
|
116
|
+
// @ts-ignore
|
|
117
|
+
delete relation.model;
|
|
118
|
+
this.model().belongsTo(m, relation);
|
|
119
|
+
}
|
|
120
|
+
if (relation.type == "belongsToMany") {
|
|
121
|
+
// @ts-ignore
|
|
122
|
+
delete relation.model;
|
|
123
|
+
this.model().belongsToMany(m, relation);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
83
126
|
}
|
|
84
127
|
else {
|
|
85
128
|
throw new InvalidConfigException_1.InvalidConfigException(BaseChyz_1.default.t("Invalid model configuration, is not emty attributes"));
|
|
86
129
|
}
|
|
87
130
|
this.init();
|
|
88
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Returns the database connection used by this AR class.
|
|
134
|
+
* By default, the "db" application component is used as the database connection.
|
|
135
|
+
* You may override this method if you want to use a different database connection.
|
|
136
|
+
* @return Connection the database connection used by this AR class.
|
|
137
|
+
*/
|
|
138
|
+
static getDb() {
|
|
139
|
+
return BaseChyz_1.default.getComponent("db").db;
|
|
140
|
+
}
|
|
141
|
+
get sequelize() {
|
|
142
|
+
return this._sequelize;
|
|
143
|
+
}
|
|
144
|
+
set sequelize(value) {
|
|
145
|
+
this._sequelize = value;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
*
|
|
149
|
+
*/
|
|
150
|
+
get errors() {
|
|
151
|
+
return this._errors;
|
|
152
|
+
}
|
|
153
|
+
set errors(value) {
|
|
154
|
+
this._errors = value;
|
|
155
|
+
}
|
|
89
156
|
init() {
|
|
90
157
|
BaseChyz_1.default.debug("Model init....", this.constructor.name);
|
|
91
158
|
}
|
|
@@ -101,21 +168,101 @@ class Model extends Component_1.Component {
|
|
|
101
168
|
model() {
|
|
102
169
|
return this._model;
|
|
103
170
|
}
|
|
104
|
-
save() {
|
|
105
|
-
|
|
106
|
-
|
|
171
|
+
save(params = {}, options = {}) {
|
|
172
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
173
|
+
// now instantiate an object
|
|
174
|
+
let p = Object.assign(params, this._attributes);
|
|
175
|
+
let result;
|
|
176
|
+
try {
|
|
177
|
+
result = yield this.model().create(p, options);
|
|
178
|
+
}
|
|
179
|
+
catch (e) {
|
|
180
|
+
BaseChyz_1.default.debug(`Model[${this.constructor.name}].create`, e);
|
|
181
|
+
if (e instanceof sequelize_1.ValidationError) {
|
|
182
|
+
let validationErrorItems = e.errors;
|
|
183
|
+
validationErrorItems.forEach(({ message, path }) => {
|
|
184
|
+
// @ts-ignore
|
|
185
|
+
this._errors[path] = message;
|
|
186
|
+
});
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
else if (e instanceof sequelize_1.DatabaseError) {
|
|
190
|
+
}
|
|
191
|
+
else if (e instanceof sequelize_1.TimeoutError) {
|
|
192
|
+
}
|
|
193
|
+
else if (e instanceof sequelize_1.UniqueConstraintError) {
|
|
194
|
+
}
|
|
195
|
+
else if (e instanceof sequelize_1.ForeignKeyConstraintError) {
|
|
196
|
+
}
|
|
197
|
+
else if (e instanceof sequelize_1.ExclusionConstraintError) {
|
|
198
|
+
}
|
|
199
|
+
throw new Exception_1.Exception(e.message, this.errors, e.code);
|
|
200
|
+
}
|
|
201
|
+
return result;
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
bulkCreate(params = {}, options = {}) {
|
|
205
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
206
|
+
// now instantiate an object
|
|
207
|
+
let p = Object.assign(params, this._attributes);
|
|
208
|
+
let result;
|
|
209
|
+
try {
|
|
210
|
+
result = yield this.model().bulkCreate(p, options);
|
|
211
|
+
}
|
|
212
|
+
catch (e) {
|
|
213
|
+
BaseChyz_1.default.debug(`Model[${this.constructor.name}].bulkCreate`, e);
|
|
214
|
+
if (e instanceof sequelize_1.ValidationError) {
|
|
215
|
+
let validationErrorItems = e.errors;
|
|
216
|
+
validationErrorItems.forEach(({ message, path }) => {
|
|
217
|
+
// @ts-ignore
|
|
218
|
+
this._errors[path] = message;
|
|
219
|
+
});
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
else if (e instanceof sequelize_1.DatabaseError) {
|
|
223
|
+
}
|
|
224
|
+
else if (e instanceof sequelize_1.TimeoutError) {
|
|
225
|
+
}
|
|
226
|
+
else if (e instanceof sequelize_1.UniqueConstraintError) {
|
|
227
|
+
}
|
|
228
|
+
else if (e instanceof sequelize_1.ForeignKeyConstraintError) {
|
|
229
|
+
}
|
|
230
|
+
else if (e instanceof sequelize_1.ExclusionConstraintError) {
|
|
231
|
+
}
|
|
232
|
+
throw new Exception_1.Exception(e.message, this.errors, e.code);
|
|
233
|
+
}
|
|
234
|
+
return result;
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
update(params = {}, options = {}) {
|
|
238
|
+
let p = Object.assign(params, this._attributes);
|
|
239
|
+
return this.model().update(p, options);
|
|
107
240
|
}
|
|
108
|
-
|
|
109
|
-
|
|
241
|
+
delete(params = {}, options = {}) {
|
|
242
|
+
let p = Object.assign(params, this._attributes);
|
|
243
|
+
return this.model().delete(p, options);
|
|
110
244
|
}
|
|
245
|
+
/**
|
|
246
|
+
*
|
|
247
|
+
* @param args
|
|
248
|
+
*/
|
|
111
249
|
findOne(...args) {
|
|
112
250
|
return this._model.findOne(...arguments);
|
|
113
251
|
}
|
|
114
|
-
|
|
115
|
-
|
|
252
|
+
/**
|
|
253
|
+
*
|
|
254
|
+
* @param args
|
|
255
|
+
*/
|
|
256
|
+
findAll(...args) {
|
|
257
|
+
return this._model.findAll(...arguments);
|
|
116
258
|
}
|
|
117
259
|
validate() {
|
|
118
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
*
|
|
263
|
+
* @param data
|
|
264
|
+
* @param formName
|
|
265
|
+
*/
|
|
119
266
|
load(data, formName = null) {
|
|
120
267
|
let scope = formName === null ? this.formName() : formName;
|
|
121
268
|
if (scope === '' && !Utils_1.default.isEmpty(data)) {
|
|
@@ -128,6 +275,18 @@ class Model extends Component_1.Component {
|
|
|
128
275
|
}
|
|
129
276
|
return false;
|
|
130
277
|
}
|
|
278
|
+
bulkLoad(data, formName = null) {
|
|
279
|
+
let scope = formName === null ? this.formName() : formName;
|
|
280
|
+
if (scope === '' && !Utils_1.default.isEmpty(data)) {
|
|
281
|
+
this.setAttribute(data);
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
else if (data[scope]) {
|
|
285
|
+
this.setAttribute(data[scope]);
|
|
286
|
+
return true;
|
|
287
|
+
}
|
|
288
|
+
return false;
|
|
289
|
+
}
|
|
131
290
|
setAttribute(values, safeOnly = true) {
|
|
132
291
|
if (values instanceof Object) {
|
|
133
292
|
let attributes = this.attributes();
|
|
@@ -143,6 +302,15 @@ class Model extends Component_1.Component {
|
|
|
143
302
|
attributes() {
|
|
144
303
|
return {};
|
|
145
304
|
}
|
|
305
|
+
/**
|
|
306
|
+
* relation return array
|
|
307
|
+
* [
|
|
308
|
+
*
|
|
309
|
+
* ]
|
|
310
|
+
*/
|
|
311
|
+
relations() {
|
|
312
|
+
return [];
|
|
313
|
+
}
|
|
146
314
|
}
|
|
147
315
|
exports.Model = Model;
|
|
148
316
|
//# sourceMappingURL=Model.js.map
|
package/dist/base/Model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Model.js","sourceRoot":"","sources":["../../base/Model.ts"],"names":[],"mappings":";AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"Model.js","sourceRoot":"","sources":["../../base/Model.ts"],"names":[],"mappings":"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"}
|