module.exports = { servers: [ { url: "http://localhost:3001/", description: "Local server", }, ], tags: [ { name: "User" }, ], openapi: "3.0.3", info: { title: "Trampa", description: "Trampa api" }, paths: { '/users': { get: { tags: ["User"], description: "Get all users", parameters: [], responses: { 200: { description: "Success", content: { "application/json": { schema: { $ref: "#/components/schemas/User", } } } }, 200: { description: "Users returned successfully" }, 500: { description: "Internal server error" } } }, post: { tags: ["User"], description: "Create user", parameters: [], requestBody: { content: { "application/json": { schema: { type: "object", properties: { name: { type: "string" }, email: { type: "string" }, password: { type: "string" } } } } } }, responses: { 201: { description: "User created successfully", content: { "application/json": { schema: { $ref: "#/components/schemas/User" }, }, }, }, 400: { description: "Object cant be empty", }, 401: { description: "Invalid input parameters", }, 500: { description: "Internal server error", } } } }, '/users/{id}': { get: { tags: ["User"], description: "Get user by id", parameters: [ { name: "id", in: "path", schema: { $ref: "#/components/schemas/id", }, required: true, description: "A single user id", } ], responses: { 200: { description: "Success", content: { "application/json": { schema: { $ref: "#/components/schemas/User", } } } }, 400: { description: "Bad request" }, 404: { description: "User with specified id does not exist" }, 500: { description: "Internal server error" } } }, put: { tags: ["User"], description: "Update user", parameters: [ { name: "id", in: "path", schema: { $ref: "#/components/schemas/id", // data model of the param }, required: true, description: "A single user id", } ], requestBody: { content: { "application/json": { schema: { type: "object", properties: { name: { type: "string" }, email: { type: "string" }, password: { type: "string" } } } } } }, responses: { 200: { description: "User updated successfully", }, 400: { description: "Invalid input parameters", }, 500: { description: "Server error", } } }, patch: { tags: ["User"], description: "Update user", parameters: [ { name: "id", in: "path", // schema: { // $ref: "#/components/schemas/id", // data model of the param // }, required: true, description: "A single user id", } ], requestBody: { content: { } }, responses: { } }, delete: { tags: ["User"], description: "Delete user", parameters: [ { name: "id", in: "path", schema: { $ref: "#/components/schemas/id", }, required: true, }, ], responses: { 204: { description: "User deleted successfully", }, 400: { description: "You need to provide valid Id'", }, 404: { description: "User not found", }, 500: { description: "Internal server error", }, }, } }, '/auth/token': { post: { tags: ["Token"], description: "Log in user", parameters: [], requestBody: { content: { "application/json": { schema: { type: "object", properties: { email: { type: "string" }, password: { type: "string" } } } } } }, responses: { 201: { description: "User logged in successfully!" }, 400: { description: "Wrong credentials!" }, 500: { description: "Internal server error" } } } }, '/auth/logout': { post: { tags: ["Token"], description: "Log out user", parameters: [], requestBody: { content: { "application/json": { schema: { $ref: "#/components/schemas/Token" } } } }, responses: { 201: { description: "User logged out successfully" }, 404: { description: "No user has the token provided!" }, 500: { description: "Internal server error" } } } }, '/auth/refresh': { post: { tags: ["Token"], description: "Log out user", parameters: [], requestBody: { content: { "application/json": { schema: { $ref: "#/components/schemas/Token" } } } }, responses: { 201: { description: "User refreshed successfully" }, 404: { description: "Token not valid!" } } } } }, components: { schemas: { id: { type: "string", description: "An id of a user" }, User: { type: "object", properties: { name: { type: "string" }, email: { type: "string" }, password: { type: "string" }, tokens: { type: "array", items: { type: "string" } } } }, Token: { type: "object", properties: { token: { type: "string" }, userId: { type: "string" } } } } } }