{"action":"created","comment":{"url":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/comments/207890957","pull_request_review_id":143591250,"id":207890957,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwNzg5MDk1Nw==","diff_hunk":"@@ -0,0 +1,207 @@\n+/**\n+ * @fileOverview this JS file contains logic for user middleware methods\n+ *\n+ * @author  Victor Ukafor\n+ * @requires  NPM:jsonwebtoken\n+ * @version 1.0.0\n+ *\n+ */\n+\n+/**\n+  *  class UserMiddleware\n+  *\n+  */\n+ export default class UserMiddleware {\n+    /**\n+      *  constructor\n+      *  Takes 2 parameters\n+      *  @param {object} jwt the first parameter\n+      *  @param  {object} key the third parameter\n+      *\n+      */\n+    constructor(jwt, key) {\n+      this.jwt = jwt;\n+      this.key = key;\n+      this.checksIfUserAlreadyExist = this.checksIfUserAlreadyExist.bind(this);\n+      this.checksForSignUpRequiredFields = this.checksForSignUpRequiredFields.bind(this);\n+      this.checksIfUserExist = this.checksIfUserExist.bind(this);\n+      this.checksForLogInRequiredFields = this.checksForLogInRequiredFields.bind(this);\n+      this.checksIfUserIsAuthenticated = this.checksIfUserIsAuthenticated.bind(this);\n+    }\n+  \n+    /** A middleware method for checking if user already exist\n+        *  Takes 3 parameters\n+        *  @param {object} req the first parameter\n+        *  @param  {object} res the second parameter\n+        *  @param  {object} next the third parameter\n+        *  @returns {object} return an object\n+        *\n+        * The logic behind this was inspired by 'PostreSQL and NodeJS' article on 'www.mherman.com'\n+        * see full link https://mherman.org/blog/2015/02/12/postgresql-and-nodejs/\n+        */\n+    checksIfUserAlreadyExist(req, res, next) {\n+      const registeredUser = [];\n+      const User = req.client.query('SELECT * FROM account WHERE email=($1);', [req.body.email]);\n+  \n+      User.on('row', (row) => { registeredUser.push(row); });\n+  \n+      User.on('end', () => {\n+        req.done();\n+        if (registeredUser.length > 0) {\n+          return res.status(409).send({ errors: 'An account with this email has already been created!' });\n+        }\n+  \n+        next();\n+      });\n+    }\n+  \n+    /** A method for checking if required fields are filled for signup API\n+        *  Takes 3 parameters\n+        *  @param {object} req the first parameter\n+        *  @param  {object} res the second parameter\n+        *  @param  {object} next the third parameter\n+        *  @returns {object} return an object\n+        */\n+    checksForSignUpRequiredFields(req, res, next) {\n+      const errors = {};\n+  \n+      if (!req.body.firstName) {\n+        errors.firstName = 'First Name field is required';\n+      }\n+  \n+      if (!req.body.lastName) {\n+        errors.lastName = 'Last Name field is required';\n+      }\n+  \n+      if (!req.body.email) {\n+        errors.email = 'Email field is required';\n+      }\n+  \n+      if (req.body.email && req.body.email.indexOf('@') === -1) {\n+        errors.email = 'You\\'ve entered an invalid email';\n+      }\n+  \n+      if (!req.body.password) {\n+        errors.password = 'Password field is required';\n+      }\n+  \n+      if (!req.body.confirm_password) {\n+        errors.confirm_password = 'confirmPassword field is required';\n+      }\n+  \n+      if (req.body.password && req.body.confirm_password &&\n+         req.body.password !== req.body.confirm_password) {\n+        errors.confirm_password = 'Passwords do not match';\n+      }\n+  \n+  \n+      if (Object.keys(errors).length > 0) {\n+        return res.status(400).send({ errors: errors });\n+      }\n+      next();\n+    }\n+  \n+  \n+    /** A method for checking if user exist\n+        *  Takes 3 parameters\n+        *  @param {object} req the first parameter\n+        *  @param  {object} res the second parameter\n+        *  @param  {object} next the third parameter\n+        *  @returns {object} return an object\n+        *\n+        * The logic behind this was inspired by 'PostreSQL and NodeJS' article on 'www.mherman.com'\n+        * see full link https://mherman.org/blog/2015/02/12/postgresql-and-nodejs/\n+        */\n+    checksIfUserExist(req, res, next) {\n+      const authenticatedUser = [];\n+      const User = req.client.query('SELECT * FROM account WHERE email=($1);', [req.body.email]);\n+  \n+      User.on('row', (row) => { authenticatedUser.push(row); });\n+  \n+      User.on('end', () => {\n+        req.done();\n+        if (authenticatedUser.length === 0) {\n+          return res.status(404).send({ errors: 'Invalid email or password!' });\n+        }\n+  \n+        req.user = authenticatedUser[0];\n+        next();\n+      });\n+    }\n+  \n+    /** A middleware method for checking  if login required fields are filled\n+          *  Takes 3 parameters\n+          *  @param {object} req the first parameter\n+          *  @param  {object} res the second parameter\n+          *  @param  {object} next the third parameter\n+          *  @returns {object} return an object\n+          */\n+    checksForLogInRequiredFields(req, res, next) {\n+      const errors = {};\n+  \n+      if (!req.body.email) {\n+        errors.email = 'Email field is required';\n+      }\n+  \n+      if (req.body.email && req.body.email.indexOf('@') === -1) {\n+        errors.email = 'You\\'ve entered an invalid email';\n+      }\n+  \n+      if (!req.body.password) {\n+        errors.password = 'Password field is required';\n+      }\n+  \n+      if (Object.keys(errors).length > 0) {\n+        res.status(400).send({ errors });\n+      } else {\n+        next();\n+      }\n+    }\n+  \n+  \n+    /**\n+     * A middleware method for checking if user is authenticated\n+     * Takes req and res to return the user object\n+     * @param {object} req the request object\n+     * @param {object} res the response object\n+     * @param {object} next the next object\n+     * @returns {object} the user object\n+     *\n+     * The logic behind this was inspired by 'PostreSQL and NodeJS' article on 'www.mherman.com'\n+     * see full link https://mherman.org/blog/2015/02/12/postgresql-and-nodejs/\n+     */\n+    checksIfUserIsAuthenticated(req, res, next) {\n+      const token = req.body.token || req.query.token || req.headers.authentication;\n+      const authenticatedUser = [];\n+  \n+      if (!token) {\n+        return res.status(401).send({\n+          authenticated: false, errors: 'You are not registered user!'\n+        });\n+      }\n+  \n+      this.jwt.verify(token, this.key.secret, (err, authenticated) => {\n+        if (!authenticated) {\n+          return res.status(500).send({\n+            authenticated: false, errors: 'You are not registered user!'\n+          });\n+        }\n+  \n+        const getUser = req.client.query('SELECT * FROM account WHERE user_id=($1)', [authenticated.user_id]);\n+  \n+        getUser.on('row', (row) => { authenticatedUser.push(row); });\n+  \n+        getUser.on('end', () => {\n+          req.done();\n+          if (authenticatedUser.length === 0) {\n+            return res.status(404).send({ message: 'User can not be found!' });\n+          }\n+  \n+          req.user = authenticatedUser[0];\n+          next();\n+        });\n+      });\n+    } ","path":"server/middlewares/user-middlewares.js","position":204,"original_position":204,"commit_id":"14c5829a2ac6d52810bafc1a21fa0668da94fd91","original_commit_id":"14c5829a2ac6d52810bafc1a21fa0668da94fd91","user":{"login":"houndci-bot","id":6697940,"node_id":"MDQ6VXNlcjY2OTc5NDA=","avatar_url":"https://avatars0.githubusercontent.com/u/6697940?v=4","gravatar_id":"","url":"https://api.github.com/users/houndci-bot","html_url":"https://github.com/houndci-bot","followers_url":"https://api.github.com/users/houndci-bot/followers","following_url":"https://api.github.com/users/houndci-bot/following{/other_user}","gists_url":"https://api.github.com/users/houndci-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/houndci-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/houndci-bot/subscriptions","organizations_url":"https://api.github.com/users/houndci-bot/orgs","repos_url":"https://api.github.com/users/houndci-bot/repos","events_url":"https://api.github.com/users/houndci-bot/events{/privacy}","received_events_url":"https://api.github.com/users/houndci-bot/received_events","type":"User","site_admin":false},"body":"Expected indentation of 2 spaces but found 4                                indent<br>Trailing spaces not allowed                                                 no-trailing-spaces","created_at":"2018-08-06T13:28:57Z","updated_at":"2018-08-06T13:28:59Z","html_url":"https://github.com/VictorUkafor/MyDiary/pull/38#discussion_r207890957","pull_request_url":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/38","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/comments/207890957"},"html":{"href":"https://github.com/VictorUkafor/MyDiary/pull/38#discussion_r207890957"},"pull_request":{"href":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/38"}}},"pull_request":{"url":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/38","id":206399113,"node_id":"MDExOlB1bGxSZXF1ZXN0MjA2Mzk5MTEz","html_url":"https://github.com/VictorUkafor/MyDiary/pull/38","diff_url":"https://github.com/VictorUkafor/MyDiary/pull/38.diff","patch_url":"https://github.com/VictorUkafor/MyDiary/pull/38.patch","issue_url":"https://api.github.com/repos/VictorUkafor/MyDiary/issues/38","number":38,"state":"open","locked":false,"title":"#159502828 Split authMiddleware class into several classes to respect SRP","user":{"login":"VictorUkafor","id":13146390,"node_id":"MDQ6VXNlcjEzMTQ2Mzkw","avatar_url":"https://avatars2.githubusercontent.com/u/13146390?v=4","gravatar_id":"","url":"https://api.github.com/users/VictorUkafor","html_url":"https://github.com/VictorUkafor","followers_url":"https://api.github.com/users/VictorUkafor/followers","following_url":"https://api.github.com/users/VictorUkafor/following{/other_user}","gists_url":"https://api.github.com/users/VictorUkafor/gists{/gist_id}","starred_url":"https://api.github.com/users/VictorUkafor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VictorUkafor/subscriptions","organizations_url":"https://api.github.com/users/VictorUkafor/orgs","repos_url":"https://api.github.com/users/VictorUkafor/repos","events_url":"https://api.github.com/users/VictorUkafor/events{/privacy}","received_events_url":"https://api.github.com/users/VictorUkafor/received_events","type":"User","site_admin":false},"body":"What does this PR do?\r\n\r\nThis PR split the long middleware file into several parts to respect SRP\r\n\r\nDescription of Task to be completed?\r\n\r\n- split the authMiddleware class into ;\r\n  1. UserMiddleware: to contain middleware methods for user controller\r\n  2. EntryMiddleware: to contain middleware methods for entry controller\r\n  3. DatabaseMiddleware: to contain middleware methods for database connection and queries\r\n- instantiate the newly created classes in the route file\r\n- call the appropriate methods on the new objects in the relevant API endpoints in route file\r\n- removes and deletes the auth middleware file\r\n\r\n\r\nWhat are the relevant pivotal tracker stories?\r\n\r\n- story type: bug\r\n- story id: #159502828\r\n- story title: Split authMiddleware class into several classes to respect SRP.\r\n\r\nscreenshot\r\nN/A\r\n\r\nQuestions\r\n\r\nN/A","created_at":"2018-08-06T13:28:41Z","updated_at":"2018-08-06T13:28:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f455cb0a2629bfef40f36ec83eac22073224ead6","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/38/commits","review_comments_url":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/38/comments","review_comment_url":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/comments{/number}","comments_url":"https://api.github.com/repos/VictorUkafor/MyDiary/issues/38/comments","statuses_url":"https://api.github.com/repos/VictorUkafor/MyDiary/statuses/14c5829a2ac6d52810bafc1a21fa0668da94fd91","head":{"label":"VictorUkafor:bug-split-authMiddleware-class-into-several-classes-to-respect-SRP-#159502828","ref":"bug-split-authMiddleware-class-into-several-classes-to-respect-SRP-#159502828","sha":"14c5829a2ac6d52810bafc1a21fa0668da94fd91","user":{"login":"VictorUkafor","id":13146390,"node_id":"MDQ6VXNlcjEzMTQ2Mzkw","avatar_url":"https://avatars2.githubusercontent.com/u/13146390?v=4","gravatar_id":"","url":"https://api.github.com/users/VictorUkafor","html_url":"https://github.com/VictorUkafor","followers_url":"https://api.github.com/users/VictorUkafor/followers","following_url":"https://api.github.com/users/VictorUkafor/following{/other_user}","gists_url":"https://api.github.com/users/VictorUkafor/gists{/gist_id}","starred_url":"https://api.github.com/users/VictorUkafor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VictorUkafor/subscriptions","organizations_url":"https://api.github.com/users/VictorUkafor/orgs","repos_url":"https://api.github.com/users/VictorUkafor/repos","events_url":"https://api.github.com/users/VictorUkafor/events{/privacy}","received_events_url":"https://api.github.com/users/VictorUkafor/received_events","type":"User","site_admin":false},"repo":{"id":140021626,"node_id":"MDEwOlJlcG9zaXRvcnkxNDAwMjE2MjY=","name":"MyDiary","full_name":"VictorUkafor/MyDiary","owner":{"login":"VictorUkafor","id":13146390,"node_id":"MDQ6VXNlcjEzMTQ2Mzkw","avatar_url":"https://avatars2.githubusercontent.com/u/13146390?v=4","gravatar_id":"","url":"https://api.github.com/users/VictorUkafor","html_url":"https://github.com/VictorUkafor","followers_url":"https://api.github.com/users/VictorUkafor/followers","following_url":"https://api.github.com/users/VictorUkafor/following{/other_user}","gists_url":"https://api.github.com/users/VictorUkafor/gists{/gist_id}","starred_url":"https://api.github.com/users/VictorUkafor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VictorUkafor/subscriptions","organizations_url":"https://api.github.com/users/VictorUkafor/orgs","repos_url":"https://api.github.com/users/VictorUkafor/repos","events_url":"https://api.github.com/users/VictorUkafor/events{/privacy}","received_events_url":"https://api.github.com/users/VictorUkafor/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/VictorUkafor/MyDiary","description":"MyDiary is an online journal where users can pen down their thoughts and feelings","fork":false,"url":"https://api.github.com/repos/VictorUkafor/MyDiary","forks_url":"https://api.github.com/repos/VictorUkafor/MyDiary/forks","keys_url":"https://api.github.com/repos/VictorUkafor/MyDiary/keys{/key_id}","collaborators_url":"https://api.github.com/repos/VictorUkafor/MyDiary/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/VictorUkafor/MyDiary/teams","hooks_url":"https://api.github.com/repos/VictorUkafor/MyDiary/hooks","issue_events_url":"https://api.github.com/repos/VictorUkafor/MyDiary/issues/events{/number}","events_url":"https://api.github.com/repos/VictorUkafor/MyDiary/events","assignees_url":"https://api.github.com/repos/VictorUkafor/MyDiary/assignees{/user}","branches_url":"https://api.github.com/repos/VictorUkafor/MyDiary/branches{/branch}","tags_url":"https://api.github.com/repos/VictorUkafor/MyDiary/tags","blobs_url":"https://api.github.com/repos/VictorUkafor/MyDiary/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/VictorUkafor/MyDiary/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/VictorUkafor/MyDiary/git/refs{/sha}","trees_url":"https://api.github.com/repos/VictorUkafor/MyDiary/git/trees{/sha}","statuses_url":"https://api.github.com/repos/VictorUkafor/MyDiary/statuses/{sha}","languages_url":"https://api.github.com/repos/VictorUkafor/MyDiary/languages","stargazers_url":"https://api.github.com/repos/VictorUkafor/MyDiary/stargazers","contributors_url":"https://api.github.com/repos/VictorUkafor/MyDiary/contributors","subscribers_url":"https://api.github.com/repos/VictorUkafor/MyDiary/subscribers","subscription_url":"https://api.github.com/repos/VictorUkafor/MyDiary/subscription","commits_url":"https://api.github.com/repos/VictorUkafor/MyDiary/commits{/sha}","git_commits_url":"https://api.github.com/repos/VictorUkafor/MyDiary/git/commits{/sha}","comments_url":"https://api.github.com/repos/VictorUkafor/MyDiary/comments{/number}","issue_comment_url":"https://api.github.com/repos/VictorUkafor/MyDiary/issues/comments{/number}","contents_url":"https://api.github.com/repos/VictorUkafor/MyDiary/contents/{+path}","compare_url":"https://api.github.com/repos/VictorUkafor/MyDiary/compare/{base}...{head}","merges_url":"https://api.github.com/repos/VictorUkafor/MyDiary/merges","archive_url":"https://api.github.com/repos/VictorUkafor/MyDiary/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/VictorUkafor/MyDiary/downloads","issues_url":"https://api.github.com/repos/VictorUkafor/MyDiary/issues{/number}","pulls_url":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls{/number}","milestones_url":"https://api.github.com/repos/VictorUkafor/MyDiary/milestones{/number}","notifications_url":"https://api.github.com/repos/VictorUkafor/MyDiary/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/VictorUkafor/MyDiary/labels{/name}","releases_url":"https://api.github.com/repos/VictorUkafor/MyDiary/releases{/id}","deployments_url":"https://api.github.com/repos/VictorUkafor/MyDiary/deployments","created_at":"2018-07-06T19:13:02Z","updated_at":"2018-07-17T16:14:04Z","pushed_at":"2018-08-06T13:28:41Z","git_url":"git://github.com/VictorUkafor/MyDiary.git","ssh_url":"git@github.com:VictorUkafor/MyDiary.git","clone_url":"https://github.com/VictorUkafor/MyDiary.git","svn_url":"https://github.com/VictorUkafor/MyDiary","homepage":"https://victorukafor.github.io/MyDiary/UI/","size":715,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"VictorUkafor:develop","ref":"develop","sha":"c2297e4728f1278dd24e27b6fe2d894c95204baf","user":{"login":"VictorUkafor","id":13146390,"node_id":"MDQ6VXNlcjEzMTQ2Mzkw","avatar_url":"https://avatars2.githubusercontent.com/u/13146390?v=4","gravatar_id":"","url":"https://api.github.com/users/VictorUkafor","html_url":"https://github.com/VictorUkafor","followers_url":"https://api.github.com/users/VictorUkafor/followers","following_url":"https://api.github.com/users/VictorUkafor/following{/other_user}","gists_url":"https://api.github.com/users/VictorUkafor/gists{/gist_id}","starred_url":"https://api.github.com/users/VictorUkafor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VictorUkafor/subscriptions","organizations_url":"https://api.github.com/users/VictorUkafor/orgs","repos_url":"https://api.github.com/users/VictorUkafor/repos","events_url":"https://api.github.com/users/VictorUkafor/events{/privacy}","received_events_url":"https://api.github.com/users/VictorUkafor/received_events","type":"User","site_admin":false},"repo":{"id":140021626,"node_id":"MDEwOlJlcG9zaXRvcnkxNDAwMjE2MjY=","name":"MyDiary","full_name":"VictorUkafor/MyDiary","owner":{"login":"VictorUkafor","id":13146390,"node_id":"MDQ6VXNlcjEzMTQ2Mzkw","avatar_url":"https://avatars2.githubusercontent.com/u/13146390?v=4","gravatar_id":"","url":"https://api.github.com/users/VictorUkafor","html_url":"https://github.com/VictorUkafor","followers_url":"https://api.github.com/users/VictorUkafor/followers","following_url":"https://api.github.com/users/VictorUkafor/following{/other_user}","gists_url":"https://api.github.com/users/VictorUkafor/gists{/gist_id}","starred_url":"https://api.github.com/users/VictorUkafor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/VictorUkafor/subscriptions","organizations_url":"https://api.github.com/users/VictorUkafor/orgs","repos_url":"https://api.github.com/users/VictorUkafor/repos","events_url":"https://api.github.com/users/VictorUkafor/events{/privacy}","received_events_url":"https://api.github.com/users/VictorUkafor/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/VictorUkafor/MyDiary","description":"MyDiary is an online journal where users can pen down their thoughts and feelings","fork":false,"url":"https://api.github.com/repos/VictorUkafor/MyDiary","forks_url":"https://api.github.com/repos/VictorUkafor/MyDiary/forks","keys_url":"https://api.github.com/repos/VictorUkafor/MyDiary/keys{/key_id}","collaborators_url":"https://api.github.com/repos/VictorUkafor/MyDiary/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/VictorUkafor/MyDiary/teams","hooks_url":"https://api.github.com/repos/VictorUkafor/MyDiary/hooks","issue_events_url":"https://api.github.com/repos/VictorUkafor/MyDiary/issues/events{/number}","events_url":"https://api.github.com/repos/VictorUkafor/MyDiary/events","assignees_url":"https://api.github.com/repos/VictorUkafor/MyDiary/assignees{/user}","branches_url":"https://api.github.com/repos/VictorUkafor/MyDiary/branches{/branch}","tags_url":"https://api.github.com/repos/VictorUkafor/MyDiary/tags","blobs_url":"https://api.github.com/repos/VictorUkafor/MyDiary/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/VictorUkafor/MyDiary/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/VictorUkafor/MyDiary/git/refs{/sha}","trees_url":"https://api.github.com/repos/VictorUkafor/MyDiary/git/trees{/sha}","statuses_url":"https://api.github.com/repos/VictorUkafor/MyDiary/statuses/{sha}","languages_url":"https://api.github.com/repos/VictorUkafor/MyDiary/languages","stargazers_url":"https://api.github.com/repos/VictorUkafor/MyDiary/stargazers","contributors_url":"https://api.github.com/repos/VictorUkafor/MyDiary/contributors","subscribers_url":"https://api.github.com/repos/VictorUkafor/MyDiary/subscribers","subscription_url":"https://api.github.com/repos/VictorUkafor/MyDiary/subscription","commits_url":"https://api.github.com/repos/VictorUkafor/MyDiary/commits{/sha}","git_commits_url":"https://api.github.com/repos/VictorUkafor/MyDiary/git/commits{/sha}","comments_url":"https://api.github.com/repos/VictorUkafor/MyDiary/comments{/number}","issue_comment_url":"https://api.github.com/repos/VictorUkafor/MyDiary/issues/comments{/number}","contents_url":"https://api.github.com/repos/VictorUkafor/MyDiary/contents/{+path}","compare_url":"https://api.github.com/repos/VictorUkafor/MyDiary/compare/{base}...{head}","merges_url":"https://api.github.com/repos/VictorUkafor/MyDiary/merges","archive_url":"https://api.github.com/repos/VictorUkafor/MyDiary/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/VictorUkafor/MyDiary/downloads","issues_url":"https://api.github.com/repos/VictorUkafor/MyDiary/issues{/number}","pulls_url":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls{/number}","milestones_url":"https://api.github.com/repos/VictorUkafor/MyDiary/milestones{/number}","notifications_url":"https://api.github.com/repos/VictorUkafor/MyDiary/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/VictorUkafor/MyDiary/labels{/name}","releases_url":"https://api.github.com/repos/VictorUkafor/MyDiary/releases{/id}","deployments_url":"https://api.github.com/repos/VictorUkafor/MyDiary/deployments","created_at":"2018-07-06T19:13:02Z","updated_at":"2018-07-17T16:14:04Z","pushed_at":"2018-08-06T13:28:41Z","git_url":"git://github.com/VictorUkafor/MyDiary.git","ssh_url":"git@github.com:VictorUkafor/MyDiary.git","clone_url":"https://github.com/VictorUkafor/MyDiary.git","svn_url":"https://github.com/VictorUkafor/MyDiary","homepage":"https://victorukafor.github.io/MyDiary/UI/","size":715,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/38"},"html":{"href":"https://github.com/VictorUkafor/MyDiary/pull/38"},"issue":{"href":"https://api.github.com/repos/VictorUkafor/MyDiary/issues/38"},"comments":{"href":"https://api.github.com/repos/VictorUkafor/MyDiary/issues/38/comments"},"review_comments":{"href":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/38/comments"},"review_comment":{"href":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/VictorUkafor/MyDiary/pulls/38/commits"},"statuses":{"href":"https://api.github.com/repos/VictorUkafor/MyDiary/statuses/14c5829a2ac6d52810bafc1a21fa0668da94fd91"}},"author_association":"OWNER"}}
{"actor":{"display_login":"houndci-bot"}}