Files
core/src/modules/option/controllers/base.option.controller.ts
2022-04-17 21:04:37 +08:00

60 lines
1.6 KiB
TypeScript

import { instanceToPlain } from 'class-transformer'
import {
BadRequestException,
Body,
Get,
Param,
Patch,
UnprocessableEntityException,
} from '@nestjs/common'
import { HTTPDecorators } from '~/common/decorator/http.decorator'
import { IConfig } from '~/modules/configs/configs.interface'
import type { ConfigsService } from '~/modules/configs/configs.service'
import { classToJsonSchema } from '~/utils/jsonschema.util'
import type { ConfigKeyDto } from '../dtos/config.dto'
import { OptionController } from '../option.decorator'
@OptionController()
export class BaseOptionController {
constructor(
private readonly configsService: ConfigsService,
private readonly configs: ConfigsService,
) {}
@Get('/')
getOption() {
return instanceToPlain(this.configs.getConfig())
}
@HTTPDecorators.Bypass
@Get('/jsonschema')
getJsonSchema() {
return classToJsonSchema(IConfig)
}
@Get('/:key')
async getOptionKey(@Param('key') key: keyof IConfig) {
if (typeof key !== 'string' && !key) {
throw new UnprocessableEntityException(
`key must be IConfigKeys, got ${key}`,
)
}
const value = await this.configs.get(key)
if (!value) {
throw new BadRequestException('key is not exists.')
}
return { data: instanceToPlain(value) }
}
@Patch('/:key')
patch(@Param() params: ConfigKeyDto, @Body() body: Record<string, any>) {
if (typeof body !== 'object') {
throw new UnprocessableEntityException('body must be object')
}
return this.configsService.patchAndValid(params.key, body)
}
}