@tc-libs/setting 5.4.1 → 5.5.1
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/package.json +11 -11
- package/src/controllers/setting.admin.controller.js +7 -0
- package/src/controllers/setting.admin.controller.js.map +1 -1
- package/src/errors/400/api.400.setting.error.d.ts +7 -0
- package/src/errors/400/api.400.setting.error.js +7 -1
- package/src/errors/400/api.400.setting.error.js.map +1 -1
- package/src/services/setting.abstract.service.d.ts +1 -0
- package/src/services/setting.abstract.service.js +24 -8
- package/src/services/setting.abstract.service.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tc-libs/setting",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.5.1",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"@faker-js/faker": "^9.6.0",
|
|
6
|
-
"@tc-libs/app-cache": "5.
|
|
7
|
-
"@tc-libs/authentication": "5.
|
|
8
|
-
"@tc-libs/database": "5.
|
|
9
|
-
"@tc-libs/doc": "5.
|
|
10
|
-
"@tc-libs/errors": "5.
|
|
11
|
-
"@tc-libs/helper": "5.
|
|
12
|
-
"@tc-libs/pagination": "5.
|
|
13
|
-
"@tc-libs/request": "5.
|
|
14
|
-
"@tc-libs/response": "5.
|
|
15
|
-
"@tc-libs/service": "5.
|
|
6
|
+
"@tc-libs/app-cache": "5.5.1",
|
|
7
|
+
"@tc-libs/authentication": "5.5.1",
|
|
8
|
+
"@tc-libs/database": "5.5.1",
|
|
9
|
+
"@tc-libs/doc": "5.5.1",
|
|
10
|
+
"@tc-libs/errors": "5.5.1",
|
|
11
|
+
"@tc-libs/helper": "5.5.1",
|
|
12
|
+
"@tc-libs/pagination": "5.5.1",
|
|
13
|
+
"@tc-libs/request": "5.5.1",
|
|
14
|
+
"@tc-libs/response": "5.5.1",
|
|
15
|
+
"@tc-libs/service": "5.5.1",
|
|
16
16
|
"express": "5.0.1",
|
|
17
17
|
"tslib": "^2.8.1"
|
|
18
18
|
},
|
|
@@ -23,6 +23,13 @@ let SettingAdminController = class SettingAdminController {
|
|
|
23
23
|
this.paginationService = paginationService;
|
|
24
24
|
}
|
|
25
25
|
async update(setting, body) {
|
|
26
|
+
// BRG-229: il tipo resta quello salvato. Prima un flag BOOLEAN salvato come STRING 'false' attivava la manutenzione
|
|
27
|
+
if (body.type !== setting.type) {
|
|
28
|
+
throw new errors_1.Api400SettingTypeNotAllowedError({
|
|
29
|
+
type: body.type,
|
|
30
|
+
expected: setting.type,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
26
33
|
const check = await this.settingService.checkValue(body.value, body.type);
|
|
27
34
|
if (!check) {
|
|
28
35
|
throw new errors_1.Api400SettingValueNotAllowedError({ value: body.value });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setting.admin.controller.js","sourceRoot":"","sources":["../../../../../packages/setting/src/controllers/setting.admin.controller.ts"],"names":[],"mappings":";;;;AAAA,4DAAgF;AAChF,8CAAgE;AAChE,gDAM2B;AAC3B,2CAA4D;AAC5D,6CAA0C;AAC1C,mFAA2E;AAE3E,kCAAgF;AAChF,kCAAmE;AACnE,
|
|
1
|
+
{"version":3,"file":"setting.admin.controller.js","sourceRoot":"","sources":["../../../../../packages/setting/src/controllers/setting.admin.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,3 +5,10 @@ export type Api400SettingValueNotAllowedType = {
|
|
|
5
5
|
export declare class Api400SettingValueNotAllowedError extends Api400Error {
|
|
6
6
|
constructor(data: Api400SettingValueNotAllowedType);
|
|
7
7
|
}
|
|
8
|
+
export type Api400SettingTypeNotAllowedType = {
|
|
9
|
+
type: string;
|
|
10
|
+
expected: string;
|
|
11
|
+
};
|
|
12
|
+
export declare class Api400SettingTypeNotAllowedError extends Api400Error {
|
|
13
|
+
constructor(data: Api400SettingTypeNotAllowedType);
|
|
14
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Api400SettingValueNotAllowedError = void 0;
|
|
3
|
+
exports.Api400SettingTypeNotAllowedError = exports.Api400SettingValueNotAllowedError = void 0;
|
|
4
4
|
const errors_1 = require("@tc-libs/errors");
|
|
5
5
|
class Api400SettingValueNotAllowedError extends errors_1.Api400Error {
|
|
6
6
|
constructor(data) {
|
|
@@ -8,4 +8,10 @@ class Api400SettingValueNotAllowedError extends errors_1.Api400Error {
|
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
exports.Api400SettingValueNotAllowedError = Api400SettingValueNotAllowedError;
|
|
11
|
+
class Api400SettingTypeNotAllowedError extends errors_1.Api400Error {
|
|
12
|
+
constructor(data) {
|
|
13
|
+
super('error.400.setting_type_not_allowed', `Setting type [${data.type}] is not allowed, expected [${data.expected}]`, data);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.Api400SettingTypeNotAllowedError = Api400SettingTypeNotAllowedError;
|
|
11
17
|
//# sourceMappingURL=api.400.setting.error.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.400.setting.error.js","sourceRoot":"","sources":["../../../../../../packages/setting/src/errors/400/api.400.setting.error.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAG9C,MAAa,iCAAkC,SAAQ,oBAAW;IAChE,YAAY,IAAsC;QAChD,KAAK,CACH,qCAAqC,EACrC,kBAAkB,IAAI,CAAC,KAAK,kBAAkB,EAC9C,IAAI,CACL,CAAC;IACJ,CAAC;CACF;AARD,8EAQC"}
|
|
1
|
+
{"version":3,"file":"api.400.setting.error.js","sourceRoot":"","sources":["../../../../../../packages/setting/src/errors/400/api.400.setting.error.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAG9C,MAAa,iCAAkC,SAAQ,oBAAW;IAChE,YAAY,IAAsC;QAChD,KAAK,CACH,qCAAqC,EACrC,kBAAkB,IAAI,CAAC,KAAK,kBAAkB,EAC9C,IAAI,CACL,CAAC;IACJ,CAAC;CACF;AARD,8EAQC;AAOD,MAAa,gCAAiC,SAAQ,oBAAW;IAC/D,YAAY,IAAqC;QAC/C,KAAK,CACH,oCAAoC,EACpC,iBAAiB,IAAI,CAAC,IAAI,+BAA+B,IAAI,CAAC,QAAQ,GAAG,EACzE,IAAI,CACL,CAAC;IACJ,CAAC;CACF;AARD,4EAQC"}
|
|
@@ -16,6 +16,7 @@ export declare class BaseSettingService extends AbstractService<SettingEntity, S
|
|
|
16
16
|
protected readonly maxPasswordAttempt: number;
|
|
17
17
|
private cacheTime;
|
|
18
18
|
private _settingMap;
|
|
19
|
+
private _settingGeneration;
|
|
19
20
|
constructor(_paging: PaginationService, settingRepository: SettingRepository, number: NumberService);
|
|
20
21
|
getAllPublic(): Promise<Record<string, any>>;
|
|
21
22
|
findOneByName(name: string, options?: IDatabaseFindOneOptions): Promise<SettingDoc>;
|
|
@@ -18,6 +18,9 @@ let BaseSettingService = BaseSettingService_1 = class BaseSettingService extends
|
|
|
18
18
|
this.logger = new common_1.Logger(BaseSettingService_1.name);
|
|
19
19
|
this.cacheTime = 1 * 60 * 1000;
|
|
20
20
|
this._settingMap = {};
|
|
21
|
+
// BRG-228: generazione della voce, aumentata a ogni invalidazione. Una lettura dal DB iniziata prima di
|
|
22
|
+
// un'invalidazione non entra in cache: potrebbe avere il valore precedente alla scrittura.
|
|
23
|
+
this._settingGeneration = {};
|
|
21
24
|
}
|
|
22
25
|
async getAllPublic() {
|
|
23
26
|
const settings = await this.settingRepository.findAll({ public: true }, { returnPlain: true });
|
|
@@ -37,22 +40,32 @@ let BaseSettingService = BaseSettingService_1 = class BaseSettingService extends
|
|
|
37
40
|
repository.type = type;
|
|
38
41
|
repository.value = value;
|
|
39
42
|
repository.value = this.getValue(repository);
|
|
40
|
-
|
|
43
|
+
const saved = await this.settingRepository.save(repository);
|
|
44
|
+
// BRG-226: come updateByName, la lettura successiva vede il valore nuovo invece di quello in cache
|
|
45
|
+
this._invalidateCache(repository.name);
|
|
46
|
+
return saved;
|
|
41
47
|
}
|
|
42
48
|
async updateByName(name, value) {
|
|
49
|
+
const updated = await this.settingRepository.updateOne({ name }, {
|
|
50
|
+
value,
|
|
51
|
+
});
|
|
52
|
+
// BRG-228: svuotata dopo la scrittura. Prima una lettura durante la scrittura rimetteva in cache il valore vecchio
|
|
43
53
|
this._invalidateCache(name);
|
|
44
|
-
return
|
|
54
|
+
return updated;
|
|
45
55
|
}
|
|
46
56
|
getValue(setting) {
|
|
47
|
-
if (setting.type === setting_enum_constant_1.ENUM_SETTING_DATA_TYPE.BOOLEAN
|
|
48
|
-
|
|
49
|
-
return (setting.value === 'true');
|
|
57
|
+
if (setting.type === setting_enum_constant_1.ENUM_SETTING_DATA_TYPE.BOOLEAN) {
|
|
58
|
+
// BRG-229: vero solo con true o 'true'. Prima un valore non canonico ('False', '0') restava una stringa, truthy
|
|
59
|
+
return (setting.value === true || setting.value === 'true');
|
|
50
60
|
}
|
|
51
61
|
else if (setting.type === setting_enum_constant_1.ENUM_SETTING_DATA_TYPE.NUMBER &&
|
|
52
|
-
this.number.
|
|
62
|
+
this.number.checkReal(setting.value)) {
|
|
63
|
+
// BRG-227: anche i decimali, che checkValue accetta; prima restavano stringhe
|
|
53
64
|
return Number(setting.value);
|
|
54
65
|
}
|
|
55
|
-
else if (setting.type === setting_enum_constant_1.ENUM_SETTING_DATA_TYPE.ARRAY_OF_STRING
|
|
66
|
+
else if (setting.type === setting_enum_constant_1.ENUM_SETTING_DATA_TYPE.ARRAY_OF_STRING &&
|
|
67
|
+
typeof setting.value === 'string') {
|
|
68
|
+
// BRG-227: updateValue salva l'array prodotto da getValue, che in lettura resta un array (prima TypeError)
|
|
56
69
|
return setting.value.split(',');
|
|
57
70
|
}
|
|
58
71
|
else if (setting.type === setting_enum_constant_1.ENUM_SETTING_DATA_TYPE.ARRAY_OF_ID &&
|
|
@@ -88,15 +101,18 @@ let BaseSettingService = BaseSettingService_1 = class BaseSettingService extends
|
|
|
88
101
|
}
|
|
89
102
|
_invalidateCache(name) {
|
|
90
103
|
delete this._settingMap[name];
|
|
104
|
+
this._settingGeneration[name] = (this._settingGeneration[name] ?? 0) + 1;
|
|
91
105
|
}
|
|
92
106
|
async _getSettingAndCache(name) {
|
|
93
107
|
if (!this._settingMap[name] ||
|
|
94
108
|
this._settingMap[name].ts <
|
|
95
109
|
new Date(new Date().getTime() - this.cacheTime)) {
|
|
110
|
+
const generation = this._settingGeneration[name] ?? 0;
|
|
96
111
|
const setting = await this.settingRepository.findOne({
|
|
97
112
|
name,
|
|
98
113
|
}, { returnPlain: true });
|
|
99
|
-
this.
|
|
114
|
+
if ((this._settingGeneration[name] ?? 0) === generation)
|
|
115
|
+
this._settingMap[name] = { setting, ts: new Date() };
|
|
100
116
|
return setting;
|
|
101
117
|
}
|
|
102
118
|
return this._settingMap[name].setting;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setting.abstract.service.js","sourceRoot":"","sources":["../../../../../packages/setting/src/services/setting.abstract.service.ts"],"names":[],"mappings":";;;;;AAAA,2CAAoD;AAEpD,4CAAgD;AAChD,8EAA4E;AAM5E,sFAAkF;AAClF,8CAAmD;AACnD,oDAAwD;AAGjD,IAAM,kBAAkB,0BAAxB,MAAM,kBAAmB,SAAQ,yBAGvC;
|
|
1
|
+
{"version":3,"file":"setting.abstract.service.js","sourceRoot":"","sources":["../../../../../packages/setting/src/services/setting.abstract.service.ts"],"names":[],"mappings":"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"}
|