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

80 lines
2.0 KiB
TypeScript

import {
Body,
Controller,
Get,
Post,
Query,
Request,
Response,
} from '@nestjs/common'
import { HTTPDecorators } from '~/common/decorator/http.decorator'
import type { BusinessEvents } from '~/constants/business-event.constant'
import { EventScope } from '~/constants/business-event.constant'
import type { EventManagerService } from '~/processors/helper/helper.event.service'
import type { PagerDto } from '~/shared/dto/pager.dto'
import { createMockedContextResponse } from '../serverless/mock-response.util'
import type { ServerlessService } from '../serverless/serverless.service'
import { SnippetModel, SnippetType } from '../snippet/snippet.model'
@Controller('debug')
export class DebugController {
constructor(
private readonly serverlessService: ServerlessService,
private readonly eventManager: EventManagerService,
) {}
@Get('qs')
async qs(@Query() query: PagerDto) {
return query
}
@Post('/events')
async sendEvent(
@Query('type') type: 'web' | 'admin' | 'all',
@Query('event') event: BusinessEvents,
@Body() payload: any,
) {
switch (type) {
case 'web':
this.eventManager.broadcast(event, payload, {
scope: EventScope.TO_SYSTEM_VISITOR,
})
break
case 'admin':
this.eventManager.broadcast(event, payload, {
scope: EventScope.TO_SYSTEM_ADMIN,
})
break
case 'all':
this.eventManager.broadcast(event, payload, { scope: EventScope.ALL })
break
}
}
@Post('/function')
@HTTPDecorators.Bypass
async runFunction(
@Body('function') functionString: string,
@Request() req,
@Response() res,
) {
const model = new SnippetModel()
model.name = 'debug'
model.raw = functionString
model.private = false
model.type = SnippetType.Function
const result =
await this.serverlessService.injectContextIntoServerlessFunctionAndCall(
model,
{ req, res: createMockedContextResponse(res) },
)
if (!res.sent) {
res.send(result)
}
}
}