From 0b36db9b3348bb11a499e0dc594e607efb94bea1 Mon Sep 17 00:00:00 2001 From: Adolfo Reyna Date: Thu, 17 Jul 2025 10:06:52 -0400 Subject: [PATCH] docs: Update Swagger documentation for Profile endpoints Updated the Swagger documentation for various Profile endpoints to accurately reflect their return types, including arrays of Profile objects and detailed schemas for specific responses. --- routes/profile.js | 299 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 243 insertions(+), 56 deletions(-) diff --git a/routes/profile.js b/routes/profile.js index f61b149..88c95bc 100644 --- a/routes/profile.js +++ b/routes/profile.js @@ -21,29 +21,93 @@ DB.getDB.then((DB) => { * description: User profile management */ -/** - * @swagger - * /user/mine: - * get: - * summary: Get all profiles for the logged-in user - * tags: [Profiles] - * security: - * - cookieAuth: [] - * responses: - * 200: - * description: OK - * content: - * application/json: - * schema: - * type: object - * properties: - * status: - * type: string - * profiles: - * type: array - * items: - * type: object - */ + /** + * @swagger + * components: + * schemas: + * Profile: + * type: object + * properties: + * userid: + * type: string + * description: The ID of the user associated with the profile. + * profile: + * type: object + * properties: + * firstName: + * type: string + * lastName: + * type: string + * photo: + * type: string + * location: + * type: string + * language: + * type: string + * status: + * type: string + * description: + * type: string + * data: + * type: object + * description: Additional custom data for the profile. + * username: + * type: string + * following: + * type: array + * items: + * type: string + * description: List of profile IDs this profile is following. + * lastUpdate: + * type: string + * format: date-time + * newsFeedCache: + * type: array + * items: + * type: object + * notifications: + * type: array + * items: + * type: object + * isGroup: + * type: boolean + * isCourse: + * type: boolean + * isPrivate: + * type: boolean + * isChat: + * type: boolean + * subscribed: + * type: object + * description: Users subscribed to this group (if isGroup is true). + * pending: + * type: object + * description: Pending subscription requests for private groups. + */ + + /** + * @swagger + * /user/mine: + * get: + * summary: Get all profiles for the logged-in user + * tags: [Profiles] + * security: + * - cookieAuth: [] + * responses: + * 200: + * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string + * profiles: + * type: array + * items: + * $ref: '#/components/schemas/Profile' + */ router.get("/mine", async (req, res) => { let userid = getUserId(req); let profiles = await DB.getUserProfiles(userid); @@ -67,9 +131,14 @@ DB.getDB.then((DB) => { * required: true * schema: * type: object + * $ref: '#/components/schemas/Profile' * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Profile' */ router.get("/new", async (req, res) => { //Deprecated please use route post("/") let profile = { @@ -97,13 +166,14 @@ DB.getDB.then((DB) => { * content: * application/json: * schema: - * type: object - * properties: - * content: - * type: object + * $ref: '#/components/schemas/Profile' * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Profile' */ router.post("/", async (req, res) => { let profile = { @@ -126,32 +196,32 @@ DB.getDB.then((DB) => { }); - /** - * @swagger - * /user/invite: - * post: - * summary: Invite a new user by email - * tags: [Profiles] - * security: - * - cookieAuth: [] - * requestBody: - * required: true - * content: - * application/json: - * schema: - * type: object - * properties: - * name: - * type: string - * email: - * type: string - * format: email - * responses: - * 200: - * description: OK - * 400: - * description: Bad request - */ + /** + * @swagger + * /user/invite: + * post: + * summary: Invite a new user by email + * tags: [Profiles] + * security: + * - cookieAuth: [] + * requestBody: + * required: true + * content: + * application/json: + * schema: + * type: object + * properties: + * name: + * type: string + * email: + * type: string + * format: email + * responses: + * 200: + * description: OK + * 400: + * description: Bad request + */ router.post("/invite", async (req, res) => { try { const userid = getUserId(req); @@ -207,7 +277,17 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK - */ + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string + * invitation: + * $ref: '#/components/schemas/Profile' + * +*/ router.get("/invite/:email", async (req, res) => { const userid = getUserId(req); const email = req.params.email; @@ -231,6 +311,17 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string + * groups: + * type: array + * items: + * $ref: '#/components/schemas/Profile' */ router.get("/groups", async (req, res) => { let groups = await DB.getGroups(); @@ -251,6 +342,17 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string + * groups: + * type: array + * items: + * $ref: '#/components/schemas/Profile' */ router.get("/groups/following", async (req, res) => { const profileId = getProfileId(req); @@ -274,10 +376,14 @@ DB.getDB.then((DB) => { * content: * application/json: * schema: - * type: object + * $ref: '#/components/schemas/Profile' * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Profile' */ router.post("/groups", async (req, res) => { let profile = { @@ -304,6 +410,17 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string + * groups: + * type: array + * items: + * $ref: '#/components/schemas/Profile' */ router.get("/courses", async (req, res) => { let groups = await DB.getCourses(); @@ -418,6 +535,17 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string + * groups: + * type: array + * items: + * $ref: '#/components/schemas/Profile' */ router.get("/groups/search", async (req, res) => { let query = req.query.query; @@ -446,6 +574,15 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string + * groups: + * $ref: '#/components/schemas/Profile' */ router.get("/groups/:id", async (req, res) => { const groupid = req.params.id; @@ -531,6 +668,17 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string + * profiles: + * type: array + * items: + * $ref: '#/components/schemas/Profile' */ router.get("/search", async (req, res) => { let query = req.query.query; @@ -563,6 +711,13 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string */ router.post("/setData", (req, res) => { const key = req.body.key; @@ -590,12 +745,19 @@ DB.getDB.then((DB) => { * type: object * properties: * profile: - * type: object + * $ref: '#/components/schemas/Profile' * data: * type: object * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string */ router.post("/myProfile", async (req, res) => { let profile = { @@ -627,6 +789,10 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * $ref: '#/components/schemas/Profile' */ router.get("/:id", async (req, res) => { let profileId = req.params.id; @@ -654,6 +820,13 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string */ router.delete("/:id", async (req, res) => { const profileId = req.params.id; @@ -685,6 +858,13 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string */ router.get("/:id/follow", async (req, res) => { let followProfileId = req.params.id; @@ -713,6 +893,13 @@ DB.getDB.then((DB) => { * responses: * 200: * description: OK + * content: + * application/json: + * schema: + * type: object + * properties: + * status: + * type: string */ router.get("/:id/unfollow", async (req, res) => { let followProfileId = req.params.id;