mirror of
https://github.com/hexastack/hexabot
synced 2025-05-08 14:54:45 +00:00
fix: settings typecheck errors
This commit is contained in:
parent
e489bc57a7
commit
7a8a8fa151
@ -23,6 +23,9 @@ import { NlpValueSeeder } from './nlp/seeds/nlp-value.seed';
|
|||||||
import { nlpValueModels } from './nlp/seeds/nlp-value.seed-model';
|
import { nlpValueModels } from './nlp/seeds/nlp-value.seed-model';
|
||||||
import { SettingSeeder } from './setting/seeds/setting.seed';
|
import { SettingSeeder } from './setting/seeds/setting.seed';
|
||||||
import { DEFAULT_SETTINGS } from './setting/seeds/setting.seed-model';
|
import { DEFAULT_SETTINGS } from './setting/seeds/setting.seed-model';
|
||||||
|
import { PermissionCreateDto } from './user/dto/permission.dto';
|
||||||
|
import { Model } from './user/schemas/model.schema';
|
||||||
|
import { Role } from './user/schemas/role.schema';
|
||||||
import { ModelSeeder } from './user/seeds/model.seed';
|
import { ModelSeeder } from './user/seeds/model.seed';
|
||||||
import { modelModels } from './user/seeds/model.seed-model';
|
import { modelModels } from './user/seeds/model.seed-model';
|
||||||
import { PermissionSeeder } from './user/seeds/permission.seed';
|
import { PermissionSeeder } from './user/seeds/permission.seed';
|
||||||
@ -69,19 +72,19 @@ export async function seedDatabase(app: INestApplicationContext) {
|
|||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
const models = await modelSeeder.findAll();
|
const models = (await modelSeeder.findAll()) as Model[];
|
||||||
const roles = await roleSeeder.findAll();
|
const roles = (await roleSeeder.findAll()) as Role[];
|
||||||
const adminRole = roles.find(({ name }) => name === 'admin');
|
const adminRole = roles.find(({ name }) => name === 'admin') as Role;
|
||||||
const managerRole = roles.find(({ name }) => name === 'manager');
|
const managerRole = roles.find(({ name }) => name === 'manager') as Role;
|
||||||
const managerModels = models.filter(
|
const managerModels = models.filter(
|
||||||
(model) => !['Role', 'User', 'Permission'].includes(model.name),
|
(model) => !['Role', 'User', 'Permission'].includes(model.name),
|
||||||
);
|
);
|
||||||
const roleModelsCombinations: [string, string][] = [
|
const roleModelsCombinations = [
|
||||||
...models.map((model) => [model.id, adminRole.id]),
|
...models.map((model) => [model.id, adminRole.id]),
|
||||||
...managerModels.map((model) => [model.id, managerRole.id]),
|
...managerModels.map((model) => [model.id, managerRole.id]),
|
||||||
] as [string, string][];
|
] as [string, string][];
|
||||||
|
|
||||||
const permissionSeeds = roleModelsCombinations.reduce(
|
const permissionSeeds = roleModelsCombinations.reduce<PermissionCreateDto[]>(
|
||||||
(acc, [modelId, roleId]) => {
|
(acc, [modelId, roleId]) => {
|
||||||
return acc.concat(permissionModels(modelId, roleId));
|
return acc.concat(permissionModels(modelId, roleId));
|
||||||
},
|
},
|
||||||
|
@ -23,7 +23,7 @@ import {
|
|||||||
} from '@/utils/test/test';
|
} from '@/utils/test/test';
|
||||||
|
|
||||||
import { SettingRepository } from '../repositories/setting.repository';
|
import { SettingRepository } from '../repositories/setting.repository';
|
||||||
import { SettingModel } from '../schemas/setting.schema';
|
import { Setting, SettingModel } from '../schemas/setting.schema';
|
||||||
import { SettingSeeder } from '../seeds/setting.seed';
|
import { SettingSeeder } from '../seeds/setting.seed';
|
||||||
import { SettingService } from '../services/setting.service';
|
import { SettingService } from '../services/setting.service';
|
||||||
|
|
||||||
@ -100,8 +100,9 @@ describe('SettingController', () => {
|
|||||||
const payload = {
|
const payload = {
|
||||||
value: 'updated setting value',
|
value: 'updated setting value',
|
||||||
};
|
};
|
||||||
const id = (await settingService.findOne({ value: 'admin@example.com' }))
|
const { id } = (await settingService.findOne({
|
||||||
.id;
|
value: 'admin@example.com',
|
||||||
|
})) as Setting;
|
||||||
const result = await settingController.updateOne(id, payload);
|
const result = await settingController.updateOne(id, payload);
|
||||||
|
|
||||||
expect(settingService.updateOne).toHaveBeenCalledWith(id, payload);
|
expect(settingService.updateOne).toHaveBeenCalledWith(id, payload);
|
||||||
|
@ -49,10 +49,15 @@ export class SettingRepository extends BaseRepository<Setting> {
|
|||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
if (!Array.isArray(updates)) {
|
if (!Array.isArray(updates)) {
|
||||||
const payload = updates.$set;
|
const payload = updates.$set;
|
||||||
if (typeof payload.value !== 'undefined') {
|
if (payload && 'value' in payload) {
|
||||||
const { type } =
|
const hasType = 'type' in payload;
|
||||||
'type' in payload ? payload : await this.findOne(criteria);
|
if (hasType) {
|
||||||
this.validateSettingValue(type, payload.value);
|
this.validateSettingValue(payload.type, payload.value);
|
||||||
|
} else {
|
||||||
|
const setting = await this.findOne(criteria);
|
||||||
|
if (setting && 'type' in setting)
|
||||||
|
this.validateSettingValue(setting.type, payload.value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ export interface NumberSetting extends Setting {
|
|||||||
type: SettingType.number;
|
type: SettingType.number;
|
||||||
value: number;
|
value: number;
|
||||||
options: never;
|
options: never;
|
||||||
config?: {
|
config: {
|
||||||
min: number;
|
min: number;
|
||||||
max: number;
|
max: number;
|
||||||
step: number;
|
step: number;
|
||||||
|
@ -35,8 +35,8 @@ describe('SettingService', () => {
|
|||||||
const commonAttributes = {
|
const commonAttributes = {
|
||||||
type: SettingType.text,
|
type: SettingType.text,
|
||||||
id: '',
|
id: '',
|
||||||
createdAt: undefined,
|
createdAt: new Date(),
|
||||||
updatedAt: undefined,
|
updatedAt: new Date(),
|
||||||
};
|
};
|
||||||
|
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
|
@ -414,10 +414,24 @@ export abstract class BaseRepository<
|
|||||||
filters: TFilterQuery<T>,
|
filters: TFilterQuery<T>,
|
||||||
{ skip, limit, sort }: PageQueryDto<T>,
|
{ skip, limit, sort }: PageQueryDto<T>,
|
||||||
): Query<T[], T, object, T, 'find', object> {
|
): Query<T[], T, object, T, 'find', object> {
|
||||||
return this.findQuery(filters)
|
if (skip && limit) {
|
||||||
.skip(skip)
|
return this.findQuery(filters)
|
||||||
.limit(limit)
|
.skip(skip)
|
||||||
.sort([sort] as [string, SortOrder][]);
|
.limit(limit)
|
||||||
|
.sort([sort] as [string, SortOrder][]);
|
||||||
|
}
|
||||||
|
if (skip) {
|
||||||
|
return this.findQuery(filters)
|
||||||
|
.skip(skip)
|
||||||
|
.sort([sort] as [string, SortOrder][]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (limit) {
|
||||||
|
return this.findQuery(filters)
|
||||||
|
.limit(limit)
|
||||||
|
.sort([sort] as [string, SortOrder][]);
|
||||||
|
}
|
||||||
|
return this.findQuery(filters).sort([sort] as [string, SortOrder][]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,5 +18,5 @@ export type QuerySortDto<T> = [
|
|||||||
export type PageQueryDto<T> = {
|
export type PageQueryDto<T> = {
|
||||||
skip: number | undefined;
|
skip: number | undefined;
|
||||||
limit: number | undefined;
|
limit: number | undefined;
|
||||||
sort: QuerySortDto<T>;
|
sort?: QuerySortDto<T>;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user