0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2024-12-30 20:33:54 -05:00

fix(core): avoid duplicate operationId (#6574)

avoid duplication operationId
This commit is contained in:
simeng-li 2024-09-12 13:44:03 +08:00 committed by GitHub
parent 318550cab4
commit 1383aafebb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 10 additions and 3 deletions

View file

@ -2,8 +2,8 @@
"paths": { "paths": {
"/api/experience/profile": { "/api/experience/profile": {
"post": { "post": {
"operationId": "UpdateUserProfile", "operationId": "AddUserProfile",
"summary": "Update user profile data", "summary": "Add user profile",
"description": "Adds user profile data to the current experience interaction. <br/>- For `Register`: The profile data provided before the identification request will be used to create a new user account. <br/>- For `SignIn` and `Register`: The profile data provided after the user is identified will be used to update the user's profile when the interaction is submitted. <br/>- `ForgotPassword`: Not supported.", "description": "Adds user profile data to the current experience interaction. <br/>- For `Register`: The profile data provided before the identification request will be used to create a new user account. <br/>- For `SignIn` and `Register`: The profile data provided after the user is identified will be used to update the user's profile when the interaction is submitted. <br/>- `ForgotPassword`: Not supported.",
"requestBody": { "requestBody": {
"content": { "content": {

View file

@ -47,7 +47,7 @@
}, },
"/api/experience/verification/verification-code/verify": { "/api/experience/verification/verification-code/verify": {
"post": { "post": {
"operationId": "VerifyVerificationCode", "operationId": "VerifyVerificationCodeVerification",
"summary": "Verify verification code", "summary": "Verify verification code",
"description": "Verify the provided verification code against the user's identifier. If successful, the verification record will be marked as verified.", "description": "Verify the provided verification code against the user's identifier. If successful, the verification record will be marked as verified.",
"requestBody": { "requestBody": {

View file

@ -192,6 +192,8 @@ export const validateSupplement = (
* @throws {TypeError} if the document is invalid. * @throws {TypeError} if the document is invalid.
*/ */
export const validateSwaggerDocument = (document: OpenAPIV3.Document) => { export const validateSwaggerDocument = (document: OpenAPIV3.Document) => {
const operationIdSet = new Set<string>();
for (const [path, operations] of Object.entries(document.paths)) { for (const [path, operations] of Object.entries(document.paths)) {
if (path.startsWith('/api/interaction')) { if (path.startsWith('/api/interaction')) {
devConsole.warn(`Path \`${path}\` is not documented. Do something!`); devConsole.warn(`Path \`${path}\` is not documented. Do something!`);
@ -236,6 +238,11 @@ export const validateSwaggerDocument = (document: OpenAPIV3.Document) => {
operation.operationId, operation.operationId,
`Path \`${path}\` and operation \`${method}\` must have an operationId.` `Path \`${path}\` and operation \`${method}\` must have an operationId.`
); );
assert(
!operationIdSet.has(operation.operationId),
`Operation ID \`${operation.operationId}\` is duplicated.`
);
operationIdSet.add(operation.operationId);
} }
for (const tag of document.tags ?? []) { for (const tag of document.tags ?? []) {