@flusys/nestjs-localization 7.0.2 → 8.0.0-beta.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/config/index.d.ts +3 -3
- package/controllers/index.d.ts +3 -3
- package/controllers/language.controller.d.ts +4 -4
- package/controllers/translation-key.controller.d.ts +3 -3
- package/controllers/translation.controller.d.ts +4 -4
- package/docs/index.d.ts +1 -1
- package/docs/localization-swagger.config.d.ts +1 -1
- package/dtos/index.d.ts +3 -3
- package/dtos/translation.dto.d.ts +2 -2
- package/entities/index.d.ts +6 -6
- package/entities/language.entity.d.ts +1 -1
- package/entities/translation-key.entity.d.ts +1 -1
- package/entities/translation.entity.d.ts +2 -2
- package/fesm/349.js +1179 -0
- package/fesm/692.js +1205 -0
- package/fesm/config/index.js +101 -3
- package/fesm/controllers/index.js +15 -3
- package/fesm/docs/index.js +126 -1
- package/fesm/dtos/index.js +680 -3
- package/fesm/entities/index.js +405 -8
- package/fesm/index.js +257 -7
- package/fesm/interfaces/index.js +18 -4
- package/fesm/modules/index.js +152 -1
- package/fesm/runtime.js +85 -0
- package/fesm/services/index.js +15 -5
- package/index.d.ts +7 -7
- package/interfaces/index.d.ts +4 -4
- package/interfaces/language.interface.d.ts +1 -1
- package/interfaces/localization-module-options.interface.d.ts +3 -3
- package/interfaces/translation-key.interface.d.ts +1 -1
- package/interfaces/translation.interface.d.ts +3 -3
- package/modules/index.d.ts +1 -1
- package/modules/localization.module.d.ts +2 -2
- package/package.json +25 -34
- package/services/index.d.ts +5 -5
- package/services/language.service.d.ts +6 -6
- package/services/localization-config.service.d.ts +3 -3
- package/services/localization-datasource.provider.d.ts +3 -3
- package/services/translation-key.service.d.ts +6 -6
- package/services/translation.service.d.ts +5 -5
- package/cjs/config/event-actions.js +0 -33
- package/cjs/config/index.js +0 -20
- package/cjs/config/localization.constants.js +0 -11
- package/cjs/config/message-keys.js +0 -41
- package/cjs/controllers/index.js +0 -20
- package/cjs/controllers/language.controller.js +0 -188
- package/cjs/controllers/language.controller.spec.js +0 -154
- package/cjs/controllers/translation-key.controller.js +0 -135
- package/cjs/controllers/translation-key.controller.spec.js +0 -70
- package/cjs/controllers/translation.controller.js +0 -195
- package/cjs/controllers/translation.controller.spec.js +0 -169
- package/cjs/docs/index.js +0 -11
- package/cjs/docs/localization-swagger.config.js +0 -111
- package/cjs/docs/localization-swagger.config.spec.js +0 -30
- package/cjs/dtos/index.js +0 -20
- package/cjs/dtos/language.dto.js +0 -213
- package/cjs/dtos/translation-key.dto.js +0 -215
- package/cjs/dtos/translation.dto.js +0 -269
- package/cjs/entities/index.js +0 -42
- package/cjs/entities/index.spec.js +0 -18
- package/cjs/entities/language.entity.js +0 -126
- package/cjs/entities/translation-key.entity.js +0 -126
- package/cjs/entities/translation.entity.js +0 -120
- package/cjs/index.js +0 -24
- package/cjs/interfaces/index.js +0 -21
- package/cjs/interfaces/language.interface.js +0 -4
- package/cjs/interfaces/localization-module-options.interface.js +0 -4
- package/cjs/interfaces/translation-key.interface.js +0 -4
- package/cjs/interfaces/translation.interface.js +0 -4
- package/cjs/modules/index.js +0 -18
- package/cjs/modules/localization.module.js +0 -116
- package/cjs/modules/localization.module.spec.js +0 -132
- package/cjs/services/index.js +0 -22
- package/cjs/services/language.service.js +0 -181
- package/cjs/services/language.service.spec.js +0 -256
- package/cjs/services/localization-config.service.js +0 -66
- package/cjs/services/localization-config.service.spec.js +0 -80
- package/cjs/services/localization-datasource.provider.js +0 -79
- package/cjs/services/localization-datasource.provider.spec.js +0 -85
- package/cjs/services/translation-key.service.js +0 -179
- package/cjs/services/translation-key.service.spec.js +0 -303
- package/cjs/services/translation.service.js +0 -228
- package/cjs/services/translation.service.spec.js +0 -530
- package/fesm/config/event-actions.js +0 -12
- package/fesm/config/localization.constants.js +0 -1
- package/fesm/config/message-keys.js +0 -20
- package/fesm/controllers/language.controller.js +0 -178
- package/fesm/controllers/language.controller.spec.js +0 -150
- package/fesm/controllers/translation-key.controller.js +0 -125
- package/fesm/controllers/translation-key.controller.spec.js +0 -66
- package/fesm/controllers/translation.controller.js +0 -185
- package/fesm/controllers/translation.controller.spec.js +0 -165
- package/fesm/docs/localization-swagger.config.js +0 -101
- package/fesm/docs/localization-swagger.config.spec.js +0 -26
- package/fesm/dtos/language.dto.js +0 -192
- package/fesm/dtos/translation-key.dto.js +0 -194
- package/fesm/dtos/translation.dto.js +0 -239
- package/fesm/entities/index.spec.js +0 -14
- package/fesm/entities/language.entity.js +0 -116
- package/fesm/entities/translation-key.entity.js +0 -116
- package/fesm/entities/translation.entity.js +0 -110
- package/fesm/interfaces/language.interface.js +0 -1
- package/fesm/interfaces/localization-module-options.interface.js +0 -1
- package/fesm/interfaces/translation-key.interface.js +0 -1
- package/fesm/interfaces/translation.interface.js +0 -1
- package/fesm/modules/localization.module.js +0 -106
- package/fesm/modules/localization.module.spec.js +0 -128
- package/fesm/services/language.service.js +0 -171
- package/fesm/services/language.service.spec.js +0 -252
- package/fesm/services/localization-config.service.js +0 -56
- package/fesm/services/localization-config.service.spec.js +0 -76
- package/fesm/services/localization-datasource.provider.js +0 -69
- package/fesm/services/localization-datasource.provider.spec.js +0 -81
- package/fesm/services/translation-key.service.js +0 -169
- package/fesm/services/translation-key.service.spec.js +0 -299
- package/fesm/services/translation.service.js +0 -218
- package/fesm/services/translation.service.spec.js +0 -526
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
function _define_property(obj, key, value) {
|
|
2
|
-
if (key in obj) {
|
|
3
|
-
Object.defineProperty(obj, key, {
|
|
4
|
-
value: value,
|
|
5
|
-
enumerable: true,
|
|
6
|
-
configurable: true,
|
|
7
|
-
writable: true
|
|
8
|
-
});
|
|
9
|
-
} else {
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
12
|
-
return obj;
|
|
13
|
-
}
|
|
14
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
15
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
-
}
|
|
20
|
-
function _ts_metadata(k, v) {
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
22
|
-
}
|
|
23
|
-
function _ts_param(paramIndex, decorator) {
|
|
24
|
-
return function(target, key) {
|
|
25
|
-
decorator(target, key, paramIndex);
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
import { createApiController, LANGUAGE_PERMISSIONS } from '@flusys/nestjs-shared/classes';
|
|
29
|
-
import { CurrentUser, RequirePermission } from '@flusys/nestjs-shared/decorators';
|
|
30
|
-
import { JwtAuthGuard, PermissionGuard } from '@flusys/nestjs-shared/guards';
|
|
31
|
-
import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
|
|
32
|
-
import { Body, Controller, Inject, Post, UseGuards } from '@nestjs/common';
|
|
33
|
-
import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
|
|
34
|
-
import { LANGUAGE_MESSAGES } from '../config';
|
|
35
|
-
import { CreateLanguageDto, LanguageResponseDto, UpdateLanguageDto } from '../dtos';
|
|
36
|
-
import { LanguageService } from '../services';
|
|
37
|
-
export class LanguageController extends createApiController(CreateLanguageDto, UpdateLanguageDto, LanguageResponseDto, {
|
|
38
|
-
entityName: 'language',
|
|
39
|
-
security: {
|
|
40
|
-
insert: {
|
|
41
|
-
level: 'permission',
|
|
42
|
-
permissions: [
|
|
43
|
-
LANGUAGE_PERMISSIONS.CREATE
|
|
44
|
-
]
|
|
45
|
-
},
|
|
46
|
-
insertMany: {
|
|
47
|
-
level: 'permission',
|
|
48
|
-
permissions: [
|
|
49
|
-
LANGUAGE_PERMISSIONS.CREATE
|
|
50
|
-
]
|
|
51
|
-
},
|
|
52
|
-
getById: {
|
|
53
|
-
level: 'permission',
|
|
54
|
-
permissions: [
|
|
55
|
-
LANGUAGE_PERMISSIONS.READ
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
getAll: {
|
|
59
|
-
level: 'permission',
|
|
60
|
-
permissions: [
|
|
61
|
-
LANGUAGE_PERMISSIONS.READ
|
|
62
|
-
]
|
|
63
|
-
},
|
|
64
|
-
update: {
|
|
65
|
-
level: 'permission',
|
|
66
|
-
permissions: [
|
|
67
|
-
LANGUAGE_PERMISSIONS.UPDATE
|
|
68
|
-
]
|
|
69
|
-
},
|
|
70
|
-
updateMany: {
|
|
71
|
-
level: 'permission',
|
|
72
|
-
permissions: [
|
|
73
|
-
LANGUAGE_PERMISSIONS.UPDATE
|
|
74
|
-
]
|
|
75
|
-
},
|
|
76
|
-
delete: {
|
|
77
|
-
level: 'permission',
|
|
78
|
-
permissions: [
|
|
79
|
-
LANGUAGE_PERMISSIONS.DELETE
|
|
80
|
-
]
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}) {
|
|
84
|
-
async getActive() {
|
|
85
|
-
const data = await this.service.getActiveLanguages();
|
|
86
|
-
return {
|
|
87
|
-
success: true,
|
|
88
|
-
message: 'Active languages retrieved successfully',
|
|
89
|
-
messageKey: LANGUAGE_MESSAGES.ACTIVE_SUCCESS,
|
|
90
|
-
data,
|
|
91
|
-
meta: {
|
|
92
|
-
total: data.length,
|
|
93
|
-
page: 0,
|
|
94
|
-
pageSize: data.length,
|
|
95
|
-
count: data.length
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
async getDefault() {
|
|
100
|
-
const data = await this.service.getDefaultLanguage();
|
|
101
|
-
return {
|
|
102
|
-
success: true,
|
|
103
|
-
message: 'Default language retrieved successfully',
|
|
104
|
-
messageKey: LANGUAGE_MESSAGES.GET_DEFAULT_SUCCESS,
|
|
105
|
-
data: data ?? undefined
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
async setDefault(body, _user) {
|
|
109
|
-
const data = await this.service.setAsDefault(body.id);
|
|
110
|
-
return {
|
|
111
|
-
success: true,
|
|
112
|
-
message: 'Default language updated successfully',
|
|
113
|
-
messageKey: LANGUAGE_MESSAGES.SET_DEFAULT_SUCCESS,
|
|
114
|
-
data: data ?? undefined
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
constructor(service){
|
|
118
|
-
super(service), _define_property(this, "service", void 0), this.service = service;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
_ts_decorate([
|
|
122
|
-
Post('get-active'),
|
|
123
|
-
ApiOperation({
|
|
124
|
-
summary: 'Get all active languages'
|
|
125
|
-
}),
|
|
126
|
-
ApiResponse({
|
|
127
|
-
status: 200,
|
|
128
|
-
type: [
|
|
129
|
-
LanguageResponseDto
|
|
130
|
-
]
|
|
131
|
-
}),
|
|
132
|
-
_ts_metadata("design:type", Function),
|
|
133
|
-
_ts_metadata("design:paramtypes", []),
|
|
134
|
-
_ts_metadata("design:returntype", Promise)
|
|
135
|
-
], LanguageController.prototype, "getActive", null);
|
|
136
|
-
_ts_decorate([
|
|
137
|
-
Post('get-default'),
|
|
138
|
-
ApiOperation({
|
|
139
|
-
summary: 'Get default language'
|
|
140
|
-
}),
|
|
141
|
-
ApiResponse({
|
|
142
|
-
status: 200,
|
|
143
|
-
type: LanguageResponseDto
|
|
144
|
-
}),
|
|
145
|
-
_ts_metadata("design:type", Function),
|
|
146
|
-
_ts_metadata("design:paramtypes", []),
|
|
147
|
-
_ts_metadata("design:returntype", Promise)
|
|
148
|
-
], LanguageController.prototype, "getDefault", null);
|
|
149
|
-
_ts_decorate([
|
|
150
|
-
Post('set-default'),
|
|
151
|
-
UseGuards(JwtAuthGuard, PermissionGuard),
|
|
152
|
-
ApiBearerAuth(),
|
|
153
|
-
RequirePermission(LANGUAGE_PERMISSIONS.UPDATE),
|
|
154
|
-
ApiOperation({
|
|
155
|
-
summary: 'Set a language as default'
|
|
156
|
-
}),
|
|
157
|
-
ApiResponse({
|
|
158
|
-
status: 200,
|
|
159
|
-
type: LanguageResponseDto
|
|
160
|
-
}),
|
|
161
|
-
_ts_param(0, Body()),
|
|
162
|
-
_ts_param(1, CurrentUser()),
|
|
163
|
-
_ts_metadata("design:type", Function),
|
|
164
|
-
_ts_metadata("design:paramtypes", [
|
|
165
|
-
Object,
|
|
166
|
-
typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
|
|
167
|
-
]),
|
|
168
|
-
_ts_metadata("design:returntype", Promise)
|
|
169
|
-
], LanguageController.prototype, "setDefault", null);
|
|
170
|
-
LanguageController = _ts_decorate([
|
|
171
|
-
ApiTags('Localization - Language'),
|
|
172
|
-
Controller('localization/language'),
|
|
173
|
-
_ts_param(0, Inject(LanguageService)),
|
|
174
|
-
_ts_metadata("design:type", Function),
|
|
175
|
-
_ts_metadata("design:paramtypes", [
|
|
176
|
-
typeof LanguageService === "undefined" ? Object : LanguageService
|
|
177
|
-
])
|
|
178
|
-
], LanguageController);
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { Test } from '@nestjs/testing';
|
|
2
|
-
import { UtilsService } from '@flusys/nestjs-shared/modules';
|
|
3
|
-
import { buildMockUser } from '@test-utils/mocks/logged-user.mock';
|
|
4
|
-
import { LanguageController } from './language.controller';
|
|
5
|
-
import { LanguageService } from '../services';
|
|
6
|
-
function buildLanguage(overrides = {}) {
|
|
7
|
-
return {
|
|
8
|
-
id: 'lang-en',
|
|
9
|
-
code: 'en',
|
|
10
|
-
name: 'English',
|
|
11
|
-
nativeName: 'English',
|
|
12
|
-
direction: 'ltr',
|
|
13
|
-
isActive: true,
|
|
14
|
-
isDefault: false,
|
|
15
|
-
serial: 1,
|
|
16
|
-
isReadonly: false,
|
|
17
|
-
createdAt: new Date(),
|
|
18
|
-
updatedAt: new Date(),
|
|
19
|
-
deletedAt: null,
|
|
20
|
-
createdById: null,
|
|
21
|
-
updatedById: null,
|
|
22
|
-
deletedById: null,
|
|
23
|
-
...overrides
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
describe('LanguageController', ()=>{
|
|
27
|
-
let controller;
|
|
28
|
-
let mockService;
|
|
29
|
-
beforeEach(async ()=>{
|
|
30
|
-
mockService = {
|
|
31
|
-
insert: jest.fn(),
|
|
32
|
-
findById: jest.fn(),
|
|
33
|
-
getAll: jest.fn(),
|
|
34
|
-
update: jest.fn(),
|
|
35
|
-
delete: jest.fn(),
|
|
36
|
-
getActiveLanguages: jest.fn(),
|
|
37
|
-
getDefaultLanguage: jest.fn(),
|
|
38
|
-
setAsDefault: jest.fn()
|
|
39
|
-
};
|
|
40
|
-
const module = await Test.createTestingModule({
|
|
41
|
-
controllers: [
|
|
42
|
-
LanguageController
|
|
43
|
-
],
|
|
44
|
-
providers: [
|
|
45
|
-
{
|
|
46
|
-
provide: LanguageService,
|
|
47
|
-
useValue: mockService
|
|
48
|
-
},
|
|
49
|
-
// The base ApiController wires the Slug interceptor (needs UtilsService) on several
|
|
50
|
-
// inherited endpoints, so it must be resolvable even though these tests only hit custom routes.
|
|
51
|
-
{
|
|
52
|
-
provide: UtilsService,
|
|
53
|
-
useValue: {}
|
|
54
|
-
}
|
|
55
|
-
]
|
|
56
|
-
}).compile();
|
|
57
|
-
controller = module.get(LanguageController);
|
|
58
|
-
});
|
|
59
|
-
describe('getActive', ()=>{
|
|
60
|
-
it('returns all active languages with a full-length meta block', async ()=>{
|
|
61
|
-
const languages = [
|
|
62
|
-
buildLanguage({
|
|
63
|
-
code: 'en'
|
|
64
|
-
}),
|
|
65
|
-
buildLanguage({
|
|
66
|
-
id: 'lang-bn',
|
|
67
|
-
code: 'bn'
|
|
68
|
-
})
|
|
69
|
-
];
|
|
70
|
-
mockService.getActiveLanguages.mockResolvedValue(languages);
|
|
71
|
-
const result = await controller.getActive();
|
|
72
|
-
expect(result).toEqual({
|
|
73
|
-
success: true,
|
|
74
|
-
message: 'Active languages retrieved successfully',
|
|
75
|
-
messageKey: 'language.active.success',
|
|
76
|
-
data: languages,
|
|
77
|
-
meta: {
|
|
78
|
-
total: 2,
|
|
79
|
-
page: 0,
|
|
80
|
-
pageSize: 2,
|
|
81
|
-
count: 2
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
it('returns an empty list with zeroed meta when no languages are active', async ()=>{
|
|
86
|
-
mockService.getActiveLanguages.mockResolvedValue([]);
|
|
87
|
-
const result = await controller.getActive();
|
|
88
|
-
expect(result.data).toEqual([]);
|
|
89
|
-
expect(result.meta).toEqual({
|
|
90
|
-
total: 0,
|
|
91
|
-
page: 0,
|
|
92
|
-
pageSize: 0,
|
|
93
|
-
count: 0
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
describe('getDefault', ()=>{
|
|
98
|
-
it('returns the default language', async ()=>{
|
|
99
|
-
const defaultLanguage = buildLanguage({
|
|
100
|
-
isDefault: true
|
|
101
|
-
});
|
|
102
|
-
mockService.getDefaultLanguage.mockResolvedValue(defaultLanguage);
|
|
103
|
-
const result = await controller.getDefault();
|
|
104
|
-
expect(result).toEqual({
|
|
105
|
-
success: true,
|
|
106
|
-
message: 'Default language retrieved successfully',
|
|
107
|
-
messageKey: 'language.get.default.success',
|
|
108
|
-
data: defaultLanguage
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
it('falls back to undefined data when no default language is configured', async ()=>{
|
|
112
|
-
mockService.getDefaultLanguage.mockResolvedValue(null);
|
|
113
|
-
const result = await controller.getDefault();
|
|
114
|
-
expect(result.data).toBeUndefined();
|
|
115
|
-
expect(result.success).toBe(true);
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
describe('setDefault', ()=>{
|
|
119
|
-
it('sets the given language id as default and returns it', async ()=>{
|
|
120
|
-
const updated = buildLanguage({
|
|
121
|
-
id: 'lang-bn',
|
|
122
|
-
isDefault: true
|
|
123
|
-
});
|
|
124
|
-
mockService.setAsDefault.mockResolvedValue(updated);
|
|
125
|
-
const result = await controller.setDefault({
|
|
126
|
-
id: 'lang-bn'
|
|
127
|
-
}, buildMockUser());
|
|
128
|
-
expect(mockService.setAsDefault).toHaveBeenCalledWith('lang-bn');
|
|
129
|
-
expect(result).toEqual({
|
|
130
|
-
success: true,
|
|
131
|
-
message: 'Default language updated successfully',
|
|
132
|
-
messageKey: 'language.set.default.success',
|
|
133
|
-
data: updated
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
it('returns undefined data when the id does not match any language', async ()=>{
|
|
137
|
-
mockService.setAsDefault.mockResolvedValue(null);
|
|
138
|
-
const result = await controller.setDefault({
|
|
139
|
-
id: 'unknown-id'
|
|
140
|
-
}, buildMockUser());
|
|
141
|
-
expect(result.data).toBeUndefined();
|
|
142
|
-
});
|
|
143
|
-
it('propagates errors raised by the service unchanged', async ()=>{
|
|
144
|
-
mockService.setAsDefault.mockRejectedValue(new Error('database unavailable'));
|
|
145
|
-
await expect(controller.setDefault({
|
|
146
|
-
id: 'lang-en'
|
|
147
|
-
}, buildMockUser())).rejects.toThrow('database unavailable');
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
});
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
function _define_property(obj, key, value) {
|
|
2
|
-
if (key in obj) {
|
|
3
|
-
Object.defineProperty(obj, key, {
|
|
4
|
-
value: value,
|
|
5
|
-
enumerable: true,
|
|
6
|
-
configurable: true,
|
|
7
|
-
writable: true
|
|
8
|
-
});
|
|
9
|
-
} else {
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
12
|
-
return obj;
|
|
13
|
-
}
|
|
14
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
15
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
-
}
|
|
20
|
-
function _ts_metadata(k, v) {
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
22
|
-
}
|
|
23
|
-
function _ts_param(paramIndex, decorator) {
|
|
24
|
-
return function(target, key) {
|
|
25
|
-
decorator(target, key, paramIndex);
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
import { createApiController, TRANSLATION_KEY_PERMISSIONS } from '@flusys/nestjs-shared/classes';
|
|
29
|
-
import { CurrentUser } from '@flusys/nestjs-shared/decorators';
|
|
30
|
-
import { JwtAuthGuard } from '@flusys/nestjs-shared/guards';
|
|
31
|
-
import { ILoggedUserInfo } from '@flusys/nestjs-shared/interfaces';
|
|
32
|
-
import { Controller, Inject, Post, UseGuards } from '@nestjs/common';
|
|
33
|
-
import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger';
|
|
34
|
-
import { TRANSLATION_KEY_MESSAGES } from '../config';
|
|
35
|
-
import { CreateTranslationKeyDto, TranslationKeyResponseDto, UpdateTranslationKeyDto } from '../dtos';
|
|
36
|
-
import { TranslationKeyService } from '../services';
|
|
37
|
-
export class TranslationKeyController extends createApiController(CreateTranslationKeyDto, UpdateTranslationKeyDto, TranslationKeyResponseDto, {
|
|
38
|
-
entityName: 'translation.key',
|
|
39
|
-
security: {
|
|
40
|
-
insert: {
|
|
41
|
-
level: 'permission',
|
|
42
|
-
permissions: [
|
|
43
|
-
TRANSLATION_KEY_PERMISSIONS.CREATE
|
|
44
|
-
]
|
|
45
|
-
},
|
|
46
|
-
insertMany: {
|
|
47
|
-
level: 'permission',
|
|
48
|
-
permissions: [
|
|
49
|
-
TRANSLATION_KEY_PERMISSIONS.CREATE
|
|
50
|
-
]
|
|
51
|
-
},
|
|
52
|
-
getById: {
|
|
53
|
-
level: 'permission',
|
|
54
|
-
permissions: [
|
|
55
|
-
TRANSLATION_KEY_PERMISSIONS.READ
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
getAll: {
|
|
59
|
-
level: 'permission',
|
|
60
|
-
permissions: [
|
|
61
|
-
TRANSLATION_KEY_PERMISSIONS.READ
|
|
62
|
-
]
|
|
63
|
-
},
|
|
64
|
-
update: {
|
|
65
|
-
level: 'permission',
|
|
66
|
-
permissions: [
|
|
67
|
-
TRANSLATION_KEY_PERMISSIONS.UPDATE
|
|
68
|
-
]
|
|
69
|
-
},
|
|
70
|
-
updateMany: {
|
|
71
|
-
level: 'permission',
|
|
72
|
-
permissions: [
|
|
73
|
-
TRANSLATION_KEY_PERMISSIONS.UPDATE
|
|
74
|
-
]
|
|
75
|
-
},
|
|
76
|
-
delete: {
|
|
77
|
-
level: 'permission',
|
|
78
|
-
permissions: [
|
|
79
|
-
TRANSLATION_KEY_PERMISSIONS.DELETE
|
|
80
|
-
]
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}) {
|
|
84
|
-
async getModules(_user) {
|
|
85
|
-
const data = await this.service.getModules();
|
|
86
|
-
return {
|
|
87
|
-
success: true,
|
|
88
|
-
message: 'Modules retrieved successfully',
|
|
89
|
-
messageKey: TRANSLATION_KEY_MESSAGES.MODULES_SUCCESS,
|
|
90
|
-
data
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
constructor(service){
|
|
94
|
-
super(service), _define_property(this, "service", void 0), this.service = service;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
_ts_decorate([
|
|
98
|
-
Post('get-modules'),
|
|
99
|
-
UseGuards(JwtAuthGuard),
|
|
100
|
-
ApiBearerAuth(),
|
|
101
|
-
ApiOperation({
|
|
102
|
-
summary: 'Get all distinct module names'
|
|
103
|
-
}),
|
|
104
|
-
ApiResponse({
|
|
105
|
-
status: 200,
|
|
106
|
-
type: [
|
|
107
|
-
String
|
|
108
|
-
]
|
|
109
|
-
}),
|
|
110
|
-
_ts_param(0, CurrentUser()),
|
|
111
|
-
_ts_metadata("design:type", Function),
|
|
112
|
-
_ts_metadata("design:paramtypes", [
|
|
113
|
-
typeof ILoggedUserInfo === "undefined" ? Object : ILoggedUserInfo
|
|
114
|
-
]),
|
|
115
|
-
_ts_metadata("design:returntype", Promise)
|
|
116
|
-
], TranslationKeyController.prototype, "getModules", null);
|
|
117
|
-
TranslationKeyController = _ts_decorate([
|
|
118
|
-
ApiTags('Localization - Translation Key'),
|
|
119
|
-
Controller('localization/translation-key'),
|
|
120
|
-
_ts_param(0, Inject(TranslationKeyService)),
|
|
121
|
-
_ts_metadata("design:type", Function),
|
|
122
|
-
_ts_metadata("design:paramtypes", [
|
|
123
|
-
typeof TranslationKeyService === "undefined" ? Object : TranslationKeyService
|
|
124
|
-
])
|
|
125
|
-
], TranslationKeyController);
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Test } from '@nestjs/testing';
|
|
2
|
-
import { UtilsService } from '@flusys/nestjs-shared/modules';
|
|
3
|
-
import { buildMockUser } from '@test-utils/mocks/logged-user.mock';
|
|
4
|
-
import { TranslationKeyController } from './translation-key.controller';
|
|
5
|
-
import { TranslationKeyService } from '../services';
|
|
6
|
-
describe('TranslationKeyController', ()=>{
|
|
7
|
-
let controller;
|
|
8
|
-
let mockService;
|
|
9
|
-
beforeEach(async ()=>{
|
|
10
|
-
mockService = {
|
|
11
|
-
insert: jest.fn(),
|
|
12
|
-
findById: jest.fn(),
|
|
13
|
-
getAll: jest.fn(),
|
|
14
|
-
update: jest.fn(),
|
|
15
|
-
delete: jest.fn(),
|
|
16
|
-
getModules: jest.fn(),
|
|
17
|
-
findByModule: jest.fn()
|
|
18
|
-
};
|
|
19
|
-
const module = await Test.createTestingModule({
|
|
20
|
-
controllers: [
|
|
21
|
-
TranslationKeyController
|
|
22
|
-
],
|
|
23
|
-
providers: [
|
|
24
|
-
{
|
|
25
|
-
provide: TranslationKeyService,
|
|
26
|
-
useValue: mockService
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
provide: UtilsService,
|
|
30
|
-
useValue: {}
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
}).compile();
|
|
34
|
-
controller = module.get(TranslationKeyController);
|
|
35
|
-
});
|
|
36
|
-
describe('getModules', ()=>{
|
|
37
|
-
it('returns the distinct module names from the service', async ()=>{
|
|
38
|
-
mockService.getModules.mockResolvedValue([
|
|
39
|
-
'auth',
|
|
40
|
-
'shared',
|
|
41
|
-
'storage'
|
|
42
|
-
]);
|
|
43
|
-
const result = await controller.getModules(buildMockUser());
|
|
44
|
-
expect(result).toEqual({
|
|
45
|
-
success: true,
|
|
46
|
-
message: 'Modules retrieved successfully',
|
|
47
|
-
messageKey: 'translation.key.modules.success',
|
|
48
|
-
data: [
|
|
49
|
-
'auth',
|
|
50
|
-
'shared',
|
|
51
|
-
'storage'
|
|
52
|
-
]
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
it('returns an empty array when no translation keys have been created yet', async ()=>{
|
|
56
|
-
mockService.getModules.mockResolvedValue([]);
|
|
57
|
-
const result = await controller.getModules(buildMockUser());
|
|
58
|
-
expect(result.data).toEqual([]);
|
|
59
|
-
expect(result.success).toBe(true);
|
|
60
|
-
});
|
|
61
|
-
it('propagates unexpected errors from the service', async ()=>{
|
|
62
|
-
mockService.getModules.mockRejectedValue(new Error('query failed'));
|
|
63
|
-
await expect(controller.getModules(buildMockUser())).rejects.toThrow('query failed');
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
});
|