refactory: global prefix routes (#583)
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
import {
|
||||
BadRequestException,
|
||||
Controller,
|
||||
Get,
|
||||
HttpCode,
|
||||
Post,
|
||||
@@ -8,6 +7,7 @@ import {
|
||||
} from '@nestjs/common'
|
||||
import { ApiTags } from '@nestjs/swagger'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { InjectModel } from '~/transformers/model.transformer'
|
||||
|
||||
import PKG from '../package.json'
|
||||
@@ -21,7 +21,7 @@ import { OptionModel } from './modules/configs/configs.model'
|
||||
import { CacheService } from './processors/redis/cache.service'
|
||||
import { getRedisKey } from './utils/redis.util'
|
||||
|
||||
@Controller()
|
||||
@ApiController()
|
||||
@ApiTags('Root')
|
||||
export class AppController {
|
||||
constructor(
|
||||
|
||||
@@ -35,6 +35,7 @@ import { PostModule } from './modules/post/post.module'
|
||||
import { ProjectModule } from './modules/project/project.module'
|
||||
import { PTYModule } from './modules/pty/pty.module'
|
||||
import { RecentlyModule } from './modules/recently/recently.module'
|
||||
import { RenderEjsModule } from './modules/render/render.module'
|
||||
import { SayModule } from './modules/say/say.module'
|
||||
import { SearchModule } from './modules/search/search.module'
|
||||
import { ServerlessModule } from './modules/serverless/serverless.module'
|
||||
@@ -86,6 +87,7 @@ import { RedisModule } from './processors/redis/redis.module'
|
||||
UserModule,
|
||||
|
||||
PageProxyModule,
|
||||
RenderEjsModule,
|
||||
|
||||
GatewayModule,
|
||||
HelperModule,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import cluster from 'cluster'
|
||||
import { performance } from 'perf_hooks'
|
||||
|
||||
import { LogLevel, Logger, RequestMethod, ValidationPipe } from '@nestjs/common'
|
||||
import { LogLevel, Logger, ValidationPipe } from '@nestjs/common'
|
||||
import { NestFactory } from '@nestjs/core'
|
||||
import { NestFastifyApplication } from '@nestjs/platform-fastify'
|
||||
|
||||
@@ -47,14 +47,6 @@ export async function bootstrap() {
|
||||
: undefined,
|
||||
)
|
||||
|
||||
app.setGlobalPrefix(isDev ? '' : `api/v${API_VERSION}`, {
|
||||
exclude: [
|
||||
{ path: '/qaqdmin', method: RequestMethod.GET },
|
||||
{ path: '/proxy/qaqdmin', method: RequestMethod.GET },
|
||||
{ path: '/proxy/*', method: RequestMethod.GET },
|
||||
],
|
||||
})
|
||||
|
||||
if (isDev) {
|
||||
app.useGlobalInterceptors(new LoggingInterceptor())
|
||||
}
|
||||
|
||||
34
src/common/decorator/api-controller.decorator.ts
Normal file
34
src/common/decorator/api-controller.decorator.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { Controller, ControllerOptions } from '@nestjs/common'
|
||||
|
||||
import { API_VERSION } from '~/app.config'
|
||||
|
||||
export const apiRoutePrefix = isDev ? '' : `/api/v${API_VERSION}`
|
||||
export const ApiController: (
|
||||
optionOrString?: string | string[] | undefined | ControllerOptions,
|
||||
) => ReturnType<typeof Controller> = (...rest) => {
|
||||
const [controller, ...args] = rest
|
||||
if (!controller) {
|
||||
return Controller(apiRoutePrefix)
|
||||
}
|
||||
|
||||
const transformPath = (path: string) =>
|
||||
`${apiRoutePrefix}/${path.replace(/\//, '')}`
|
||||
|
||||
if (typeof controller === 'string') {
|
||||
return Controller(transformPath(controller), ...args)
|
||||
} else if (Array.isArray(controller)) {
|
||||
return Controller(
|
||||
controller.map((path) => transformPath(path)),
|
||||
...args,
|
||||
)
|
||||
} else {
|
||||
const path = controller.path || ''
|
||||
|
||||
return Controller(
|
||||
Array.isArray(path)
|
||||
? path.map((i) => transformPath(i))
|
||||
: transformPath(path),
|
||||
...args,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,10 @@ export const TEMP_DIR = isDev ? join(cwd, './tmp') : '/tmp/mx-space'
|
||||
|
||||
export const DATA_DIR = isDev ? join(cwd, './tmp') : join(HOME, '.mx-space')
|
||||
|
||||
export const THEME_DIR = isDev
|
||||
? join(cwd, './tmp/theme')
|
||||
: join(DATA_DIR, 'theme')
|
||||
|
||||
export const USER_ASSET_DIR = join(DATA_DIR, 'assets')
|
||||
export const LOG_DIR = join(DATA_DIR, 'log')
|
||||
|
||||
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
LOG_DIR,
|
||||
STATIC_FILE_DIR,
|
||||
TEMP_DIR,
|
||||
THEME_DIR,
|
||||
USER_ASSET_DIR,
|
||||
} from '~/constants/path.constant'
|
||||
|
||||
@@ -33,9 +34,10 @@ function mkdirs() {
|
||||
Logger.log(chalk.blue(`日志目录已经建好: ${LOG_DIR}`))
|
||||
mkdirSync(USER_ASSET_DIR, { recursive: true })
|
||||
Logger.log(chalk.blue(`资源目录已经建好: ${USER_ASSET_DIR}`))
|
||||
|
||||
mkdirSync(STATIC_FILE_DIR, { recursive: true })
|
||||
Logger.log(chalk.blue(`文件存放目录已经建好: ${STATIC_FILE_DIR}`))
|
||||
mkdirSync(THEME_DIR, { recursive: true })
|
||||
Logger.log(chalk.blue(`主题目录已经建好: ${THEME_DIR}`))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import { omit } from 'lodash'
|
||||
|
||||
import { CacheKey, CacheTTL, Controller, Get, Query } from '@nestjs/common'
|
||||
import { CacheKey, CacheTTL, Get, Query } from '@nestjs/common'
|
||||
import { ApiProperty } from '@nestjs/swagger'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
import { IsMaster } from '~/common/decorator/role.decorator'
|
||||
@@ -13,7 +14,7 @@ import { ConfigsService } from '../configs/configs.service'
|
||||
import { TimelineQueryDto, TopQueryDto } from './aggregate.dto'
|
||||
import { AggregateService } from './aggregate.service'
|
||||
|
||||
@Controller('aggregate')
|
||||
@ApiController('aggregate')
|
||||
@ApiName
|
||||
export class AggregateController {
|
||||
constructor(
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
import dayjs from 'dayjs'
|
||||
|
||||
import { Controller, Delete, Get, HttpCode, Query } from '@nestjs/common'
|
||||
import { Delete, Get, HttpCode, Query } from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { Paginator } from '~/common/decorator/http.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
@@ -14,7 +15,7 @@ import { getTodayEarly, getWeekStart } from '~/utils/time.util'
|
||||
import { AnalyzeDto } from './analyze.dto'
|
||||
import { AnalyzeService } from './analyze.service'
|
||||
|
||||
@Controller({ path: 'analyze' })
|
||||
@ApiController({ path: 'analyze' })
|
||||
@ApiName
|
||||
@Auth()
|
||||
export class AnalyzeController {
|
||||
|
||||
@@ -9,7 +9,6 @@ import {
|
||||
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
NotFoundException,
|
||||
@@ -19,6 +18,7 @@ import {
|
||||
import { EventEmitter2 } from '@nestjs/event-emitter'
|
||||
import { ApiBearerAuth, ApiOperation } from '@nestjs/swagger'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
import { IsMaster as Master } from '~/common/decorator/role.decorator'
|
||||
@@ -37,8 +37,7 @@ export class TokenDto {
|
||||
@IsNotEmpty()
|
||||
name: string
|
||||
}
|
||||
|
||||
@Controller({
|
||||
@ApiController({
|
||||
path: 'auth',
|
||||
})
|
||||
@ApiName
|
||||
|
||||
@@ -3,7 +3,6 @@ import { Readable } from 'stream'
|
||||
|
||||
import {
|
||||
BadRequestException,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
Header,
|
||||
@@ -16,6 +15,7 @@ import {
|
||||
} from '@nestjs/common'
|
||||
import { ApiProperty, ApiResponseProperty } from '@nestjs/swagger'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { BanInDemo } from '~/common/decorator/demo.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
@@ -25,7 +25,7 @@ import { getMediumDateTime } from '~/utils'
|
||||
|
||||
import { BackupService } from './backup.service'
|
||||
|
||||
@Controller({ path: 'backups' })
|
||||
@ApiController({ path: 'backups' })
|
||||
@ApiName
|
||||
@Auth()
|
||||
@BanInDemo
|
||||
|
||||
@@ -3,7 +3,6 @@ import { isValidObjectId } from 'mongoose'
|
||||
import {
|
||||
BadRequestException,
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
HttpCode,
|
||||
@@ -17,6 +16,7 @@ import {
|
||||
} from '@nestjs/common'
|
||||
import { ApiQuery } from '@nestjs/swagger'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
@@ -36,7 +36,7 @@ import {
|
||||
} from './category.model'
|
||||
import { CategoryService } from './category.service'
|
||||
|
||||
@Controller({ path: 'categories' })
|
||||
@ApiController({ path: 'categories' })
|
||||
@ApiName
|
||||
export class CategoryController {
|
||||
constructor(
|
||||
|
||||
@@ -2,7 +2,6 @@ import { isUndefined } from 'lodash'
|
||||
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
ForbiddenException,
|
||||
Get,
|
||||
@@ -16,6 +15,7 @@ import {
|
||||
import { ApiOperation, ApiParam } from '@nestjs/swagger'
|
||||
import { DocumentType } from '@typegoose/typegoose'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { CurrentUser } from '~/common/decorator/current-user.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
@@ -43,7 +43,7 @@ import { CommentService } from './comment.service'
|
||||
|
||||
const idempotenceMessage = '哦吼,这句话你已经说过啦'
|
||||
|
||||
@Controller({ path: 'comments' })
|
||||
@ApiController({ path: 'comments' })
|
||||
@UseInterceptors(CommentFilterEmailInterceptor)
|
||||
@ApiName
|
||||
export class CommentController {
|
||||
|
||||
@@ -1,12 +1,6 @@
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Post,
|
||||
Query,
|
||||
Request,
|
||||
Response,
|
||||
} from '@nestjs/common'
|
||||
import { Body, Post, Query, Request, Response } from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
import { BusinessEvents, EventScope } from '~/constants/business-event.constant'
|
||||
@@ -17,7 +11,7 @@ import { ServerlessService } from '../serverless/serverless.service'
|
||||
import { SnippetModel, SnippetType } from '../snippet/snippet.model'
|
||||
|
||||
@ApiName
|
||||
@Controller('debug')
|
||||
@ApiController('debug')
|
||||
export class DebugController {
|
||||
constructor(
|
||||
private readonly serverlessService: ServerlessService,
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import { uniq } from 'lodash'
|
||||
import xss from 'xss'
|
||||
|
||||
import { CacheKey, CacheTTL, Controller, Get, Header } from '@nestjs/common'
|
||||
|
||||
import { apiRoutePrefix } from '~/common/decorator/api-controller.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
import { CacheKeys } from '~/constants/cache.constant'
|
||||
@@ -10,7 +12,7 @@ import { AggregateService } from '../aggregate/aggregate.service'
|
||||
import { ConfigsService } from '../configs/configs.service'
|
||||
import { MarkdownService } from '../markdown/markdown.service'
|
||||
|
||||
@Controller('feed')
|
||||
@Controller()
|
||||
@ApiName
|
||||
export class FeedController {
|
||||
constructor(
|
||||
@@ -19,7 +21,8 @@ export class FeedController {
|
||||
private readonly markdownService: MarkdownService,
|
||||
) {}
|
||||
|
||||
@Get('/')
|
||||
// TODO drop 兼容老版本
|
||||
@Get(uniq(['/feed', `${apiRoutePrefix}/feed`, '/atom.xml']))
|
||||
@CacheKey(CacheKeys.RSSXmlCatch)
|
||||
@CacheTTL(3600)
|
||||
@HTTPDecorators.Bypass
|
||||
|
||||
@@ -2,18 +2,10 @@ import { FastifyReply, FastifyRequest } from 'fastify'
|
||||
import { lookup } from 'mime-types'
|
||||
import { customAlphabet } from 'nanoid/async'
|
||||
|
||||
import {
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
Param,
|
||||
Post,
|
||||
Query,
|
||||
Req,
|
||||
Res,
|
||||
} from '@nestjs/common'
|
||||
import { Delete, Get, Param, Post, Query, Req, Res } from '@nestjs/common'
|
||||
import { Throttle } from '@nestjs/throttler'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
@@ -26,7 +18,7 @@ import { FileQueryDto, FileUploadDto } from './file.dto'
|
||||
import { FileService } from './file.service'
|
||||
|
||||
@ApiName
|
||||
@Controller(['objects', 'files'])
|
||||
@ApiController(['objects', 'files'])
|
||||
export class FileController {
|
||||
constructor(
|
||||
private readonly service: FileService,
|
||||
|
||||
@@ -5,7 +5,6 @@ import { Readable } from 'stream'
|
||||
|
||||
import {
|
||||
BadRequestException,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
Param,
|
||||
@@ -17,6 +16,7 @@ import {
|
||||
import { Reflector } from '@nestjs/core'
|
||||
import { SchedulerRegistry } from '@nestjs/schedule'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { BanInDemo } from '~/common/decorator/demo.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
@@ -31,7 +31,7 @@ import { formatByteSize } from '~/utils'
|
||||
|
||||
import { LogQueryDto, LogTypeDto } from './health.dto'
|
||||
|
||||
@Controller({
|
||||
@ApiController({
|
||||
path: 'health',
|
||||
})
|
||||
@Auth()
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import {
|
||||
BadRequestException,
|
||||
Body,
|
||||
Controller,
|
||||
ForbiddenException,
|
||||
Get,
|
||||
Param,
|
||||
@@ -10,13 +9,14 @@ import {
|
||||
UnprocessableEntityException,
|
||||
} from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
|
||||
import { ConfigsService } from '../configs/configs.service'
|
||||
import { ConfigKeyDto } from '../option/dtos/config.dto'
|
||||
import { InitService } from './init.service'
|
||||
|
||||
@Controller({
|
||||
@ApiController({
|
||||
path: '/init',
|
||||
scope: Scope.REQUEST,
|
||||
})
|
||||
|
||||
@@ -2,7 +2,6 @@ import mongoose from 'mongoose'
|
||||
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
ForbiddenException,
|
||||
Get,
|
||||
Param,
|
||||
@@ -11,6 +10,7 @@ import {
|
||||
Query,
|
||||
} from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HTTPDecorators, Paginator } from '~/common/decorator/http.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
@@ -26,7 +26,7 @@ import { LinkModel, LinkState } from './link.model'
|
||||
import { LinkService } from './link.service'
|
||||
|
||||
const paths = ['links', 'friends']
|
||||
@Controller(paths)
|
||||
@ApiController(paths)
|
||||
@ApiName
|
||||
export class LinkControllerCrud extends BaseCrudFactory({
|
||||
model: LinkModel,
|
||||
@@ -57,8 +57,7 @@ export class LinkControllerCrud extends BaseCrudFactory({
|
||||
return await this._model.find(condition).sort({ created: -1 }).lean()
|
||||
}
|
||||
}
|
||||
|
||||
@Controller(paths)
|
||||
@ApiController(paths)
|
||||
@ApiName
|
||||
export class LinkController {
|
||||
constructor(private readonly linkService: LinkService) {}
|
||||
|
||||
@@ -12,7 +12,6 @@ import xss from 'xss'
|
||||
import {
|
||||
Body,
|
||||
CacheTTL,
|
||||
Controller,
|
||||
ForbiddenException,
|
||||
Get,
|
||||
Header,
|
||||
@@ -22,6 +21,7 @@ import {
|
||||
} from '@nestjs/common'
|
||||
import { ApiProperty } from '@nestjs/swagger'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HttpCache } from '~/common/decorator/cache.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
@@ -44,7 +44,7 @@ import {
|
||||
import { MarkdownYAMLProperty } from './markdown.interface'
|
||||
import { MarkdownService } from './markdown.service'
|
||||
|
||||
@Controller('markdown')
|
||||
@ApiController('markdown')
|
||||
@ApiName
|
||||
export class MarkdownController {
|
||||
constructor(
|
||||
|
||||
@@ -3,7 +3,6 @@ import { FilterQuery } from 'mongoose'
|
||||
import {
|
||||
BadRequestException,
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
ForbiddenException,
|
||||
Get,
|
||||
@@ -15,6 +14,7 @@ import {
|
||||
} from '@nestjs/common'
|
||||
import { ApiOperation } from '@nestjs/swagger'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HTTPDecorators, Paginator } from '~/common/decorator/http.decorator'
|
||||
import { IpLocation, IpRecord } from '~/common/decorator/ip.decorator'
|
||||
@@ -41,7 +41,7 @@ import { NoteModel, PartialNoteModel } from './note.model'
|
||||
import { NoteService } from './note.service'
|
||||
|
||||
@ApiName
|
||||
@Controller({ path: 'notes' })
|
||||
@ApiController({ path: 'notes' })
|
||||
export class NoteController {
|
||||
constructor(
|
||||
private readonly noteService: NoteService,
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
import { Controller, applyDecorators } from '@nestjs/common'
|
||||
import { applyDecorators } from '@nestjs/common'
|
||||
import { ApiTags } from '@nestjs/swagger'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
|
||||
export function OptionController(name?: string, postfixRoute?: string) {
|
||||
const routes = ['options', 'config', 'setting', 'configs', 'option']
|
||||
const routes = ['options', 'config']
|
||||
return applyDecorators(
|
||||
Auth(),
|
||||
Controller(
|
||||
postfixRoute ? routes.map((route) => `${route}/${postfixRoute}`) : routes,
|
||||
ApiController(
|
||||
postfixRoute
|
||||
? routes.map((route) => `/${route}/${postfixRoute}`)
|
||||
: routes,
|
||||
),
|
||||
ApiTags(`${name ? `${name} ` : ''}Option Routes`),
|
||||
)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
Param,
|
||||
@@ -11,6 +10,7 @@ import {
|
||||
UnprocessableEntityException,
|
||||
} from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HTTPDecorators, Paginator } from '~/common/decorator/http.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
@@ -22,7 +22,7 @@ import { PagerDto } from '~/shared/dto/pager.dto'
|
||||
import { PageModel, PartialPageModel } from './page.model'
|
||||
import { PageService } from './page.service'
|
||||
|
||||
@Controller('pages')
|
||||
@ApiController('pages')
|
||||
@ApiName
|
||||
export class PageController {
|
||||
constructor(
|
||||
|
||||
@@ -3,7 +3,6 @@ import { Types } from 'mongoose'
|
||||
import {
|
||||
BadRequestException,
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
HttpCode,
|
||||
@@ -16,6 +15,7 @@ import {
|
||||
} from '@nestjs/common'
|
||||
import { ApiOperation } from '@nestjs/swagger'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HTTPDecorators, Paginator } from '~/common/decorator/http.decorator'
|
||||
import { IpLocation, IpRecord } from '~/common/decorator/ip.decorator'
|
||||
@@ -32,7 +32,7 @@ import { CategoryAndSlugDto } from './post.dto'
|
||||
import { PartialPostModel, PostModel } from './post.model'
|
||||
import { PostService } from './post.service'
|
||||
|
||||
@Controller('posts')
|
||||
@ApiController('posts')
|
||||
@ApiName
|
||||
export class PostController {
|
||||
constructor(
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { Controller, Get } from '@nestjs/common'
|
||||
import { Get } from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
|
||||
@@ -7,7 +8,7 @@ import { PTYService } from './pty.service'
|
||||
|
||||
@ApiName
|
||||
@Auth()
|
||||
@Controller({ path: 'pty' })
|
||||
@ApiController({ path: 'pty' })
|
||||
export class PTYController {
|
||||
constructor(private readonly service: PTYService) {}
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import {
|
||||
BadRequestException,
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
Param,
|
||||
@@ -9,6 +8,7 @@ import {
|
||||
Query,
|
||||
} from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
@@ -18,7 +18,7 @@ import { OffsetDto } from '~/shared/dto/pager.dto'
|
||||
import { RecentlyModel } from './recently.model'
|
||||
import { RecentlyService } from './recently.service'
|
||||
|
||||
@Controller(['recently', 'shorthand'])
|
||||
@ApiController(['recently', 'shorthand'])
|
||||
@ApiName
|
||||
export class RecentlyController {
|
||||
constructor(private readonly recentlyService: RecentlyService) {}
|
||||
|
||||
7
src/modules/render/render.controller.ts
Normal file
7
src/modules/render/render.controller.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { Controller } from '@nestjs/common'
|
||||
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
|
||||
@ApiName
|
||||
@Controller('/render')
|
||||
export class RenderEjsController {}
|
||||
8
src/modules/render/render.module.ts
Normal file
8
src/modules/render/render.module.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Module } from '@nestjs/common'
|
||||
|
||||
import { RenderEjsController } from './render.controller'
|
||||
|
||||
@Module({
|
||||
controllers: [RenderEjsController],
|
||||
})
|
||||
export class RenderEjsModule {}
|
||||
@@ -1,11 +1,6 @@
|
||||
import {
|
||||
BadRequestException,
|
||||
Controller,
|
||||
Get,
|
||||
Param,
|
||||
Query,
|
||||
} from '@nestjs/common'
|
||||
import { BadRequestException, Get, Param, Query } from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { HttpCache } from '~/common/decorator/cache.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
import { IsMaster } from '~/common/decorator/role.decorator'
|
||||
@@ -13,7 +8,7 @@ import { SearchDto } from '~/modules/search/search.dto'
|
||||
|
||||
import { SearchService } from './search.service'
|
||||
|
||||
@Controller('search')
|
||||
@ApiController('search')
|
||||
@ApiName
|
||||
export class SearchController {
|
||||
constructor(private readonly searchService: SearchService) {}
|
||||
|
||||
@@ -2,7 +2,6 @@ import { FastifyReply, FastifyRequest } from 'fastify'
|
||||
|
||||
import {
|
||||
CacheTTL,
|
||||
Controller,
|
||||
ForbiddenException,
|
||||
Get,
|
||||
InternalServerErrorException,
|
||||
@@ -12,6 +11,7 @@ import {
|
||||
Response,
|
||||
} from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
@@ -23,7 +23,7 @@ import { ServerlessReferenceDto } from './serverless.dto'
|
||||
import { ServerlessService } from './serverless.service'
|
||||
|
||||
@ApiName
|
||||
@Controller(['serverless', 'fn'])
|
||||
@ApiController(['serverless', 'fn'])
|
||||
export class ServerlessController {
|
||||
constructor(private readonly serverlessService: ServerlessService) {}
|
||||
|
||||
|
||||
@@ -1,17 +1,21 @@
|
||||
import { uniq } from 'lodash'
|
||||
|
||||
import { CacheKey, CacheTTL, Controller, Get, Header } from '@nestjs/common'
|
||||
|
||||
import { apiRoutePrefix } from '~/common/decorator/api-controller.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
import { CacheKeys } from '~/constants/cache.constant'
|
||||
|
||||
import { AggregateService } from '../aggregate/aggregate.service'
|
||||
|
||||
@Controller('sitemap')
|
||||
@Controller()
|
||||
@ApiName
|
||||
export class SitemapController {
|
||||
constructor(private readonly aggregateService: AggregateService) {}
|
||||
|
||||
@Get('/')
|
||||
// TODO drop 兼容老版本
|
||||
@Get(uniq(['/sitemap', `${apiRoutePrefix}/sitemap`]))
|
||||
@CacheTTL(3600)
|
||||
@CacheKey(CacheKeys.SiteMapXmlCatch)
|
||||
@HTTPDecorators.Bypass
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
ForbiddenException,
|
||||
Get,
|
||||
@@ -10,6 +9,7 @@ import {
|
||||
Query,
|
||||
} from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { BanInDemo } from '~/common/decorator/demo.decorator'
|
||||
import { HTTPDecorators } from '~/common/decorator/http.decorator'
|
||||
@@ -26,7 +26,7 @@ import { SnippetModel, SnippetType } from './snippet.model'
|
||||
import { SnippetService } from './snippet.service'
|
||||
|
||||
@ApiName
|
||||
@Controller('snippets')
|
||||
@ApiController('snippets')
|
||||
export class SnippetController {
|
||||
constructor(private readonly snippetService: SnippetService) {}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { CacheTTL, Controller, Get, Param, Query } from '@nestjs/common'
|
||||
import { CacheTTL, Get, Param, Query } from '@nestjs/common'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HttpCache } from '~/common/decorator/cache.decorator'
|
||||
import { ApiName } from '~/common/decorator/openapi.decorator'
|
||||
@@ -11,7 +12,7 @@ import { ConfigsService } from '../configs/configs.service'
|
||||
import { GaodeMapLocationDto, GaodeMapSearchDto, IpDto } from './tool.dto'
|
||||
import { ToolService } from './tool.service'
|
||||
|
||||
@Controller('tools')
|
||||
@ApiController('tools')
|
||||
@ApiName
|
||||
@Auth()
|
||||
export class ToolController {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { Body, Controller, Get, HttpCode, Patch, Post } from '@nestjs/common'
|
||||
import { Body, Get, HttpCode, Patch, Post } from '@nestjs/common'
|
||||
import { ApiOperation } from '@nestjs/swagger'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HttpCache } from '~/common/decorator/cache.decorator'
|
||||
import {
|
||||
@@ -19,7 +20,7 @@ import { UserDocument, UserModel } from './user.model'
|
||||
import { UserService } from './user.service'
|
||||
|
||||
@ApiName
|
||||
@Controller(['master', 'user'])
|
||||
@ApiController(['master', 'user'])
|
||||
export class UserController {
|
||||
constructor(
|
||||
private readonly userService: UserService,
|
||||
|
||||
@@ -2,7 +2,6 @@ import pluralize from 'pluralize'
|
||||
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Delete,
|
||||
Get,
|
||||
HttpCode,
|
||||
@@ -16,6 +15,7 @@ import {
|
||||
import { ApiTags, PartialType } from '@nestjs/swagger'
|
||||
import { AnyParamConstructor } from '@typegoose/typegoose/lib/types'
|
||||
|
||||
import { ApiController } from '~/common/decorator/api-controller.decorator'
|
||||
import { Auth } from '~/common/decorator/auth.decorator'
|
||||
import { HTTPDecorators, Paginator } from '~/common/decorator/http.decorator'
|
||||
import { EventScope } from '~/constants/business-event.constant'
|
||||
@@ -47,7 +47,7 @@ export function BaseCrudFactory<
|
||||
const Upper = classUpper || class {}
|
||||
|
||||
@ApiTags(`${tagPrefix} Routes`)
|
||||
@Controller(pluralizeName)
|
||||
@ApiController(pluralizeName)
|
||||
class BaseCrud extends Upper {
|
||||
constructor(
|
||||
@InjectModel(model) private readonly _model: MongooseModel<T>,
|
||||
|
||||
Reference in New Issue
Block a user