@hedhog/admin 0.48.9 → 0.48.11
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/dist/admin.module.d.ts.map +1 -1
- package/dist/admin.module.js +3 -1
- package/dist/admin.module.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/menu/menu.controller.d.ts +3 -3
- package/dist/menu/menu.service.d.ts +3 -3
- package/dist/setting/dto/create.dto.d.ts +9 -0
- package/dist/setting/dto/create.dto.d.ts.map +1 -0
- package/dist/setting/dto/create.dto.js +40 -0
- package/dist/setting/dto/create.dto.js.map +1 -0
- package/dist/setting/dto/delete.dto.d.ts +4 -0
- package/dist/setting/dto/delete.dto.d.ts.map +1 -0
- package/dist/setting/dto/delete.dto.js +23 -0
- package/dist/setting/dto/delete.dto.js.map +1 -0
- package/dist/setting/dto/setting-user.dto.d.ts +4 -0
- package/dist/setting/dto/setting-user.dto.d.ts.map +1 -0
- package/dist/setting/dto/setting-user.dto.js +21 -0
- package/dist/setting/dto/setting-user.dto.js.map +1 -0
- package/dist/setting/dto/setting.dto.d.ts +9 -0
- package/dist/setting/dto/setting.dto.d.ts.map +1 -0
- package/dist/setting/dto/setting.dto.js +34 -0
- package/dist/setting/dto/setting.dto.js.map +1 -0
- package/dist/setting/dto/update.dto.d.ts +6 -0
- package/dist/setting/dto/update.dto.d.ts.map +1 -0
- package/dist/setting/dto/update.dto.js +9 -0
- package/dist/setting/dto/update.dto.js.map +1 -0
- package/dist/setting/setting.controller.d.ts +102 -0
- package/dist/setting/setting.controller.d.ts.map +1 -0
- package/dist/setting/setting.controller.js +160 -0
- package/dist/setting/setting.controller.js.map +1 -0
- package/dist/setting/setting.module.d.ts +3 -0
- package/dist/setting/setting.module.d.ts.map +1 -0
- package/dist/setting/setting.module.js +24 -0
- package/dist/setting/setting.module.js.map +1 -0
- package/dist/setting/setting.service.d.ts +103 -0
- package/dist/setting/setting.service.d.ts.map +1 -0
- package/dist/setting/setting.service.js +333 -0
- package/dist/setting/setting.service.js.map +1 -0
- package/hedhog.yaml +244 -0
- package/package.json +2 -1
- package/src/admin.module.ts +3 -1
- package/src/index.ts +2 -0
- package/src/setting/dto/create.dto.ts +21 -0
- package/src/setting/dto/delete.dto.ts +8 -0
- package/src/setting/dto/setting-user.dto.ts +6 -0
- package/src/setting/dto/setting.dto.ts +17 -0
- package/src/setting/dto/update.dto.ts +4 -0
- package/src/setting/setting.controller.ts +105 -0
- package/src/setting/setting.module.ts +11 -0
- package/src/setting/setting.service.ts +400 -0
@@ -0,0 +1,400 @@
|
|
1
|
+
import path = require('path');
|
2
|
+
import { itemTranslations } from '@hedhog/core';
|
3
|
+
import { PaginationDTO, PaginationService } from '@hedhog/pagination';
|
4
|
+
import { PrismaService } from '@hedhog/prisma';
|
5
|
+
import {
|
6
|
+
BadRequestException,
|
7
|
+
Inject,
|
8
|
+
Injectable,
|
9
|
+
forwardRef,
|
10
|
+
} from '@nestjs/common';
|
11
|
+
import { CreateDTO } from './dto/create.dto';
|
12
|
+
import { DeleteDTO } from './dto/delete.dto';
|
13
|
+
import { SettingDTO } from './dto/setting.dto';
|
14
|
+
import { UpdateDTO } from './dto/update.dto';
|
15
|
+
|
16
|
+
@Injectable()
|
17
|
+
export class SettingService {
|
18
|
+
constructor(
|
19
|
+
@Inject(forwardRef(() => PrismaService))
|
20
|
+
private readonly prismaService: PrismaService,
|
21
|
+
@Inject(forwardRef(() => PaginationService))
|
22
|
+
private readonly paginationService: PaginationService,
|
23
|
+
) {}
|
24
|
+
|
25
|
+
async setManySettings(data: SettingDTO) {
|
26
|
+
const transaction = [];
|
27
|
+
|
28
|
+
for (const { slug, value } of data.setting) {
|
29
|
+
transaction.push(
|
30
|
+
this.prismaService.setting.updateMany({
|
31
|
+
where: {
|
32
|
+
slug,
|
33
|
+
},
|
34
|
+
data: {
|
35
|
+
value,
|
36
|
+
},
|
37
|
+
}),
|
38
|
+
);
|
39
|
+
}
|
40
|
+
|
41
|
+
await this.prismaService.$transaction(transaction);
|
42
|
+
return { success: true };
|
43
|
+
}
|
44
|
+
|
45
|
+
async getSettingFromGroup(locale: any, paginationParams: any, slug: string) {
|
46
|
+
const fields = ['slug', 'value'];
|
47
|
+
|
48
|
+
paginationParams.pageSize = 100;
|
49
|
+
|
50
|
+
const OR: any[] = this.prismaService.createInsensitiveSearch(
|
51
|
+
fields,
|
52
|
+
paginationParams,
|
53
|
+
);
|
54
|
+
|
55
|
+
const result = await this.paginationService.paginate(
|
56
|
+
this.prismaService.setting,
|
57
|
+
paginationParams,
|
58
|
+
{
|
59
|
+
where: {
|
60
|
+
AND: {
|
61
|
+
setting_group: {
|
62
|
+
slug,
|
63
|
+
},
|
64
|
+
OR,
|
65
|
+
},
|
66
|
+
},
|
67
|
+
include: {
|
68
|
+
setting_group: {
|
69
|
+
include: {
|
70
|
+
setting_group_locale: {
|
71
|
+
where: {
|
72
|
+
locale: {
|
73
|
+
code: locale,
|
74
|
+
},
|
75
|
+
},
|
76
|
+
select: {
|
77
|
+
name: true,
|
78
|
+
description: true,
|
79
|
+
},
|
80
|
+
},
|
81
|
+
},
|
82
|
+
},
|
83
|
+
setting_locale: {
|
84
|
+
where: {
|
85
|
+
locale: {
|
86
|
+
code: locale,
|
87
|
+
},
|
88
|
+
},
|
89
|
+
select: {
|
90
|
+
name: true,
|
91
|
+
description: true,
|
92
|
+
},
|
93
|
+
},
|
94
|
+
},
|
95
|
+
},
|
96
|
+
'setting_locale',
|
97
|
+
);
|
98
|
+
|
99
|
+
result.data = result.data.map((setting: any) => {
|
100
|
+
setting.setting_group = itemTranslations(
|
101
|
+
'setting_group_locale',
|
102
|
+
setting.setting_group,
|
103
|
+
);
|
104
|
+
return setting;
|
105
|
+
});
|
106
|
+
|
107
|
+
return result;
|
108
|
+
}
|
109
|
+
|
110
|
+
async listSettingGroups(locale: string, paginationParams: PaginationDTO) {
|
111
|
+
const fields = ['slug', 'icon'];
|
112
|
+
|
113
|
+
paginationParams.pageSize = 100;
|
114
|
+
|
115
|
+
const OR: any[] = this.prismaService.createInsensitiveSearch(
|
116
|
+
fields,
|
117
|
+
paginationParams,
|
118
|
+
);
|
119
|
+
|
120
|
+
const result = await this.paginationService.paginate(
|
121
|
+
this.prismaService.setting_group,
|
122
|
+
paginationParams,
|
123
|
+
{
|
124
|
+
where: {
|
125
|
+
OR,
|
126
|
+
},
|
127
|
+
include: {
|
128
|
+
setting_group_locale: {
|
129
|
+
where: {
|
130
|
+
locale: {
|
131
|
+
code: locale,
|
132
|
+
},
|
133
|
+
},
|
134
|
+
select: {
|
135
|
+
name: true,
|
136
|
+
description: true,
|
137
|
+
},
|
138
|
+
},
|
139
|
+
},
|
140
|
+
},
|
141
|
+
'setting_group_locale',
|
142
|
+
);
|
143
|
+
|
144
|
+
return result;
|
145
|
+
}
|
146
|
+
|
147
|
+
async listSettings(locale: string, paginationParams: PaginationDTO) {
|
148
|
+
const fields = ['slug', 'value'];
|
149
|
+
|
150
|
+
const OR: any[] = this.prismaService.createInsensitiveSearch(
|
151
|
+
fields,
|
152
|
+
paginationParams,
|
153
|
+
);
|
154
|
+
|
155
|
+
const result = await this.paginationService.paginate(
|
156
|
+
this.prismaService.setting,
|
157
|
+
paginationParams,
|
158
|
+
{
|
159
|
+
where: {
|
160
|
+
OR,
|
161
|
+
},
|
162
|
+
include: {
|
163
|
+
setting_group: {
|
164
|
+
include: {
|
165
|
+
setting_group_locale: {
|
166
|
+
where: {
|
167
|
+
locale: {
|
168
|
+
code: locale,
|
169
|
+
},
|
170
|
+
},
|
171
|
+
select: {
|
172
|
+
name: true,
|
173
|
+
description: true,
|
174
|
+
},
|
175
|
+
},
|
176
|
+
},
|
177
|
+
},
|
178
|
+
setting_locale: {
|
179
|
+
where: {
|
180
|
+
locale: {
|
181
|
+
code: locale,
|
182
|
+
},
|
183
|
+
},
|
184
|
+
select: {
|
185
|
+
name: true,
|
186
|
+
description: true,
|
187
|
+
},
|
188
|
+
},
|
189
|
+
},
|
190
|
+
},
|
191
|
+
'setting_locale',
|
192
|
+
);
|
193
|
+
|
194
|
+
result.data = result.data.map((setting: any) => {
|
195
|
+
setting.setting_group = itemTranslations(
|
196
|
+
'setting_group_locale',
|
197
|
+
setting.setting_group,
|
198
|
+
);
|
199
|
+
return setting;
|
200
|
+
});
|
201
|
+
|
202
|
+
return result;
|
203
|
+
}
|
204
|
+
|
205
|
+
async get(settingId: number) {
|
206
|
+
return this.prismaService.setting.findUnique({
|
207
|
+
where: { id: settingId },
|
208
|
+
});
|
209
|
+
}
|
210
|
+
|
211
|
+
async create(data: CreateDTO) {
|
212
|
+
return this.prismaService.setting.create({
|
213
|
+
data: {
|
214
|
+
slug: data.slug,
|
215
|
+
type: data.type as any,
|
216
|
+
value: data.value,
|
217
|
+
user_override: data.user_override,
|
218
|
+
setting_group: {
|
219
|
+
connect: {
|
220
|
+
id: data.group_id,
|
221
|
+
},
|
222
|
+
},
|
223
|
+
},
|
224
|
+
});
|
225
|
+
}
|
226
|
+
|
227
|
+
async update({ id, data }: { id: number; data: UpdateDTO }) {
|
228
|
+
return this.prismaService.setting.update({
|
229
|
+
where: { id },
|
230
|
+
data: {
|
231
|
+
slug: data.slug,
|
232
|
+
type: data.type as any,
|
233
|
+
value: data.value,
|
234
|
+
user_override: data.user_override,
|
235
|
+
setting_group: {
|
236
|
+
connect: {
|
237
|
+
id: data.group_id,
|
238
|
+
},
|
239
|
+
},
|
240
|
+
},
|
241
|
+
});
|
242
|
+
}
|
243
|
+
|
244
|
+
async updateFromSlug(slug: string, data: UpdateDTO) {
|
245
|
+
const { id } = await this.prismaService.setting.findFirst({
|
246
|
+
where: {
|
247
|
+
slug,
|
248
|
+
},
|
249
|
+
});
|
250
|
+
|
251
|
+
if (!id) {
|
252
|
+
throw new BadRequestException(`Setting with slug ${slug} not found.`);
|
253
|
+
}
|
254
|
+
|
255
|
+
return this.update({
|
256
|
+
id,
|
257
|
+
data,
|
258
|
+
});
|
259
|
+
}
|
260
|
+
|
261
|
+
async delete({ ids }: DeleteDTO) {
|
262
|
+
if (ids == undefined || ids == null) {
|
263
|
+
throw new BadRequestException(
|
264
|
+
`You must select at least one setting to delete.`,
|
265
|
+
);
|
266
|
+
}
|
267
|
+
|
268
|
+
return this.prismaService.setting.deleteMany({
|
269
|
+
where: {
|
270
|
+
id: {
|
271
|
+
in: ids,
|
272
|
+
},
|
273
|
+
},
|
274
|
+
});
|
275
|
+
}
|
276
|
+
|
277
|
+
async setSettingUserValue(user_id: number, slug: string, value: string) {
|
278
|
+
const user = await this.prismaService.user.findUnique({
|
279
|
+
where: {
|
280
|
+
id: user_id,
|
281
|
+
},
|
282
|
+
select: {
|
283
|
+
id: true,
|
284
|
+
},
|
285
|
+
});
|
286
|
+
|
287
|
+
if (!user) {
|
288
|
+
throw new BadRequestException(`User with id ${user_id} not found.`);
|
289
|
+
}
|
290
|
+
|
291
|
+
const setting = await this.prismaService.setting.findFirst({
|
292
|
+
where: {
|
293
|
+
slug,
|
294
|
+
user_override: true,
|
295
|
+
},
|
296
|
+
});
|
297
|
+
|
298
|
+
if (!setting) {
|
299
|
+
throw new BadRequestException(
|
300
|
+
`Setting with slug ${slug} not found or user can not override.`,
|
301
|
+
);
|
302
|
+
}
|
303
|
+
|
304
|
+
return await this.prismaService.setting_user.upsert({
|
305
|
+
where: {
|
306
|
+
user_id_setting_id: {
|
307
|
+
setting_id: setting.id,
|
308
|
+
user_id: user.id,
|
309
|
+
},
|
310
|
+
},
|
311
|
+
create: {
|
312
|
+
setting_id: setting.id,
|
313
|
+
value,
|
314
|
+
user_id: user.id,
|
315
|
+
},
|
316
|
+
update: {
|
317
|
+
value,
|
318
|
+
},
|
319
|
+
select: {
|
320
|
+
setting_id: true,
|
321
|
+
user_id: true,
|
322
|
+
value: true,
|
323
|
+
},
|
324
|
+
});
|
325
|
+
}
|
326
|
+
|
327
|
+
async getSettingValues(slug: string | string[]) {
|
328
|
+
slug = Array.isArray(slug) ? slug : [slug];
|
329
|
+
|
330
|
+
let setting = await this.prismaService.setting.findMany({
|
331
|
+
where: {
|
332
|
+
slug: {
|
333
|
+
in: slug,
|
334
|
+
},
|
335
|
+
},
|
336
|
+
select: {
|
337
|
+
id: true,
|
338
|
+
value: true,
|
339
|
+
slug: true,
|
340
|
+
type: true,
|
341
|
+
user_override: true,
|
342
|
+
},
|
343
|
+
});
|
344
|
+
|
345
|
+
const slugUserOverride = setting.filter((setting) => setting.user_override);
|
346
|
+
|
347
|
+
const settingUser = await this.prismaService.setting_user.findMany({
|
348
|
+
where: {
|
349
|
+
setting_id: {
|
350
|
+
in: slugUserOverride.map((setting) => setting.id),
|
351
|
+
},
|
352
|
+
},
|
353
|
+
select: {
|
354
|
+
value: true,
|
355
|
+
setting_id: true,
|
356
|
+
},
|
357
|
+
});
|
358
|
+
|
359
|
+
const data: Record<string, any> = {};
|
360
|
+
|
361
|
+
setting.forEach((setting) => {
|
362
|
+
switch (setting.type) {
|
363
|
+
case 'boolean':
|
364
|
+
data[setting.slug] = setting.value === 'true';
|
365
|
+
break;
|
366
|
+
case 'number':
|
367
|
+
data[setting.slug] = Number(setting.value);
|
368
|
+
break;
|
369
|
+
case 'array':
|
370
|
+
case 'json':
|
371
|
+
data[setting.slug] = JSON.parse(setting.value);
|
372
|
+
break;
|
373
|
+
default:
|
374
|
+
data[setting.slug] = setting.value;
|
375
|
+
}
|
376
|
+
});
|
377
|
+
|
378
|
+
settingUser.forEach((setting) => {
|
379
|
+
data[slugUserOverride.find((s) => s.id === setting.setting_id).slug] =
|
380
|
+
setting.value;
|
381
|
+
});
|
382
|
+
|
383
|
+
return data;
|
384
|
+
}
|
385
|
+
|
386
|
+
async getUserSettings(user_id: number) {
|
387
|
+
return this.prismaService.setting_user.findMany({
|
388
|
+
where: {
|
389
|
+
user_id,
|
390
|
+
},
|
391
|
+
include: {
|
392
|
+
setting: {
|
393
|
+
select: {
|
394
|
+
slug: true,
|
395
|
+
},
|
396
|
+
},
|
397
|
+
},
|
398
|
+
});
|
399
|
+
}
|
400
|
+
}
|