У меня есть метод контроллера login()
, который может возвращать либо 200 OK
с токеном JWT, снабженным Session
полезной нагрузкой, либо 451 Unavailable due to legal reasons
с токеном JWT, снабженным полезной нагрузкой AcceptTerms, если пользователь, пытающийся войти в систему, должен согласиться с новой версиейусловий и положений.
@Nest.Post("login")
@ApiOperation({ title: 'Log in the user given email and password', operationId: 'userLogin'})
@Nest.UseFilters(UnavailableLegalReasonsExceptionFilter)
@ApiResponse({ status: HttpStatus.OK, description: "User was properly logged in", type: JwtToken})
@ApiResponse({ status: 451, description: "User haven't confirmed the latest version of Terms & Conditions", type: JwtToken})
async login(@Nest.Body() body: DTOs.LoginDto): Promise<JwtToken> {
...
}
Теперь я хотел бы задокументировать это с помощью Swagger.JwtToken
определяется как:
export class JwtToken {
@ApiModelProperty({enum: TOKEN})
type: TOKEN;
@ApiModelProperty({description: "Number of seconds"})
expiresIn: number;
@ApiModelProperty({ description: "Token", example: "eyJhb ... wWFQ"})
accessToken: string;
}
и TOKEN
:
export enum TOKEN {
AcceptTerms = "AcceptTerms",
Session = "Session"
}
Но запись о том, что login()
возвращает только JwtToken
, вводит в заблуждение, как в случае 200
type
- это Session
, а в случае 451
это AcceptTerms
.Полезные данные также существенно различаются:
export class JwtPayload {
@ApiModelProperty({enum: TOKEN, description: "Token type"})
type: TOKEN;
@ApiModelProperty()
issuedAt: number;
}
export class LoginJwtPayload extends JwtPayload {
@ApiModelProperty()
name: string;
@ApiModelProperty({description: "T&C version accepted"})
tncAccepted: number;
}
export class AcceptTermsJwtPayload extends JwtPayload {
@ApiModelProperty({format: "email"})
email: string;
}
200
использует LoginJwtPayload
полезную нагрузку и 451
использует AcceptTermsJwtPayload
.
Как документировать это с помощью Nest's SwaggerModule