Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update doc, and swagger options #484

Merged
merged 2 commits into from
Oct 18, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions docs/database/databae_migration.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ For remove all data do
yarn rollback
```

# API Key Test
api key: `2ihKDneb9jQGgidAOqfO`
api key secret: `ZLCtDd2rh3TAyVhfAeo3JOPvWfAsTp0Oq6rHl69D`

# User Test

1. Super Admin
Expand Down
4 changes: 3 additions & 1 deletion nest-cli.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
"collection": "@nestjs/schematics",
"sourceRoot": "src",
"compilerOptions": {
"plugins": ["@nestjs/swagger"],
"plugins": [
"@nestjs/swagger"
],
"assets": [
{
"include": "languages/**/*",
Expand Down
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@
"rimraf": "^5.0.5",
"rotating-file-stream": "^3.1.1",
"rxjs": "^7.8.1",
"swagger-themes": "^1.2.30",
"ua-parser-js": "^1.0.36",
"winston": "^3.11.0",
"winston-daily-rotate-file": "^4.7.1",
Expand Down
29 changes: 1 addition & 28 deletions src/app/controllers/app.controller.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import { Controller, Get, VERSION_NEUTRAL } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { ApiTags } from '@nestjs/swagger';
import { AppHelloApiKeyDoc, AppHelloDoc } from 'src/app/docs/app.doc';
import { AppHelloDoc } from 'src/app/docs/app.doc';
import { AppHelloSerialization } from 'src/app/serializations/app.hello.serialization';
import { ApiKeyPublicProtected } from 'src/common/api-key/decorators/api-key.decorator';
import { HelperDateService } from 'src/common/helper/services/helper.date.service';
import { RequestUserAgent } from 'src/common/request/decorators/request.decorator';
import { Response } from 'src/common/response/decorators/response.decorator';
Expand Down Expand Up @@ -47,30 +46,4 @@ export class AppController {
},
};
}

@AppHelloApiKeyDoc()
@Response('app.hello', { serialization: AppHelloSerialization })
@ApiKeyPublicProtected()
@Get('/hello/api-key')
async helloApiKey(
@RequestUserAgent() userAgent: IResult
): Promise<IResponse> {
const newDate = this.helperDateService.create();

return {
_metadata: {
customProperty: {
messageProperties: {
serviceName: this.serviceName,
},
},
},
data: {
userAgent,
date: newDate,
format: this.helperDateService.format(newDate),
timestamp: this.helperDateService.timestamp(newDate),
},
};
}
}
22 changes: 2 additions & 20 deletions src/app/docs/app.doc.ts
Original file line number Diff line number Diff line change
@@ -1,32 +1,14 @@
import { applyDecorators } from '@nestjs/common';
import { AppHelloSerialization } from 'src/app/serializations/app.hello.serialization';
import {
Doc,
DocAuth,
DocGuard,
DocResponse,
} from 'src/common/doc/decorators/doc.decorator';
import { Doc, DocResponse } from 'src/common/doc/decorators/doc.decorator';

export function AppHelloDoc(): MethodDecorator {
return applyDecorators(
Doc({
operation: 'hello',
operation: 'hello test api',
}),
DocResponse<AppHelloSerialization>('app.hello', {
serialization: AppHelloSerialization,
})
);
}

export function AppHelloApiKeyDoc(): MethodDecorator {
return applyDecorators(
Doc({
operation: 'hello',
}),
DocAuth({ apiKey: true }),
DocGuard({ timestamp: true, userAgent: true }),
DocResponse<AppHelloSerialization>('app.helloApiKey', {
serialization: AppHelloSerialization,
})
);
}
18 changes: 9 additions & 9 deletions src/common/api-key/docs/api-key.admin.doc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import { ResponseIdSerialization } from 'src/common/response/serializations/resp

export function ApiKeyAdminListDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.admin.apiKey' }),
Doc({ summary: 'get list of api keys' }),
DocRequest({
queries: ApiKeyDocQueryIsActive,
}),
Expand All @@ -43,7 +43,7 @@ export function ApiKeyAdminListDoc(): MethodDecorator {

export function ApiKeyAdminGetDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.admin.apiKey' }),
Doc({ summary: 'get detail an api key' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand All @@ -67,7 +67,7 @@ export function ApiKeyAdminGetDoc(): MethodDecorator {

export function ApiKeyAdminCreateDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.admin.apiKey' }),
Doc({ summary: 'create an api key' }),
DocAuth({
jwtAccessToken: true,
}),
Expand All @@ -85,7 +85,7 @@ export function ApiKeyAdminCreateDoc(): MethodDecorator {

export function ApiKeyAdminActiveDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.admin.apiKey' }),
Doc({ summary: 'make api key be active' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand Down Expand Up @@ -120,7 +120,7 @@ export function ApiKeyAdminActiveDoc(): MethodDecorator {

export function ApiKeyAdminInactiveDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.admin.apiKey' }),
Doc({ summary: 'make api key be inactive' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand Down Expand Up @@ -155,7 +155,7 @@ export function ApiKeyAdminInactiveDoc(): MethodDecorator {

export function ApiKeyAdminResetDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.admin.apiKey' }),
Doc({ summary: 'reset secret an api key' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand Down Expand Up @@ -192,7 +192,7 @@ export function ApiKeyAdminResetDoc(): MethodDecorator {

export function ApiKeyAdminUpdateDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.admin.apiKey' }),
Doc({ summary: 'update data an api key' }),
DocRequest({
params: ApiKeyDocParamsId,
bodyType: ENUM_DOC_REQUEST_BODY_TYPE.JSON,
Expand Down Expand Up @@ -231,7 +231,7 @@ export function ApiKeyAdminUpdateDoc(): MethodDecorator {

export function ApiKeyAdminUpdateDateDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.admin.apiKey' }),
Doc({ summary: 'update date of api key' }),
DocRequest({
params: ApiKeyDocParamsId,
bodyType: ENUM_DOC_REQUEST_BODY_TYPE.JSON,
Expand Down Expand Up @@ -270,7 +270,7 @@ export function ApiKeyAdminUpdateDateDoc(): MethodDecorator {

export function ApiKeyAdminDeleteDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.admin.apiKey' }),
Doc({ summary: 'delete an api key' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand Down
16 changes: 8 additions & 8 deletions src/common/api-key/docs/api-key.user.doc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import { ResponseIdSerialization } from 'src/common/response/serializations/resp

export function ApiKeyUserListDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.user.apiKey' }),
Doc({ summary: 'get list of api keys' }),
DocRequest({
queries: ApiKeyDocQueryIsActive,
}),
Expand All @@ -35,7 +35,7 @@ export function ApiKeyUserListDoc(): MethodDecorator {

export function ApiKeyUserGetDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.user.apiKey' }),
Doc({ summary: 'get detail an api key' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand All @@ -51,7 +51,7 @@ export function ApiKeyUserGetDoc(): MethodDecorator {

export function ApiKeyUserCreateDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.user.apiKey' }),
Doc({ summary: 'create an api key' }),
DocAuth({
jwtAccessToken: true,
}),
Expand All @@ -65,7 +65,7 @@ export function ApiKeyUserCreateDoc(): MethodDecorator {

export function ApiKeyUserActiveDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.user.apiKey' }),
Doc({ summary: 'make api key be active' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand All @@ -79,7 +79,7 @@ export function ApiKeyUserActiveDoc(): MethodDecorator {

export function ApiKeyUserInactiveDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.user.apiKey' }),
Doc({ summary: 'make api key be inactive' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand All @@ -93,7 +93,7 @@ export function ApiKeyUserInactiveDoc(): MethodDecorator {

export function ApiKeyUserResetDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.user.apiKey' }),
Doc({ summary: 'reset secret an api key' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand All @@ -109,7 +109,7 @@ export function ApiKeyUserResetDoc(): MethodDecorator {

export function ApiKeyUserUpdateDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.user.apiKey' }),
Doc({ summary: 'update data an api key' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand All @@ -125,7 +125,7 @@ export function ApiKeyUserUpdateDoc(): MethodDecorator {

export function ApiKeyUserDeleteDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.user.apiKey' }),
Doc({ summary: 'delete an api key' }),
DocRequest({
params: ApiKeyDocParamsId,
}),
Expand Down
11 changes: 10 additions & 1 deletion src/common/doc/decorators/doc.decorator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -220,9 +220,10 @@ export function Doc(options?: IDocOptions): MethodDecorator {

return applyDecorators(
ApiOperation({
summary: options?.operation,
summary: options?.summary,
deprecated: options?.deprecated,
description: options?.description,
operationId: options?.operation,
}),
ApiHeaders([
{
Expand Down Expand Up @@ -411,6 +412,14 @@ export function DocAuth(options?: IDocAuthOptions) {
});
}

if (options?.google) {
docs.push(ApiBearerAuth('google'));
oneOfUnauthorized.push({
messagePath: 'auth.error.googleSSO',
statusCode: ENUM_AUTH_STATUS_CODE_ERROR.AUTH_GOOGLE_SSO_ERROR,
});
}

if (options?.apiKey) {
docs.push(ApiSecurity('apiKey'));
oneOfUnauthorized.push(
Expand Down
2 changes: 2 additions & 0 deletions src/common/doc/interfaces/doc.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { ENUM_DOC_REQUEST_BODY_TYPE } from 'src/common/doc/constants/doc.enum.co
import { ENUM_FILE_EXCEL_MIME } from 'src/common/file/constants/file.enum.constant';

export interface IDocOptions {
summary?: string;
operation?: string;
deprecated?: boolean;
description?: string;
Expand All @@ -24,6 +25,7 @@ export interface IDocAuthOptions {
jwtAccessToken?: boolean;
jwtRefreshToken?: boolean;
apiKey?: boolean;
google?: boolean;
}

export interface IDocRequestOptions {
Expand Down
2 changes: 1 addition & 1 deletion src/common/message/docs/message.public.doc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { MessageLanguageSerialization } from 'src/common/message/serializations/

export function MessagePublicLanguageDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.public.message' }),
Doc({ summary: 'get all language of app' }),
DocResponse<MessageLanguageSerialization>('apiKey.languages', {
serialization: MessageLanguageSerialization,
})
Expand Down
2 changes: 1 addition & 1 deletion src/common/setting/docs/setting.admin.doc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import { ENUM_SETTING_STATUS_CODE_ERROR } from 'src/common/setting/constants/set

export function SettingAdminUpdateDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.admin.setting' }),
Doc({ summary: 'update a setting' }),
DocRequest({
params: SettingDocParamsId,
}),
Expand Down
4 changes: 2 additions & 2 deletions src/common/setting/docs/setting.public.doc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import { SettingListSerialization } from 'src/common/setting/serializations/sett
export function SettingPublicListDoc(): MethodDecorator {
return applyDecorators(
Doc({
operation: 'common.public.setting',
summary: 'get list of settings',
}),
DocResponsePaging<SettingListSerialization>('setting.list', {
serialization: SettingListSerialization,
Expand All @@ -25,7 +25,7 @@ export function SettingPublicListDoc(): MethodDecorator {

export function SettingPublicGetDoc(): MethodDecorator {
return applyDecorators(
Doc({ operation: 'common.public.setting' }),
Doc({ summary: 'get detail a setting' }),
DocRequest({
params: SettingDocParamsId,
}),
Expand Down
6 changes: 6 additions & 0 deletions src/health/controllers/health.public.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
MongooseHealthIndicator,
} from '@nestjs/terminus';
import { Connection } from 'mongoose';
import { ApiKeyPublicProtected } from 'src/common/api-key/decorators/api-key.decorator';
import { DatabaseConnection } from 'src/common/database/decorators/database.decorator';
import { Response } from 'src/common/response/decorators/response.decorator';
import { IResponse } from 'src/common/response/interfaces/response.interface';
Expand All @@ -33,6 +34,7 @@ export class HealthPublicController {
@HealthCheckDoc()
@Response('health.check', { serialization: HealthSerialization })
@HealthCheck()
@ApiKeyPublicProtected()
@Get('/aws')
async checkAws(): Promise<IResponse> {
const data = await this.health.check([
Expand All @@ -47,6 +49,7 @@ export class HealthPublicController {
@HealthCheckDoc()
@Response('health.check', { serialization: HealthSerialization })
@HealthCheck()
@ApiKeyPublicProtected()
@Get('/database')
async checkDatabase(): Promise<IResponse> {
const data = await this.health.check([
Expand All @@ -64,6 +67,7 @@ export class HealthPublicController {
@HealthCheckDoc()
@Response('health.check', { serialization: HealthSerialization })
@HealthCheck()
@ApiKeyPublicProtected()
@Get('/memory-heap')
async checkMemoryHeap(): Promise<IResponse> {
const data = await this.health.check([
Expand All @@ -82,6 +86,7 @@ export class HealthPublicController {
@HealthCheckDoc()
@Response('health.check', { serialization: HealthSerialization })
@HealthCheck()
@ApiKeyPublicProtected()
@Get('/memory-rss')
async checkMemoryRss(): Promise<IResponse> {
const data = await this.health.check([
Expand All @@ -100,6 +105,7 @@ export class HealthPublicController {
@HealthCheckDoc()
@Response('health.check', { serialization: HealthSerialization })
@HealthCheck()
@ApiKeyPublicProtected()
@Get('/storage')
async checkStorage(): Promise<IResponse> {
const data = await this.health.check([
Expand Down
2 changes: 1 addition & 1 deletion src/health/docs/health.doc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { HealthSerialization } from 'src/health/serializations/health.serializat
export function HealthCheckDoc(): MethodDecorator {
return applyDecorators(
Doc({
operation: 'health',
summary: 'health check api',
}),
DocAuth({
jwtAccessToken: true,
Expand Down
Loading