nzediegwu1/EventManager

View on GitHub
server/swaggerDoc.json

Summary

Maintainability
Test Coverage
{
  "swagger": "2.0",
  "info": {
    "version": "1.0.0",
    "title": "EventsManager API",
    "description": "API for adding, retrieving and removing centers and events"
  },
  "contact": {
    "email": "nzediegwu1@gmail.com"
  },

  "basePath": "/api/v1",
  "schemes": ["https", "http"],
  "securityDefinitions": {
    "UserToken": {
      "type": "apiKey",
      "in": "header",
      "name": "x-token"
    }
  },
  "paths": {
    "/users/login": {
      "post": {
        "tags": ["Users"],
        "summary": "Login a user",
        "description": "Logs in a registered user.",
        "consumes": ["application/x-www-form-urlencoded"],
        "parameters": [
          {
            "in": "formData",
            "name": "username",
            "type": "string",
            "required": true
          },
          {
            "in": "formData",
            "name": "password",
            "type": "string",
            "format": "password",
            "required": true
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Invalid login details"
          },
          "404": {
            "description": "User does not  Exists"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/users": {
      "post": {
        "tags": ["Users"],
        "summary": "Register a user",
        "description": "Registers a new user.",
        "consumes": ["application/x-www-form-urlencoded"],
        "parameters": [
          {
            "in": "formData",
            "name": "name",
            "type": "string",
            "required": true
          },
          {
            "in": "formData",
            "name": "username",
            "type": "string",
            "required": true
          },
          {
            "in": "formData",
            "name": "email",
            "type": "string",
            "format": "email",
            "required": true
          },
          {
            "in": "formData",
            "name": "password",
            "type": "string",
            "format": "password",
            "required": true
          },
          {
            "in": "formData",
            "name": "confirmPassword",
            "type": "string",
            "format": "password",
            "required": true
          },
          {
            "in": "formData",
            "name": "phoneNo",
            "type": "string",
            "required": true,
            "description": "Phone number: format: +(code)NUMBER"
          }
        ],
        "responses": {
          "201": {
            "description": "New user created"
          },
          "400": {
            "description": "Bad request"
          },
          "409": {
            "description": "User already exists"
          },
          "500": {
            "description": "Server Error"
          }
        }
      },
      "get": {
        "tags": ["Users"],
        "summary": "Gets all users",
        "description": "Allow superAdmin to get all users in database",
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "No resource available"
          },
          "401": {
            "description": "Unauthorized request"
          },
          "500": {
            "description": "Server Error"
          }
        }
      },
      "put": {
        "tags": ["Users"],
        "summary": "Update user profile",
        "description": "Modifies user details and saves it to the database.",
        "parameters": [
          {
            "in": "formData",
            "name": "name",
            "type": "string",
            "required": true
          },
          {
            "in": "formData",
            "name": "username",
            "type": "string",
            "required": true
          },
          {
            "in": "formData",
            "name": "email",
            "type": "string",
            "format": "email",
            "required": true
          },
          {
            "in": "formData",
            "name": "password",
            "type": "string",
            "format": "password",
            "required": true
          },
          {
            "in": "formData",
            "name": "confirmPassword",
            "type": "string",
            "format": "password",
            "required": true
          },
          {
            "in": "formData",
            "name": "phoneNo",
            "type": "string",
            "required": true,
            "description": "Phone number: format: +(code)NUMBER"
          },
          {
            "in": "formData",
            "name": "company",
            "type": "string",
            "required": false,
            "description": "Place of work"
          },
          {
            "in": "formData",
            "name": "website",
            "type": "string",
            "required": false,
            "description": "Personal website: format: url"
          }
        ],
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "202": {
            "description": "Successfully updated"
          },
          "400": {
            "description": "Bad Request"
          },
          "404": {
            "description": "Unexisting user"
          },
          "409": {
            "description": "New phone, email or username already exists"
          },
          "403": {
            "description": "Forbidden Request"
          },
          "401": {
            "description": "Unauthorized Request"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/users/{id}": {
      "get": {
        "tags": ["Users"],
        "summary": "gets a user's profile",
        "description": "gets a single user from the database.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "integer",
            "description": "The user to retrieve by ID."
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "User does not exist"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/users/{id}/upgrade": {
      "put": {
        "tags": ["Users"],
        "summary": "Upgrade a user's account",
        "description":
          "Allow a superAdmin to toggle an existing user's account-type between 'regular' and 'admin",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "integer",
            "description": "The user to upgrade by ID."
          },
          {
            "name": "accountType",
            "in": "query",
            "description": "admin or regular",
            "required": true,
            "type": "string"
          }
        ],
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "202": {
            "description": "Successfully Upgraded"
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized transaction"
          },
          "404": {
            "description": "User does not exist"
          },
          "403": {
            "description": "Forbidden request (Unexisting or un authorized)"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/users/changePic": {
      "put": {
        "tags": ["Users"],
        "summary": "Upload profile picture",
        "description": "Allows a user upload new profile picture",
        "consumes": ["application/x-www-form-urlencoded"],
        "parameters": [
          {
            "in": "formData",
            "name": "picture",
            "type": "string",
            "required": true,
            "description": "New profile image. Format: url"
          },
          {
            "in": "formData",
            "name": "publicId",
            "type": "string",
            "required": true,
            "description": "profile Image publicId (cloudinary)"
          }
        ],
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "202": {
            "description": "Successfully uploaded"
          },
          "401": {
            "description": "Unauthorized request"
          },
          "403": {
            "description": "Forbidden request"
          },
          "404": {
            "description": "User does not Exists"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/users/password": {
      "post": {
        "tags": ["Users"],
        "summary": "Recover user password",
        "description": "Resets user password and sends to registered email",
        "consumes": ["application/x-www-form-urlencoded"],
        "parameters": [
          {
            "in": "formData",
            "name": "email",
            "type": "email",
            "required": true
          }
        ],
        "responses": {
          "202": {
            "description": "Successfully reset"
          },
          "400": {
            "description": "Bad request"
          },
          "404": {
            "description": "User does not  Exists"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/centers": {
      "get": {
        "tags": ["Centers"],
        "summary": "Gets all center",
        "description": "gets all center in the database.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "No resource available"
          },
          "500": {
            "description": "Server Error"
          }
        }
      },
      "post": {
        "tags": ["Centers"],
        "summary": "Creates a center",
        "description": "Creates a new center and stores to the database.",
        "parameters": [
          {
            "in": "formData",
            "name": "name",
            "type": "string",
            "required": true,
            "description": "Center name"
          },
          {
            "in": "formData",
            "name": "address",
            "type": "string",
            "required": true,
            "description": "local address"
          },
          {
            "in": "formData",
            "name": "location",
            "type": "string",
            "required": true,
            "description": "State/City"
          },
          {
            "in": "formData",
            "name": "capacity",
            "type": "number",
            "required": true,
            "description": "Center capacity"
          },
          {
            "in": "formData",
            "name": "price",
            "type": "number",
            "required": true,
            "description": "Booking price"
          },
          {
            "in": "formData",
            "name": "availability",
            "type": "string",
            "required": true,
            "description": "open or close"
          },
          {
            "in": "formData",
            "name": "picture",
            "type": "string",
            "required": true,
            "description": "center Image. Format: url"
          },
          {
            "in": "formData",
            "name": "publicId",
            "type": "string",
            "required": true,
            "description": "center Image publicId (cloudinary)"
          }
        ],
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "201": {
            "description": "Center created"
          },
          "400": {
            "description": "Bad Request"
          },
          "403": {
            "description": "Forbidden request"
          },
          "401": {
            "description": "Unauthorized request"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/centers/{id}": {
      "get": {
        "tags": ["Centers"],
        "summary": "gets a single center",
        "description": "gets a center from the database.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "integer",
            "description": "The center to retrieve by ID."
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "Center does not exist"
          },
          "500": {
            "description": "Server Error"
          }
        }
      },
      "put": {
        "tags": ["Centers"],
        "summary": "Modifies a center",
        "description": "modifies a center and saves it to the database.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "integer",
            "description": "The center to update."
          },
          {
            "in": "formData",
            "name": "name",
            "type": "string",
            "required": true,
            "description": "Center name"
          },
          {
            "in": "formData",
            "name": "address",
            "type": "string",
            "required": true,
            "description": "local address"
          },
          {
            "in": "formData",
            "name": "location",
            "type": "string",
            "required": true,
            "description": "State/City"
          },
          {
            "in": "formData",
            "name": "capacity",
            "type": "number",
            "required": true,
            "description": "Center capacity"
          },
          {
            "in": "formData",
            "name": "price",
            "type": "number",
            "required": true,
            "description": "Booking price"
          },
          {
            "in": "formData",
            "name": "availability",
            "type": "string",
            "required": true,
            "description": "open or close"
          },
          {
            "in": "formData",
            "name": "picture",
            "type": "string",
            "description": "Image url"
          },
          {
            "in": "formData",
            "name": "publicId",
            "type": "string",
            "description": "Image publicId (cloudinary)"
          }
        ],
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "202": {
            "description": "Successfully updated"
          },
          "400": {
            "description": "Bad Request"
          },
          "403": {
            "description": "Unexisting item or unauthorized"
          },
          "401": {
            "description": "Unauthorized request"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/events": {
      "get": {
        "tags": ["Events"],
        "summary": "Get all events",
        "description": "Get all events in the database.",
        "responses": {
          "200": {
            "description": "OK"
          },
          "404": {
            "description": "No resource available"
          },
          "500": {
            "description": "Server Error"
          }
        }
      },
      "post": {
        "tags": ["Events"],
        "summary": "Creates a new event",
        "description": "Creates a new events and stores it to the database.",
        "parameters": [
          {
            "name": "title",
            "in": "formData",
            "description": "Title of the event to be created",
            "required": true,
            "type": "string"
          },
          {
            "name": "description",
            "in": "formData",
            "description": "Description of the event to be created",
            "required": true,
            "type": "string"
          },
          {
            "name": "date",
            "in": "formData",
            "description": "Event Date. Format: 'August 18, 2019'",
            "required": true,
            "type": "string"
          },
          {
            "name": "time",
            "in": "formData",
            "description": "Event time. Format: '18:45'",
            "required": true,
            "type": "string"
          },
          {
            "name": "picture",
            "in": "formData",
            "description": "Event pictures",
            "required": false,
            "type": "string"
          },
          {
            "name": "publicId",
            "in": "formData",
            "description": "Event picture publicId (cloudinary)",
            "required": false,
            "type": "string"
          },
          {
            "name": "centerId",
            "in": "formData",
            "description": "id of the center to be booked for event",
            "required": true,
            "type": "integer"
          }
        ],
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successfully created"
          },
          "400": {
            "description": "Bad Request"
          },
          "409": {
            "description": "Center unavailable"
          },
          "500": {
            "description": "Server Error"
          },
          "401": {
            "description": "Unauthorized request"
          },
          "403": {
            "description": "Forbidden request"
          }
        }
      }
    },
    "/events/{id}": {
      "get": {
        "tags": ["Events"],
        "summary": "Gets an event",
        "description": "Get an event in the database.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "integer",
            "description": "The event to get."
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "Bad Request"
          },
          "404": {
            "description": "Unexisting item"
          },
          "500": {
            "description": "Server Error"
          }
        }
      },
      "put": {
        "tags": ["Events"],
        "summary": "Update an event",
        "description": "Update an existing event in the database.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "integer",
            "description": "The event id to update."
          },
          {
            "name": "title",
            "in": "formData",
            "description": "Title of the event to be created",
            "required": true,
            "type": "string"
          },
          {
            "name": "description",
            "in": "formData",
            "description": "Description of the event to be created",
            "required": true,
            "type": "string"
          },
          {
            "name": "date",
            "in": "formData",
            "description": "Event Date. Format: 'August 18, 2019'",
            "required": true,
            "type": "string"
          },
          {
            "name": "time",
            "in": "formData",
            "description": "Event time. Format: '18:45'",
            "required": true,
            "type": "string"
          },
          {
            "name": "picture",
            "in": "formData",
            "description": "Event pictures",
            "required": false,
            "type": "string"
          },
          {
            "name": "publicId",
            "in": "formData",
            "description": "Event picture publicId (cloudinary)",
            "required": false,
            "type": "string"
          },
          {
            "name": "centerId",
            "in": "formData",
            "description": "id of the center to be booked for event",
            "required": true,
            "type": "integer"
          }
        ],
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "201": {
            "description": "Successfully created"
          },
          "400": {
            "description": "Bad Request"
          },
          "409": {
            "description": "Center unavailable"
          },
          "403": {
            "description": "Unexisting item or unauthorized"
          },
          "401": {
            "description": "Unauthorized transaction"
          },
          "500": {
            "description": "Server Error"
          }
        }
      },
      "delete": {
        "tags": ["Events"],
        "summary": "Delete an event",
        "description": "Delete an existing event from the database.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "integer",
            "description": "The event to delete."
          }
        ],
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "401": {
            "description": "Unexisting item or unauthorized"
          },
          "403": {
            "description": "Forbidden request"
          },
          "400": {
            "description": "Bad Request"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/events/approve/{id}": {
      "put": {
        "tags": ["Events"],
        "summary": "Approve an event",
        "description": "Approve an event created by user",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "integer",
            "description": "The event to approve."
          },
          {
            "name": "status",
            "in": "formData",
            "description": "approved or rejected",
            "required": true,
            "type": "string"
          }
        ],
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "202": {
            "description": "Successfully approved"
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized transaction"
          },
          "404": {
            "description": "Event does not exist"
          },
          "403": {
            "description": "No proviledge to approve event"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    },
    "/facilities/{centerId}": {
      "post": {
        "tags": ["Facilities"],
        "summary": "Add or update facilities",
        "description": "Allows a center owner to add or update facilities in bulk",
        "consumes": ["application/x-www-form-urlencoded"],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "type": "integer",
            "description": "The center whose facilities will be updated."
          },
          {
            "in": "body",
            "name": "data",
            "description": "json object containing list of facility data. Remove 'OrderedMap' and 'List' texts in mock data before trying it out. Works on postman",
            "required": true,
            "value": {"content":  [{"name":"fish", "spec":"golden", "quantity":6}]}
          }
        ],
        "security": [
          {
            "UserToken": []
          }
        ],
        "responses": {
          "200": {
            "description": "Successful"
          },
          "401": {
            "description": "Unauthorized request"
          },
          "403": {
            "description": "Forbidden or Unauthorized transaction"
          },
          "500": {
            "description": "Server Error"
          }
        }
      }
    }
  }
}