chyz 1.0.13-rc.2 → 1.0.13-rc.20
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 +53 -15
- package/Doc/Moel kullanma.md +13 -0
- package/Examples/Controllers/ApiController.ts +35 -26
- package/Examples/Controllers/BasicApiController.ts +121 -0
- package/Examples/Controllers/KeyCloakController.ts +4 -4
- package/Examples/Controllers/SiteController.ts +18 -8
- package/Examples/Models/AuthAssignment.ts +50 -0
- package/Examples/Models/AuthItem.ts +59 -0
- package/Examples/Models/AuthItemChild.ts +49 -0
- package/Examples/Models/Categories.ts +14 -3
- package/Examples/Models/Customer.ts +2 -2
- package/Examples/Models/KeycloakUser.ts +4 -0
- package/Examples/Models/Order.ts +5 -5
- package/Examples/Models/OrderItem.ts +2 -2
- package/Examples/Models/ProductModels.ts +4 -5
- package/Examples/Models/ProductToCategories.ts +15 -4
- package/Examples/Models/Products.ts +9 -8
- package/Examples/Models/Stocks.ts +2 -2
- package/Examples/Models/User.ts +8 -1
- package/Examples/Models/UserPermission.ts +2 -2
- package/Examples/Models/index.ts +19 -0
- package/Examples/index.ts +6 -0
- package/Examples/log/app.log +9456 -0
- package/Examples/log/errors.log +1904 -0
- package/Examples/tsconfig.json +2 -1
- package/README.md +267 -16
- package/base/ActionFilter.ts +1 -1
- package/base/BaseError.ts +3 -1
- package/base/InvalidArgumentException.ts +16 -0
- package/base/Model.ts +69 -51
- package/base/ModelManager.ts +19 -0
- package/base/RestClient.ts +4 -4
- package/base/ValidationHttpException.ts +1 -1
- package/base/index.ts +2 -0
- package/dist/BaseChyz.js +46 -8
- package/dist/BaseChyz.js.map +1 -1
- package/dist/base/ActionFilter.js +1 -1
- package/dist/base/ActionFilter.js.map +1 -1
- package/dist/base/BaseError.js +5 -1
- package/dist/base/BaseError.js.map +1 -1
- package/dist/base/InvalidArgumentException.js +18 -0
- package/dist/base/InvalidArgumentException.js.map +1 -0
- package/dist/base/Model.js +44 -30
- package/dist/base/Model.js.map +1 -1
- package/dist/base/ModelManager.js +9 -0
- package/dist/base/ModelManager.js.map +1 -0
- package/dist/base/RestClient.js +4 -4
- package/dist/base/RestClient.js.map +1 -1
- package/dist/base/ValidationHttpException.js +1 -1
- package/dist/base/index.js +2 -0
- package/dist/base/index.js.map +1 -1
- package/dist/filters/AccessControl.js +15 -3
- package/dist/filters/AccessControl.js.map +1 -1
- package/dist/filters/AccessRule.js +99 -38
- package/dist/filters/AccessRule.js.map +1 -1
- package/dist/filters/auth/HttpBasicAuth.js +65 -0
- package/dist/filters/auth/HttpBasicAuth.js.map +1 -1
- package/dist/filters/auth/JwtHttpBearerAuth.js +1 -1
- package/dist/filters/auth/JwtHttpBearerAuth.js.map +1 -1
- package/dist/filters/auth/index.js +1 -0
- package/dist/filters/auth/index.js.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/package.json +55 -0
- package/dist/rbac/AuthAssignment.js +45 -0
- package/dist/rbac/AuthAssignment.js.map +1 -0
- package/dist/rbac/AuthItem.js +52 -0
- package/dist/rbac/AuthItem.js.map +1 -0
- package/dist/rbac/AuthItemChild.js +44 -0
- package/dist/rbac/AuthItemChild.js.map +1 -0
- package/dist/rbac/AuthManager.js +359 -0
- package/dist/rbac/AuthManager.js.map +1 -0
- package/dist/web/WebUser.js +78 -0
- package/dist/web/WebUser.js.map +1 -1
- package/filters/AccessControl.ts +19 -6
- package/filters/AccessRule.ts +61 -16
- package/filters/auth/HttpBasicAuth.ts +68 -0
- package/filters/auth/JwtHttpBearerAuth.ts +1 -1
- package/filters/auth/index.ts +1 -0
- package/index.ts +2 -2
- package/package-lock.json +5259 -0
- package/package.json +6 -6
- package/rbac/AuthAssignment.ts +50 -0
- package/rbac/AuthItem.ts +57 -0
- package/rbac/AuthItemChild.ts +50 -0
- package/rbac/AuthManager.ts +398 -0
- package/web/IdentityInterface.ts +6 -0
- package/web/WebUser.ts +88 -1
- package/Examples/yarn.lock +0 -2549
package/Examples/tsconfig.json
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
"target": "ES6",
|
|
4
4
|
"experimentalDecorators": true,
|
|
5
5
|
"emitDecoratorMetadata": true,
|
|
6
|
+
// "isolatedModules": true,
|
|
6
7
|
"removeComments": true,
|
|
7
|
-
"esModuleInterop": true,
|
|
8
|
+
// "esModuleInterop": true,
|
|
8
9
|
"allowSyntheticDefaultImports": true,
|
|
9
10
|
"moduleResolution": "node"
|
|
10
11
|
},
|
package/README.md
CHANGED
|
@@ -8,7 +8,6 @@ Klasör Yapısı<br>
|
|
|
8
8
|
*---Controllers <br>
|
|
9
9
|
*---Models<br>
|
|
10
10
|
*---Log<br>
|
|
11
|
-
*---Framework<br>
|
|
12
11
|
index.ts<br>
|
|
13
12
|
|
|
14
13
|
`##Başlangıç<br>
|
|
@@ -17,15 +16,23 @@ yarn start
|
|
|
17
16
|
## index.ts alanlar düzenlenmeli.
|
|
18
17
|
|
|
19
18
|
```typescript
|
|
19
|
+
|
|
20
|
+
import {BaseChyz} from "../index";
|
|
21
|
+
|
|
20
22
|
require('dotenv-flow').config();
|
|
23
|
+
import Chyz ,{ DbConnection, BaseChyz} from "chyz/dist/";
|
|
24
|
+
import {AuthManager} from "chyz/dist/rbac/AuthManager"
|
|
25
|
+
import {WebUser} from "chyz/dist/web/WebUser";
|
|
26
|
+
import {User as Identity} from "./Models/User";
|
|
21
27
|
|
|
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
28
|
|
|
27
29
|
let config = {
|
|
30
|
+
port: process.env.PORT || 8870,
|
|
31
|
+
controllerpath: "Examples\\Controllers",
|
|
28
32
|
components: {
|
|
33
|
+
authManager: {
|
|
34
|
+
class: AuthManager,
|
|
35
|
+
},
|
|
29
36
|
db: {
|
|
30
37
|
class: DbConnection,
|
|
31
38
|
database: process.env.DBDATABASE,
|
|
@@ -35,7 +42,7 @@ let config = {
|
|
|
35
42
|
host: process.env.DBHOST,
|
|
36
43
|
dialect: 'postgres', /* one of 'mysql' | 'mariadb' | 'postgres' | 'mssql' */
|
|
37
44
|
// disable logging; default: console.log
|
|
38
|
-
logging:
|
|
45
|
+
logging: (msg: any) => BaseChyz.debug(msg)
|
|
39
46
|
}
|
|
40
47
|
},
|
|
41
48
|
user: {
|
|
@@ -43,14 +50,168 @@ let config = {
|
|
|
43
50
|
'identityClass': User
|
|
44
51
|
}
|
|
45
52
|
}
|
|
53
|
+
|
|
46
54
|
}
|
|
47
55
|
Chyz.app(config).Start();
|
|
48
56
|
```
|
|
49
57
|
|
|
58
|
+
##Controller
|
|
59
|
+
Basit şekilde kontroller oluşturulabilir.
|
|
60
|
+
```typescript
|
|
61
|
+
/*
|
|
62
|
+
*
|
|
63
|
+
* Copyright (c) 2021-2021.. Chy Bilgisayar Bilisim
|
|
64
|
+
* Author: Cihan Ozturk
|
|
65
|
+
* E-mail: cihan@chy.com.tr
|
|
66
|
+
* Github:https://github.com/cihan53/
|
|
67
|
+
*
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
import {AccessControl, BaseChyz, JwtHttpBearerAuth, ModelManager, Request, Response,} from "chyz/dist";
|
|
71
|
+
import {ForbiddenHttpException, Model, NotFoundHttpException, ValidationHttpException} from "chyz/dist/base";
|
|
72
|
+
|
|
73
|
+
import Utils from 'chyz/dist/requiments/Utils';
|
|
74
|
+
import {controller, get, post} from "chyz/dist/decorator";
|
|
75
|
+
import {Controller} from "chyz/dist/base/Controller";
|
|
76
|
+
import * as Util from "util";
|
|
77
|
+
import {uid} from "uid";
|
|
78
|
+
|
|
79
|
+
import {User} from "../Models/User";
|
|
80
|
+
import {AuthManager} from "../Lib/AuthManager";
|
|
81
|
+
import {CategoriesClass} from "../Models/Categories";
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
const keygen = require('ssh-keygen');
|
|
85
|
+
const os = require('os');
|
|
86
|
+
const bcrypt = require('bcrypt');
|
|
87
|
+
const JsonWebToken = require("jsonwebtoken");
|
|
88
|
+
const {Op} = require("sequelize");
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@controller("/api")
|
|
92
|
+
class ApiController extends Controller {
|
|
93
|
+
|
|
94
|
+
public myCheck(token) {
|
|
95
|
+
console.log("myyyyyyyyyyyyyyyyyyyyy")
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public behaviors(): any[] {
|
|
99
|
+
|
|
100
|
+
return [{
|
|
101
|
+
'authenticator': {
|
|
102
|
+
"class": JwtHttpBearerAuth,
|
|
103
|
+
// "auth": this.myCheck
|
|
104
|
+
},
|
|
105
|
+
'access': {
|
|
106
|
+
'class': AccessControl,
|
|
107
|
+
'only': ['order/list' ],
|
|
108
|
+
'rules': [
|
|
109
|
+
|
|
110
|
+
{
|
|
111
|
+
'allow': true,
|
|
112
|
+
'actions': ['order/list' ],
|
|
113
|
+
'roles': ['editor'],
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
}
|
|
117
|
+
}]
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
@get("/")
|
|
121
|
+
Index(req: Request, res: Response) {
|
|
122
|
+
|
|
123
|
+
BaseChyz.logs().info("Site Controller Burası", this.id)
|
|
124
|
+
return res.json({message: "index sayfası"})
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
@post("orderCreate")
|
|
128
|
+
async Login(req: Request, res: Response) {
|
|
129
|
+
let data = req.body;
|
|
130
|
+
data.Customer.status = "true";
|
|
131
|
+
|
|
132
|
+
//Customer Model Create
|
|
133
|
+
let customer = ModelManager.Customer.save();
|
|
134
|
+
//Order Model Create
|
|
135
|
+
let order = ModelManager.Order;
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
let transaction
|
|
139
|
+
try {
|
|
140
|
+
// get transaction
|
|
141
|
+
transaction = await BaseChyz.getComponent("db").transaction();
|
|
142
|
+
customer.load(data, "Customer");//load customer data
|
|
143
|
+
let cus: any = await customer.save({}, {transaction});
|
|
144
|
+
|
|
145
|
+
if (!cus) {
|
|
146
|
+
throw new ValidationHttpException(customer.errors);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
data.Order.customer_id = cus.id;
|
|
150
|
+
|
|
151
|
+
order.load(data, "Order");
|
|
152
|
+
let res1 = await order.save({}, {transaction});
|
|
153
|
+
if (!res1) {
|
|
154
|
+
throw new ValidationHttpException(order.errors);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// commit
|
|
158
|
+
await transaction.commit();
|
|
159
|
+
|
|
160
|
+
} catch (e) {
|
|
161
|
+
if (transaction) {
|
|
162
|
+
await transaction.rollback();
|
|
163
|
+
BaseChyz.warn("Rollback transaction")
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (e instanceof ValidationHttpException)
|
|
167
|
+
throw new ValidationHttpException(e.message)
|
|
168
|
+
else
|
|
169
|
+
throw new ForbiddenHttpException(e.message)
|
|
170
|
+
}
|
|
171
|
+
return res.send("Post Controller")
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
@get("order/list")
|
|
176
|
+
async listOrder(req: Request, res: Response) {
|
|
177
|
+
const {Products}: { Products: ProductsClass } = ModelManager;
|
|
178
|
+
let product = await Products.findAll( );
|
|
179
|
+
return res.json(product)
|
|
180
|
+
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@get("categories")
|
|
184
|
+
async Categories(req: Request, res: Response) {
|
|
185
|
+
let product = await ModelManager.Categories.findAll({
|
|
186
|
+
include: [
|
|
187
|
+
{
|
|
188
|
+
model: ModelManager.Products.model(),
|
|
189
|
+
}
|
|
190
|
+
]
|
|
191
|
+
});
|
|
192
|
+
return res.json(product)
|
|
193
|
+
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
error(req: Request, res: Response) {
|
|
197
|
+
BaseChyz.logs().info("Error Sayfası")
|
|
198
|
+
return res.send("Post Controller")
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
module.exports = ApiController
|
|
203
|
+
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
|
|
50
207
|
## Create Model
|
|
51
208
|
|
|
52
209
|
Veritabanı işlemleri için model oluşturma, sequelize desteklidir.
|
|
53
210
|
|
|
211
|
+
Model adı "**Class**" şeklinde bitmeli.
|
|
212
|
+
|
|
213
|
+
Örnek = "ModelName**Class**"
|
|
214
|
+
|
|
54
215
|
```typescript
|
|
55
216
|
import {Model, DataTypes} from "chyz/base/Model";
|
|
56
217
|
|
|
@@ -86,11 +247,11 @@ export class CustomerCLass extends Model {
|
|
|
86
247
|
}
|
|
87
248
|
|
|
88
249
|
}
|
|
89
|
-
|
|
90
|
-
export { Customer };
|
|
250
|
+
|
|
91
251
|
|
|
92
252
|
```
|
|
93
253
|
````typescript
|
|
254
|
+
|
|
94
255
|
export class ProductsClass extends Model {
|
|
95
256
|
[x: string]: any;
|
|
96
257
|
|
|
@@ -129,8 +290,49 @@ export class ProductsClass extends Model {
|
|
|
129
290
|
}
|
|
130
291
|
}
|
|
131
292
|
|
|
132
|
-
|
|
133
|
-
|
|
293
|
+
/**
|
|
294
|
+
*
|
|
295
|
+
*/
|
|
296
|
+
export class CategoriesClass extends Model {
|
|
297
|
+
[x: string]: any;
|
|
298
|
+
|
|
299
|
+
alias() {
|
|
300
|
+
return "c"
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
tableName() {
|
|
304
|
+
return 'categories';
|
|
305
|
+
}
|
|
306
|
+
attributes() {
|
|
307
|
+
return {
|
|
308
|
+
// Model attributes are defined here
|
|
309
|
+
title: {
|
|
310
|
+
type: DataTypes.STRING,
|
|
311
|
+
allowNull: false
|
|
312
|
+
},
|
|
313
|
+
properties: {
|
|
314
|
+
type: DataTypes.STRING,
|
|
315
|
+
allowNull: false
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
relations(): Relation[] {
|
|
321
|
+
return [
|
|
322
|
+
{
|
|
323
|
+
type: "belongsToMany",
|
|
324
|
+
foreignKey: "category_id",
|
|
325
|
+
sourceKey: "id",
|
|
326
|
+
as: 'product',
|
|
327
|
+
model: ModelManager.Products.model(),
|
|
328
|
+
through: ModelManager.ProductToCategories.model()
|
|
329
|
+
}
|
|
330
|
+
]
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
|
|
134
336
|
````
|
|
135
337
|
|
|
136
338
|
## Http POST ve GET verilerini model'e yükleme
|
|
@@ -148,9 +350,11 @@ export {Products}
|
|
|
148
350
|
* }
|
|
149
351
|
* @type {Customer}
|
|
150
352
|
*/
|
|
353
|
+
import { ModelManager} from "chyz/dist";
|
|
151
354
|
import {Customer} from "./Customer";
|
|
355
|
+
|
|
152
356
|
//Customer Model Create
|
|
153
|
-
let customer: Customer = Customer;
|
|
357
|
+
let customer: Customer = ModelManager.Customer;
|
|
154
358
|
customer.load(req.body, "Customer");//load customer data
|
|
155
359
|
let cus: any = await customer.save();
|
|
156
360
|
|
|
@@ -166,7 +370,7 @@ Transaction oluşturma
|
|
|
166
370
|
// get transaction
|
|
167
371
|
transaction = await BaseChyz.getComponent("db").transaction();
|
|
168
372
|
//Customer Model Create
|
|
169
|
-
let customer: Customer =
|
|
373
|
+
let customer: Customer = ModelManager.Customer;
|
|
170
374
|
customer.load(data, "Customer");//load customer data
|
|
171
375
|
let cus: any = await customer.save({}, {transaction});
|
|
172
376
|
if (!cus) {
|
|
@@ -175,9 +379,9 @@ Transaction oluşturma
|
|
|
175
379
|
} catch (e) {
|
|
176
380
|
if (transaction) {
|
|
177
381
|
await transaction.rollback();
|
|
178
|
-
BaseChyz.warn("Rollback transaction")
|
|
382
|
+
BaseChyz.warn("Rollback transaction");
|
|
179
383
|
}
|
|
180
|
-
|
|
384
|
+
|
|
181
385
|
}
|
|
182
386
|
```
|
|
183
387
|
|
|
@@ -219,6 +423,44 @@ export class User extends Model implements IdentityInterface {
|
|
|
219
423
|
throw new Error("Method not implemented.");
|
|
220
424
|
}
|
|
221
425
|
|
|
426
|
+
/**
|
|
427
|
+
* Returns auth manager associated with the user component.
|
|
428
|
+
*
|
|
429
|
+
* By default this is the `authManager` application component.
|
|
430
|
+
* You may override this method to return a different auth manager instance if needed.
|
|
431
|
+
*/
|
|
432
|
+
protected getAuthManager() {
|
|
433
|
+
return BaseChyz.getComponent("authManager");
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Returns the access checker used for checking access.
|
|
438
|
+
* @return CheckAccessInterface
|
|
439
|
+
*/
|
|
440
|
+
protected getAccessChecker() {
|
|
441
|
+
return this.accessChecker !== null ? this.accessChecker : this.getAuthManager();
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
*
|
|
446
|
+
* @param permissionName
|
|
447
|
+
* @param params
|
|
448
|
+
* @param allowCaching
|
|
449
|
+
*/
|
|
450
|
+
public async can(permissionName, params: any[] = [], allowCaching: boolean = true) {
|
|
451
|
+
let accessChecker;
|
|
452
|
+
if ((accessChecker = this.getAccessChecker()) === null) {
|
|
453
|
+
return false;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
let access = await accessChecker.checkAccess(this.getId(), permissionName, params);
|
|
457
|
+
this._access[permissionName] = access;
|
|
458
|
+
if (allowCaching && Utils.isEmpty(params)) {
|
|
459
|
+
|
|
460
|
+
}
|
|
461
|
+
return access;
|
|
462
|
+
}
|
|
463
|
+
|
|
222
464
|
public attributes() {
|
|
223
465
|
return {
|
|
224
466
|
// Model attributes are defined here
|
|
@@ -242,16 +484,25 @@ export class User extends Model implements IdentityInterface {
|
|
|
242
484
|
}
|
|
243
485
|
|
|
244
486
|
async findIdentityByAccessToken(token, type) {
|
|
487
|
+
|
|
488
|
+
|
|
245
489
|
let decoded = JsonWebToken.decode(token, {complete: true})
|
|
490
|
+
if (!decoded.payload.user) {
|
|
491
|
+
return null;
|
|
492
|
+
}
|
|
246
493
|
let identity = await this.findOne({where: {id: parseInt(decoded.payload.user)}});
|
|
247
494
|
if(identity){
|
|
248
495
|
BaseChyz.debug("Find Identity By AccessToken: User Found", decoded.payload)
|
|
249
496
|
try {
|
|
250
497
|
JsonWebToken.verify(token, identity.salt_text);
|
|
498
|
+
this.setIdentity(identity);
|
|
251
499
|
BaseChyz.debug("Find Identity By AccessToken: User Verify Success")
|
|
252
|
-
return
|
|
500
|
+
return this;
|
|
253
501
|
} catch(err) {
|
|
254
|
-
|
|
502
|
+
if (err.name == "TokenExpiredError")
|
|
503
|
+
BaseChyz.debug("Find Identity By AccessToken: Token Expired")
|
|
504
|
+
else
|
|
505
|
+
BaseChyz.debug("Find Identity By AccessToken: User Verify Failed")
|
|
255
506
|
return null;
|
|
256
507
|
}
|
|
257
508
|
}
|
package/base/ActionFilter.ts
CHANGED
package/base/BaseError.ts
CHANGED
|
@@ -5,12 +5,14 @@
|
|
|
5
5
|
* Github:https://github.com/cihan53/
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import Utils from "../requiments/Utils";
|
|
9
|
+
|
|
8
10
|
export class BaseError extends Error {
|
|
9
11
|
private statusCode: number;
|
|
10
12
|
|
|
11
13
|
constructor(message: string,statusCode=500) {
|
|
12
14
|
super(message);
|
|
13
|
-
this.message=message;
|
|
15
|
+
this.message= Utils.isString(message)?message: JSON.stringify(message);
|
|
14
16
|
this.name = this.constructor.name // good practice
|
|
15
17
|
this.statusCode = statusCode // error code for responding to client
|
|
16
18
|
Error.captureStackTrace(this)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021. Chy Bilgisayar Bilisim
|
|
3
|
+
* Author: Cihan Ozturk
|
|
4
|
+
* E-mail: cihan@chy.com.tr
|
|
5
|
+
* Github:https://github.com/cihan53/
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
import {BaseError} from "./BaseError";
|
|
11
|
+
|
|
12
|
+
export class InvalidArgumentException extends BaseError {
|
|
13
|
+
constructor ( public message: string) {
|
|
14
|
+
super(message,500);
|
|
15
|
+
}
|
|
16
|
+
}
|
package/base/Model.ts
CHANGED
|
@@ -14,15 +14,15 @@ import {Exception} from "./db/Exception";
|
|
|
14
14
|
|
|
15
15
|
export {DataTypes, NOW} from "sequelize";
|
|
16
16
|
|
|
17
|
-
export interface Relation{
|
|
18
|
-
type:
|
|
19
|
-
allowNull?:boolean,
|
|
20
|
-
sourceKey
|
|
21
|
-
model:SModel,
|
|
22
|
-
foreignKey:string,
|
|
23
|
-
name?:string,
|
|
24
|
-
through?:
|
|
25
|
-
as?:string
|
|
17
|
+
export interface Relation {
|
|
18
|
+
type: "hasOne" | "hasMany" | "belongsToMany" | "belongsTo",
|
|
19
|
+
allowNull?: boolean,
|
|
20
|
+
sourceKey?: string,
|
|
21
|
+
model: SModel,
|
|
22
|
+
foreignKey: string,
|
|
23
|
+
name?: string,
|
|
24
|
+
through?: any,
|
|
25
|
+
as?: string
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
/**
|
|
@@ -80,7 +80,8 @@ export interface Relation{
|
|
|
80
80
|
*/
|
|
81
81
|
|
|
82
82
|
export class Model extends Component {
|
|
83
|
-
_sequelize: any
|
|
83
|
+
_sequelize: any;
|
|
84
|
+
_register: any;
|
|
84
85
|
private _tableName: string;
|
|
85
86
|
private _model: any;
|
|
86
87
|
private _attributes: any = {};
|
|
@@ -89,7 +90,7 @@ export class Model extends Component {
|
|
|
89
90
|
|
|
90
91
|
constructor(sequelize?: IDBDatabase) {
|
|
91
92
|
super();
|
|
92
|
-
this._tableName = this.
|
|
93
|
+
this._tableName = this.alias();
|
|
93
94
|
// this._sequelize = BaseChyz.getComponent("db").db;
|
|
94
95
|
if (sequelize != null)
|
|
95
96
|
this._sequelize = sequelize;
|
|
@@ -97,50 +98,19 @@ export class Model extends Component {
|
|
|
97
98
|
this._sequelize = BaseChyz.getComponent("db").db;
|
|
98
99
|
|
|
99
100
|
if (!Utils.isEmpty(this.attributes())) {
|
|
100
|
-
|
|
101
|
+
|
|
102
|
+
this._model = this._sequelize.define(this._tableName, this.attributes(), {
|
|
101
103
|
tableName: this.tableName(),
|
|
102
|
-
timestamps: false
|
|
104
|
+
timestamps: false,
|
|
105
|
+
createdAt: false,
|
|
106
|
+
updateAt: false
|
|
103
107
|
});
|
|
104
108
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* init buraya
|
|
109
|
-
*/
|
|
110
|
-
|
|
111
|
-
for (const relation of this.relations()) {
|
|
112
|
-
let m = relation.model;
|
|
113
|
-
|
|
114
|
-
if(relation.type=="hasOne" ){
|
|
115
|
-
// @ts-ignore
|
|
116
|
-
delete relation.model
|
|
117
|
-
this.model().hasOne(m, relation );
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if(relation.type=="hasMany" ){
|
|
121
|
-
// @ts-ignore
|
|
122
|
-
delete relation.model;
|
|
123
|
-
this.model().hasMany(m, relation );
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
if(relation.type=="belongsTo" ){
|
|
127
|
-
// @ts-ignore
|
|
128
|
-
delete relation.model;
|
|
129
|
-
this.model().belongsTo(m, relation );
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
if(relation.type=="belongsToMany" ){
|
|
133
|
-
// @ts-ignore
|
|
134
|
-
delete relation.model;
|
|
135
|
-
this.model().belongsToMany(m, relation );
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
109
|
} else {
|
|
140
110
|
throw new InvalidConfigException(BaseChyz.t("Invalid model configuration, is not emty attributes"))
|
|
141
111
|
}
|
|
142
112
|
|
|
143
|
-
this.init();
|
|
113
|
+
// this.init();
|
|
144
114
|
|
|
145
115
|
}
|
|
146
116
|
|
|
@@ -151,8 +121,7 @@ export class Model extends Component {
|
|
|
151
121
|
* You may override this method if you want to use a different database connection.
|
|
152
122
|
* @return Connection the database connection used by this AR class.
|
|
153
123
|
*/
|
|
154
|
-
public static getDb()
|
|
155
|
-
{
|
|
124
|
+
public static getDb() {
|
|
156
125
|
return BaseChyz.getComponent("db").db
|
|
157
126
|
}
|
|
158
127
|
|
|
@@ -178,9 +147,45 @@ export class Model extends Component {
|
|
|
178
147
|
|
|
179
148
|
public init() {
|
|
180
149
|
BaseChyz.debug("Model init....", this.constructor.name)
|
|
150
|
+
/**
|
|
151
|
+
* init buraya
|
|
152
|
+
*/
|
|
153
|
+
BaseChyz.debug("Relation init....", this.constructor.name)
|
|
154
|
+
for (const relation of this.relations()) {
|
|
155
|
+
let m = relation.model;
|
|
156
|
+
|
|
157
|
+
if (relation.type == "hasOne") {
|
|
158
|
+
// @ts-ignore
|
|
159
|
+
delete relation.model
|
|
160
|
+
this.model().hasOne(m, relation);
|
|
161
|
+
}
|
|
162
|
+
//
|
|
163
|
+
if (relation.type == "hasMany") {
|
|
164
|
+
// @ts-ignore
|
|
165
|
+
delete relation.model;
|
|
166
|
+
this.model().hasMany(m, relation);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
if (relation.type == "belongsTo") {
|
|
170
|
+
// @ts-ignore
|
|
171
|
+
delete relation.model;
|
|
172
|
+
this.model().belongsTo(m, relation);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (relation.type == "belongsToMany") {
|
|
176
|
+
// @ts-ignore
|
|
177
|
+
delete relation.model;
|
|
178
|
+
this.model().belongsToMany(m, relation);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
181
182
|
}
|
|
182
183
|
|
|
183
184
|
|
|
185
|
+
public alias() {
|
|
186
|
+
return this.constructor.name;
|
|
187
|
+
}
|
|
188
|
+
|
|
184
189
|
public tableName() {
|
|
185
190
|
return this._tableName;
|
|
186
191
|
}
|
|
@@ -291,6 +296,15 @@ export class Model extends Component {
|
|
|
291
296
|
return this._model.findAll(...arguments)
|
|
292
297
|
}
|
|
293
298
|
|
|
299
|
+
/**
|
|
300
|
+
* return {count : number , rows: any}
|
|
301
|
+
* @param args
|
|
302
|
+
*/
|
|
303
|
+
public findAndCountAll(...args: any[]) {
|
|
304
|
+
return this._model.findAndCountAll(...arguments)
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
|
|
294
308
|
|
|
295
309
|
public validate() {
|
|
296
310
|
|
|
@@ -348,7 +362,11 @@ export class Model extends Component {
|
|
|
348
362
|
*
|
|
349
363
|
* ]
|
|
350
364
|
*/
|
|
351
|
-
public relations():Relation[]{
|
|
365
|
+
public relations(): Relation[] {
|
|
352
366
|
return []
|
|
353
367
|
}
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
|
|
354
372
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {Model} from "./Model"
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2021.. Chy Bilgisayar Bilisim
|
|
6
|
+
* Author: Cihan Ozturk
|
|
7
|
+
* E-mail: cihan@chy.com.tr
|
|
8
|
+
* Github:https://github.com/cihan53/
|
|
9
|
+
*
|
|
10
|
+
*/
|
|
11
|
+
interface ObjectConstructor {
|
|
12
|
+
_register(o: Model): void;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const ModelManager: any = {
|
|
16
|
+
_register(map: Model) {
|
|
17
|
+
Object.assign(this, map)
|
|
18
|
+
}
|
|
19
|
+
}
|
package/base/RestClient.ts
CHANGED
|
@@ -13,12 +13,12 @@ import {Component} from "./Component";
|
|
|
13
13
|
const axios = require('axios')
|
|
14
14
|
|
|
15
15
|
export class RestClient extends Component {
|
|
16
|
-
public post(url: string, args: any[]) {
|
|
17
|
-
return axios.post(url, args)
|
|
16
|
+
public post(url: string, args: any[],headers:any={}) {
|
|
17
|
+
return axios.post(url, args,headers)
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
public get(url: string, args: any[]) {
|
|
21
|
-
return axios.post(url, args)
|
|
20
|
+
public get(url: string, args: any[],headers:any={}) {
|
|
21
|
+
return axios.post(url, args ,headers )
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
public Rest(params: any) {
|
package/base/index.ts
CHANGED
|
@@ -8,9 +8,11 @@ export * from "./Controller"
|
|
|
8
8
|
export * from "./DbConnection"
|
|
9
9
|
export * from "./ForbiddenHttpException"
|
|
10
10
|
export * from "./InvalidConfigException"
|
|
11
|
+
export * from "./InvalidArgumentException"
|
|
11
12
|
export * from "./NotFoundHttpException"
|
|
12
13
|
export * from "./UnauthorizedHttpException"
|
|
13
14
|
export * from "./DataErrorDbException"
|
|
14
15
|
export * from "./ValidationHttpException"
|
|
15
16
|
export * from "./Model"
|
|
16
17
|
export * from "./RestClient"
|
|
18
|
+
export * from "./ModelManager"
|