@reldens/storage 0.88.0 → 0.89.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.
- package/.claude/driver-methods-complete-analysis.md +1978 -0
- package/.claude/test-architecture.md +973 -0
- package/CLAUDE.md +121 -1
- package/bin/reldens-storage.js +1 -1
- package/lib/base-driver.js +8 -0
- package/lib/entities-generator.js +1 -3
- package/lib/entity-templates/mikro-orm-model.template +2 -1
- package/lib/generators/models-generation.js +126 -5
- package/lib/mikro-orm/mikro-orm-data-server.js +24 -10
- package/lib/mikro-orm/mikro-orm-driver.js +184 -116
- package/lib/objection-js/objection-js-driver.js +111 -19
- package/lib/prisma/prisma-data-server.js +3 -2
- package/lib/prisma/prisma-driver.js +12 -10
- package/lib/prisma/prisma-filter-processor.js +193 -146
- package/lib/prisma/prisma-metadata-loader.js +0 -4
- package/lib/prisma/prisma-relation-resolver.js +292 -267
- package/lib/prisma/prisma-type-caster.js +280 -260
- package/package.json +15 -6
- package/tests/.env.test.example +7 -0
- package/tests/fixtures/categories-fixtures.js +164 -0
- package/tests/fixtures/expected-entities-mikro-orm/entities/test-categories-entity.js +70 -0
- package/tests/fixtures/expected-entities-mikro-orm/entities/test-products-entity.js +95 -0
- package/tests/fixtures/expected-entities-mikro-orm/entities/test-reviews-entity.js +84 -0
- package/tests/fixtures/expected-entities-mikro-orm/entities-config.js +17 -0
- package/tests/fixtures/expected-entities-mikro-orm/entities-translations.js +13 -0
- package/tests/fixtures/expected-entities-mikro-orm/models/mikro-orm/registered-models-mikro-orm.js +23 -0
- package/tests/fixtures/expected-entities-mikro-orm/models/mikro-orm/test-categories-model.js +57 -0
- package/tests/fixtures/expected-entities-mikro-orm/models/mikro-orm/test-products-model.js +79 -0
- package/tests/fixtures/expected-entities-mikro-orm/models/mikro-orm/test-reviews-model.js +70 -0
- package/tests/fixtures/expected-entities-objection-js/entities/test-categories-entity.js +70 -0
- package/tests/fixtures/expected-entities-objection-js/entities/test-products-entity.js +95 -0
- package/tests/fixtures/expected-entities-objection-js/entities/test-reviews-entity.js +84 -0
- package/tests/fixtures/expected-entities-objection-js/entities-config.js +17 -0
- package/tests/fixtures/expected-entities-objection-js/entities-translations.js +13 -0
- package/tests/fixtures/expected-entities-objection-js/models/objection-js/registered-models-objection-js.js +23 -0
- package/tests/fixtures/expected-entities-objection-js/models/objection-js/test-categories-model.js +33 -0
- package/tests/fixtures/expected-entities-objection-js/models/objection-js/test-products-model.js +42 -0
- package/tests/fixtures/expected-entities-objection-js/models/objection-js/test-reviews-model.js +33 -0
- package/tests/fixtures/expected-entities-prisma/entities/test-categories-entity.js +70 -0
- package/tests/fixtures/expected-entities-prisma/entities/test-products-entity.js +95 -0
- package/tests/fixtures/expected-entities-prisma/entities/test-reviews-entity.js +84 -0
- package/tests/fixtures/expected-entities-prisma/entities-config.js +17 -0
- package/tests/fixtures/expected-entities-prisma/entities-translations.js +13 -0
- package/tests/fixtures/expected-entities-prisma/models/prisma/registered-models-prisma.js +23 -0
- package/tests/fixtures/expected-entities-prisma/models/prisma/test-categories-model.js +43 -0
- package/tests/fixtures/expected-entities-prisma/models/prisma/test-products-model.js +50 -0
- package/tests/fixtures/expected-entities-prisma/models/prisma/test-reviews-model.js +46 -0
- package/tests/fixtures/products-fixtures.js +119 -0
- package/tests/fixtures/reviews-fixtures.js +42 -0
- package/tests/fixtures/sql/test-schema.sql +59 -0
- package/tests/integration/test-drivers.js +257 -0
- package/tests/integration/test-nested-filters.js +408 -0
- package/tests/integration/test-relations.js +349 -0
- package/tests/run-tests.js +213 -0
- package/tests/unit/test-drivers.js +89 -0
- package/tests/unit/test-entities-generator.js +533 -0
- package/tests/unit/test-entity-manager.js +128 -0
- package/tests/unit/test-type-mapper.js +232 -0
- package/tests/utils/custom-reporter.js +73 -0
- package/tests/utils/driver-registry.js +144 -0
- package/tests/utils/prisma-subprocess-worker.js +150 -0
- package/tests/utils/test-helpers.js +726 -0
- package/tests/utils/test-runner.js +63 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - TestCategoriesEntity
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { EntityProperties } = require('../../index');
|
|
8
|
+
const { sc } = require('@reldens/utils');
|
|
9
|
+
|
|
10
|
+
class TestCategoriesEntity extends EntityProperties
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
static propertiesConfig(extraProps)
|
|
14
|
+
{
|
|
15
|
+
let titleProperty = 'name';
|
|
16
|
+
let properties = {
|
|
17
|
+
id: {
|
|
18
|
+
isId: true,
|
|
19
|
+
type: 'number',
|
|
20
|
+
isRequired: true,
|
|
21
|
+
dbType: 'int'
|
|
22
|
+
},
|
|
23
|
+
[titleProperty]: {
|
|
24
|
+
isRequired: true,
|
|
25
|
+
dbType: 'varchar'
|
|
26
|
+
},
|
|
27
|
+
slug: {
|
|
28
|
+
isRequired: true,
|
|
29
|
+
dbType: 'varchar'
|
|
30
|
+
},
|
|
31
|
+
description: {
|
|
32
|
+
type: 'textarea',
|
|
33
|
+
dbType: 'text'
|
|
34
|
+
},
|
|
35
|
+
is_active: {
|
|
36
|
+
type: 'boolean',
|
|
37
|
+
dbType: 'tinyint'
|
|
38
|
+
},
|
|
39
|
+
display_order: {
|
|
40
|
+
type: 'number',
|
|
41
|
+
dbType: 'int'
|
|
42
|
+
},
|
|
43
|
+
created_at: {
|
|
44
|
+
type: 'datetime',
|
|
45
|
+
dbType: 'timestamp'
|
|
46
|
+
},
|
|
47
|
+
updated_at: {
|
|
48
|
+
type: 'datetime',
|
|
49
|
+
dbType: 'timestamp'
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
let propertiesKeys = Object.keys(properties);
|
|
53
|
+
let showProperties = propertiesKeys;
|
|
54
|
+
let editProperties = sc.removeFromArray([...propertiesKeys], ['id', 'created_at', 'updated_at']);
|
|
55
|
+
let listProperties = [...propertiesKeys];
|
|
56
|
+
listProperties.splice(listProperties.indexOf('description'), 1);
|
|
57
|
+
return {
|
|
58
|
+
showProperties,
|
|
59
|
+
editProperties,
|
|
60
|
+
listProperties,
|
|
61
|
+
filterProperties: listProperties,
|
|
62
|
+
properties,
|
|
63
|
+
titleProperty,
|
|
64
|
+
...extraProps
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
module.exports.TestCategoriesEntity = TestCategoriesEntity;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - TestProductsEntity
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { EntityProperties } = require('../../index');
|
|
8
|
+
const { sc } = require('@reldens/utils');
|
|
9
|
+
|
|
10
|
+
class TestProductsEntity extends EntityProperties
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
static propertiesConfig(extraProps)
|
|
14
|
+
{
|
|
15
|
+
let titleProperty = 'name';
|
|
16
|
+
let properties = {
|
|
17
|
+
id: {
|
|
18
|
+
isId: true,
|
|
19
|
+
type: 'number',
|
|
20
|
+
isRequired: true,
|
|
21
|
+
dbType: 'int'
|
|
22
|
+
},
|
|
23
|
+
category_id: {
|
|
24
|
+
type: 'reference',
|
|
25
|
+
reference: 'test_categories',
|
|
26
|
+
isRequired: true,
|
|
27
|
+
dbType: 'int'
|
|
28
|
+
},
|
|
29
|
+
[titleProperty]: {
|
|
30
|
+
isRequired: true,
|
|
31
|
+
dbType: 'varchar'
|
|
32
|
+
},
|
|
33
|
+
sku: {
|
|
34
|
+
isRequired: true,
|
|
35
|
+
dbType: 'varchar'
|
|
36
|
+
},
|
|
37
|
+
description: {
|
|
38
|
+
type: 'textarea',
|
|
39
|
+
dbType: 'text'
|
|
40
|
+
},
|
|
41
|
+
price: {
|
|
42
|
+
type: 'number',
|
|
43
|
+
isRequired: true,
|
|
44
|
+
dbType: 'decimal'
|
|
45
|
+
},
|
|
46
|
+
stock_quantity: {
|
|
47
|
+
type: 'number',
|
|
48
|
+
dbType: 'int'
|
|
49
|
+
},
|
|
50
|
+
is_featured: {
|
|
51
|
+
type: 'boolean',
|
|
52
|
+
dbType: 'tinyint'
|
|
53
|
+
},
|
|
54
|
+
metadata: {
|
|
55
|
+
type: 'textarea',
|
|
56
|
+
dbType: 'json'
|
|
57
|
+
},
|
|
58
|
+
tags: {
|
|
59
|
+
dbType: 'varchar'
|
|
60
|
+
},
|
|
61
|
+
status: {
|
|
62
|
+
availableValues: [
|
|
63
|
+
{value: 1, label: 'draft'},
|
|
64
|
+
{value: 2, label: 'published'},
|
|
65
|
+
{value: 3, label: 'archived'}
|
|
66
|
+
],
|
|
67
|
+
dbType: 'enum'
|
|
68
|
+
},
|
|
69
|
+
created_at: {
|
|
70
|
+
type: 'datetime',
|
|
71
|
+
dbType: 'timestamp'
|
|
72
|
+
},
|
|
73
|
+
updated_at: {
|
|
74
|
+
type: 'datetime',
|
|
75
|
+
dbType: 'timestamp'
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
let propertiesKeys = Object.keys(properties);
|
|
79
|
+
let showProperties = propertiesKeys;
|
|
80
|
+
let editProperties = sc.removeFromArray([...propertiesKeys], ['id', 'created_at', 'updated_at']);
|
|
81
|
+
let listProperties = sc.removeFromArray([...propertiesKeys], ['description', 'metadata']);
|
|
82
|
+
return {
|
|
83
|
+
showProperties,
|
|
84
|
+
editProperties,
|
|
85
|
+
listProperties,
|
|
86
|
+
filterProperties: listProperties,
|
|
87
|
+
properties,
|
|
88
|
+
titleProperty,
|
|
89
|
+
...extraProps
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
module.exports.TestProductsEntity = TestProductsEntity;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - TestReviewsEntity
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { EntityProperties } = require('../../index');
|
|
8
|
+
const { sc } = require('@reldens/utils');
|
|
9
|
+
|
|
10
|
+
class TestReviewsEntity extends EntityProperties
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
static propertiesConfig(extraProps)
|
|
14
|
+
{
|
|
15
|
+
let titleProperty = 'title';
|
|
16
|
+
let properties = {
|
|
17
|
+
id: {
|
|
18
|
+
isId: true,
|
|
19
|
+
type: 'number',
|
|
20
|
+
isRequired: true,
|
|
21
|
+
dbType: 'int'
|
|
22
|
+
},
|
|
23
|
+
product_id: {
|
|
24
|
+
type: 'reference',
|
|
25
|
+
reference: 'test_products',
|
|
26
|
+
isRequired: true,
|
|
27
|
+
dbType: 'int'
|
|
28
|
+
},
|
|
29
|
+
reviewer_name: {
|
|
30
|
+
isRequired: true,
|
|
31
|
+
dbType: 'varchar'
|
|
32
|
+
},
|
|
33
|
+
reviewer_email: {
|
|
34
|
+
isRequired: true,
|
|
35
|
+
dbType: 'varchar'
|
|
36
|
+
},
|
|
37
|
+
rating: {
|
|
38
|
+
type: 'boolean',
|
|
39
|
+
isRequired: true,
|
|
40
|
+
dbType: 'tinyint'
|
|
41
|
+
},
|
|
42
|
+
[titleProperty]: {
|
|
43
|
+
dbType: 'varchar'
|
|
44
|
+
},
|
|
45
|
+
comment: {
|
|
46
|
+
type: 'textarea',
|
|
47
|
+
dbType: 'text'
|
|
48
|
+
},
|
|
49
|
+
is_verified: {
|
|
50
|
+
type: 'boolean',
|
|
51
|
+
dbType: 'tinyint'
|
|
52
|
+
},
|
|
53
|
+
helpful_count: {
|
|
54
|
+
type: 'number',
|
|
55
|
+
dbType: 'int'
|
|
56
|
+
},
|
|
57
|
+
created_at: {
|
|
58
|
+
type: 'datetime',
|
|
59
|
+
dbType: 'timestamp'
|
|
60
|
+
},
|
|
61
|
+
updated_at: {
|
|
62
|
+
type: 'datetime',
|
|
63
|
+
dbType: 'timestamp'
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
let propertiesKeys = Object.keys(properties);
|
|
67
|
+
let showProperties = propertiesKeys;
|
|
68
|
+
let editProperties = sc.removeFromArray([...propertiesKeys], ['id', 'created_at', 'updated_at']);
|
|
69
|
+
let listProperties = [...propertiesKeys];
|
|
70
|
+
listProperties.splice(listProperties.indexOf('comment'), 1);
|
|
71
|
+
return {
|
|
72
|
+
showProperties,
|
|
73
|
+
editProperties,
|
|
74
|
+
listProperties,
|
|
75
|
+
filterProperties: listProperties,
|
|
76
|
+
properties,
|
|
77
|
+
titleProperty,
|
|
78
|
+
...extraProps
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
module.exports.TestReviewsEntity = TestReviewsEntity;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - Entities Config
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { TestCategoriesEntity } = require('./entities/test-categories-entity');
|
|
8
|
+
const { TestProductsEntity } = require('./entities/test-products-entity');
|
|
9
|
+
const { TestReviewsEntity } = require('./entities/test-reviews-entity');
|
|
10
|
+
|
|
11
|
+
let entitiesConfig = {
|
|
12
|
+
testCategories: TestCategoriesEntity.propertiesConfig(),
|
|
13
|
+
testProducts: TestProductsEntity.propertiesConfig(),
|
|
14
|
+
testReviews: TestReviewsEntity.propertiesConfig()
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
module.exports.entitiesConfig = entitiesConfig;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - Registered Models
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { TestCategoriesModel } = require('./test-categories-model');
|
|
8
|
+
const { TestProductsModel } = require('./test-products-model');
|
|
9
|
+
const { TestReviewsModel } = require('./test-reviews-model');
|
|
10
|
+
const { entitiesConfig } = require('../../entities-config');
|
|
11
|
+
const { entitiesTranslations } = require('../../entities-translations');
|
|
12
|
+
|
|
13
|
+
let rawRegisteredEntities = {
|
|
14
|
+
testCategories: TestCategoriesModel,
|
|
15
|
+
testProducts: TestProductsModel,
|
|
16
|
+
testReviews: TestReviewsModel
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
module.exports.rawRegisteredEntities = rawRegisteredEntities;
|
|
20
|
+
|
|
21
|
+
module.exports.entitiesConfig = entitiesConfig;
|
|
22
|
+
|
|
23
|
+
module.exports.entitiesTranslations = entitiesTranslations;
|
package/tests/fixtures/expected-entities-objection-js/models/objection-js/test-categories-model.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - TestCategoriesModel
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { ObjectionJsRawModel } = require('../../../index');
|
|
8
|
+
|
|
9
|
+
class TestCategoriesModel extends ObjectionJsRawModel
|
|
10
|
+
{
|
|
11
|
+
|
|
12
|
+
static get tableName()
|
|
13
|
+
{
|
|
14
|
+
return 'test_categories';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
static get relationMappings()
|
|
18
|
+
{
|
|
19
|
+
const { TestProductsModel } = require('./test-products-model');
|
|
20
|
+
return {
|
|
21
|
+
related_test_products: {
|
|
22
|
+
relation: this.HasManyRelation,
|
|
23
|
+
modelClass: TestProductsModel,
|
|
24
|
+
join: {
|
|
25
|
+
from: this.tableName+'.id',
|
|
26
|
+
to: TestProductsModel.tableName+'.category_id'
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports.TestCategoriesModel = TestCategoriesModel;
|
package/tests/fixtures/expected-entities-objection-js/models/objection-js/test-products-model.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - TestProductsModel
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { ObjectionJsRawModel } = require('../../../index');
|
|
8
|
+
|
|
9
|
+
class TestProductsModel extends ObjectionJsRawModel
|
|
10
|
+
{
|
|
11
|
+
|
|
12
|
+
static get tableName()
|
|
13
|
+
{
|
|
14
|
+
return 'test_products';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
static get relationMappings()
|
|
18
|
+
{
|
|
19
|
+
const { TestCategoriesModel } = require('./test-categories-model');
|
|
20
|
+
const { TestReviewsModel } = require('./test-reviews-model');
|
|
21
|
+
return {
|
|
22
|
+
related_test_categories: {
|
|
23
|
+
relation: this.BelongsToOneRelation,
|
|
24
|
+
modelClass: TestCategoriesModel,
|
|
25
|
+
join: {
|
|
26
|
+
from: this.tableName+'.category_id',
|
|
27
|
+
to: TestCategoriesModel.tableName+'.id'
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
related_test_reviews: {
|
|
31
|
+
relation: this.HasManyRelation,
|
|
32
|
+
modelClass: TestReviewsModel,
|
|
33
|
+
join: {
|
|
34
|
+
from: this.tableName+'.id',
|
|
35
|
+
to: TestReviewsModel.tableName+'.product_id'
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
module.exports.TestProductsModel = TestProductsModel;
|
package/tests/fixtures/expected-entities-objection-js/models/objection-js/test-reviews-model.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - TestReviewsModel
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { ObjectionJsRawModel } = require('../../../index');
|
|
8
|
+
|
|
9
|
+
class TestReviewsModel extends ObjectionJsRawModel
|
|
10
|
+
{
|
|
11
|
+
|
|
12
|
+
static get tableName()
|
|
13
|
+
{
|
|
14
|
+
return 'test_reviews';
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
static get relationMappings()
|
|
18
|
+
{
|
|
19
|
+
const { TestProductsModel } = require('./test-products-model');
|
|
20
|
+
return {
|
|
21
|
+
related_test_products: {
|
|
22
|
+
relation: this.BelongsToOneRelation,
|
|
23
|
+
modelClass: TestProductsModel,
|
|
24
|
+
join: {
|
|
25
|
+
from: this.tableName+'.product_id',
|
|
26
|
+
to: TestProductsModel.tableName+'.id'
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports.TestReviewsModel = TestReviewsModel;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - TestCategoriesEntity
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { EntityProperties } = require('../../index');
|
|
8
|
+
const { sc } = require('@reldens/utils');
|
|
9
|
+
|
|
10
|
+
class TestCategoriesEntity extends EntityProperties
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
static propertiesConfig(extraProps)
|
|
14
|
+
{
|
|
15
|
+
let titleProperty = 'name';
|
|
16
|
+
let properties = {
|
|
17
|
+
id: {
|
|
18
|
+
isId: true,
|
|
19
|
+
type: 'number',
|
|
20
|
+
isRequired: true,
|
|
21
|
+
dbType: 'int'
|
|
22
|
+
},
|
|
23
|
+
[titleProperty]: {
|
|
24
|
+
isRequired: true,
|
|
25
|
+
dbType: 'varchar'
|
|
26
|
+
},
|
|
27
|
+
slug: {
|
|
28
|
+
isRequired: true,
|
|
29
|
+
dbType: 'varchar'
|
|
30
|
+
},
|
|
31
|
+
description: {
|
|
32
|
+
type: 'textarea',
|
|
33
|
+
dbType: 'text'
|
|
34
|
+
},
|
|
35
|
+
is_active: {
|
|
36
|
+
type: 'boolean',
|
|
37
|
+
dbType: 'tinyint'
|
|
38
|
+
},
|
|
39
|
+
display_order: {
|
|
40
|
+
type: 'number',
|
|
41
|
+
dbType: 'int'
|
|
42
|
+
},
|
|
43
|
+
created_at: {
|
|
44
|
+
type: 'datetime',
|
|
45
|
+
dbType: 'timestamp'
|
|
46
|
+
},
|
|
47
|
+
updated_at: {
|
|
48
|
+
type: 'datetime',
|
|
49
|
+
dbType: 'timestamp'
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
let propertiesKeys = Object.keys(properties);
|
|
53
|
+
let showProperties = propertiesKeys;
|
|
54
|
+
let editProperties = sc.removeFromArray([...propertiesKeys], ['id', 'created_at', 'updated_at']);
|
|
55
|
+
let listProperties = [...propertiesKeys];
|
|
56
|
+
listProperties.splice(listProperties.indexOf('description'), 1);
|
|
57
|
+
return {
|
|
58
|
+
showProperties,
|
|
59
|
+
editProperties,
|
|
60
|
+
listProperties,
|
|
61
|
+
filterProperties: listProperties,
|
|
62
|
+
properties,
|
|
63
|
+
titleProperty,
|
|
64
|
+
...extraProps
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
module.exports.TestCategoriesEntity = TestCategoriesEntity;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - TestProductsEntity
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { EntityProperties } = require('../../index');
|
|
8
|
+
const { sc } = require('@reldens/utils');
|
|
9
|
+
|
|
10
|
+
class TestProductsEntity extends EntityProperties
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
static propertiesConfig(extraProps)
|
|
14
|
+
{
|
|
15
|
+
let titleProperty = 'name';
|
|
16
|
+
let properties = {
|
|
17
|
+
id: {
|
|
18
|
+
isId: true,
|
|
19
|
+
type: 'number',
|
|
20
|
+
isRequired: true,
|
|
21
|
+
dbType: 'int'
|
|
22
|
+
},
|
|
23
|
+
category_id: {
|
|
24
|
+
type: 'reference',
|
|
25
|
+
reference: 'test_categories',
|
|
26
|
+
isRequired: true,
|
|
27
|
+
dbType: 'int'
|
|
28
|
+
},
|
|
29
|
+
[titleProperty]: {
|
|
30
|
+
isRequired: true,
|
|
31
|
+
dbType: 'varchar'
|
|
32
|
+
},
|
|
33
|
+
sku: {
|
|
34
|
+
isRequired: true,
|
|
35
|
+
dbType: 'varchar'
|
|
36
|
+
},
|
|
37
|
+
description: {
|
|
38
|
+
type: 'textarea',
|
|
39
|
+
dbType: 'text'
|
|
40
|
+
},
|
|
41
|
+
price: {
|
|
42
|
+
type: 'number',
|
|
43
|
+
isRequired: true,
|
|
44
|
+
dbType: 'decimal'
|
|
45
|
+
},
|
|
46
|
+
stock_quantity: {
|
|
47
|
+
type: 'number',
|
|
48
|
+
dbType: 'int'
|
|
49
|
+
},
|
|
50
|
+
is_featured: {
|
|
51
|
+
type: 'boolean',
|
|
52
|
+
dbType: 'tinyint'
|
|
53
|
+
},
|
|
54
|
+
metadata: {
|
|
55
|
+
type: 'textarea',
|
|
56
|
+
dbType: 'json'
|
|
57
|
+
},
|
|
58
|
+
tags: {
|
|
59
|
+
dbType: 'varchar'
|
|
60
|
+
},
|
|
61
|
+
status: {
|
|
62
|
+
availableValues: [
|
|
63
|
+
{value: 1, label: 'draft'},
|
|
64
|
+
{value: 2, label: 'published'},
|
|
65
|
+
{value: 3, label: 'archived'}
|
|
66
|
+
],
|
|
67
|
+
dbType: 'enum'
|
|
68
|
+
},
|
|
69
|
+
created_at: {
|
|
70
|
+
type: 'datetime',
|
|
71
|
+
dbType: 'timestamp'
|
|
72
|
+
},
|
|
73
|
+
updated_at: {
|
|
74
|
+
type: 'datetime',
|
|
75
|
+
dbType: 'timestamp'
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
let propertiesKeys = Object.keys(properties);
|
|
79
|
+
let showProperties = propertiesKeys;
|
|
80
|
+
let editProperties = sc.removeFromArray([...propertiesKeys], ['id', 'created_at', 'updated_at']);
|
|
81
|
+
let listProperties = sc.removeFromArray([...propertiesKeys], ['description', 'metadata']);
|
|
82
|
+
return {
|
|
83
|
+
showProperties,
|
|
84
|
+
editProperties,
|
|
85
|
+
listProperties,
|
|
86
|
+
filterProperties: listProperties,
|
|
87
|
+
properties,
|
|
88
|
+
titleProperty,
|
|
89
|
+
...extraProps
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
module.exports.TestProductsEntity = TestProductsEntity;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - TestReviewsEntity
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { EntityProperties } = require('../../index');
|
|
8
|
+
const { sc } = require('@reldens/utils');
|
|
9
|
+
|
|
10
|
+
class TestReviewsEntity extends EntityProperties
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
static propertiesConfig(extraProps)
|
|
14
|
+
{
|
|
15
|
+
let titleProperty = 'title';
|
|
16
|
+
let properties = {
|
|
17
|
+
id: {
|
|
18
|
+
isId: true,
|
|
19
|
+
type: 'number',
|
|
20
|
+
isRequired: true,
|
|
21
|
+
dbType: 'int'
|
|
22
|
+
},
|
|
23
|
+
product_id: {
|
|
24
|
+
type: 'reference',
|
|
25
|
+
reference: 'test_products',
|
|
26
|
+
isRequired: true,
|
|
27
|
+
dbType: 'int'
|
|
28
|
+
},
|
|
29
|
+
reviewer_name: {
|
|
30
|
+
isRequired: true,
|
|
31
|
+
dbType: 'varchar'
|
|
32
|
+
},
|
|
33
|
+
reviewer_email: {
|
|
34
|
+
isRequired: true,
|
|
35
|
+
dbType: 'varchar'
|
|
36
|
+
},
|
|
37
|
+
rating: {
|
|
38
|
+
type: 'boolean',
|
|
39
|
+
isRequired: true,
|
|
40
|
+
dbType: 'tinyint'
|
|
41
|
+
},
|
|
42
|
+
[titleProperty]: {
|
|
43
|
+
dbType: 'varchar'
|
|
44
|
+
},
|
|
45
|
+
comment: {
|
|
46
|
+
type: 'textarea',
|
|
47
|
+
dbType: 'text'
|
|
48
|
+
},
|
|
49
|
+
is_verified: {
|
|
50
|
+
type: 'boolean',
|
|
51
|
+
dbType: 'tinyint'
|
|
52
|
+
},
|
|
53
|
+
helpful_count: {
|
|
54
|
+
type: 'number',
|
|
55
|
+
dbType: 'int'
|
|
56
|
+
},
|
|
57
|
+
created_at: {
|
|
58
|
+
type: 'datetime',
|
|
59
|
+
dbType: 'timestamp'
|
|
60
|
+
},
|
|
61
|
+
updated_at: {
|
|
62
|
+
type: 'datetime',
|
|
63
|
+
dbType: 'timestamp'
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
let propertiesKeys = Object.keys(properties);
|
|
67
|
+
let showProperties = propertiesKeys;
|
|
68
|
+
let editProperties = sc.removeFromArray([...propertiesKeys], ['id', 'created_at', 'updated_at']);
|
|
69
|
+
let listProperties = [...propertiesKeys];
|
|
70
|
+
listProperties.splice(listProperties.indexOf('comment'), 1);
|
|
71
|
+
return {
|
|
72
|
+
showProperties,
|
|
73
|
+
editProperties,
|
|
74
|
+
listProperties,
|
|
75
|
+
filterProperties: listProperties,
|
|
76
|
+
properties,
|
|
77
|
+
titleProperty,
|
|
78
|
+
...extraProps
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
module.exports.TestReviewsEntity = TestReviewsEntity;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* Reldens - Entities Config
|
|
4
|
+
*
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
const { TestCategoriesEntity } = require('./entities/test-categories-entity');
|
|
8
|
+
const { TestProductsEntity } = require('./entities/test-products-entity');
|
|
9
|
+
const { TestReviewsEntity } = require('./entities/test-reviews-entity');
|
|
10
|
+
|
|
11
|
+
let entitiesConfig = {
|
|
12
|
+
testCategories: TestCategoriesEntity.propertiesConfig(),
|
|
13
|
+
testProducts: TestProductsEntity.propertiesConfig(),
|
|
14
|
+
testReviews: TestReviewsEntity.propertiesConfig()
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
module.exports.entitiesConfig = entitiesConfig;
|