{"action":"created","comment":{"url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/comments/230344617","pull_request_review_id":171064010,"id":230344617,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzMDM0NDYxNw==","diff_hunk":"@@ -0,0 +1,234 @@\n+\n+const functions = require('firebase-functions');\n+const admin = require(\"firebase-admin\");\n+\n+const bucket = admin.storage().bucket();\n+const db = admin.database();\n+const helpers = require('./../helpers');\n+\n+\n+\n+const SQR_Helper = require('./SQR_Helper');\n+/////////////////////////////////////////////////\n+//          OnNewAllotment (DB create and update Trigger)\n+//      1. Mark the files in the database --> { status: \"Given\" }\n+//              Function --> UpdateFilesOnNewAllotment\n+//\n+//      2. Send an email to the devotee to notify them of the new allotments\n+//              Function --> sendEmailOnFileAllotment\n+/////////////////////////////////////////////////\n+\n+exports.updateFilesOnNewAllotment = functions.database.ref('/sqr/allotments/{allotment_id}')\n+    .onCreate((snapshot, context) => {\n+        return SQR_Helper.UpdateFilesOnNewAllotment(\n+                snapshot, \n+                db,\n+                helpers.updateFile\n+            );\n+});\n+\n+exports.sendEmailOnFileAllotment = functions.database.ref('/sqr/allotments/{allotment_id}')\n+    .onUpdate((change, context) => {\n+        const old = change.before.val();\n+        const _new = change.after.val();        \n+        let coordinatorConfig = functions.config().audioseva.coordinator;\n+        \n+        db.ref('/sqr/allotments').once('value')\n+        .then(snapshot => {\n+            const allotments = snapshot.val();\n+            let alloted_num = 0, alloted_before = false;\n+            for(let key in allotments) {\n+                let allotment = allotments[key];\n+                if(allotment.devotee)\n+                    if(allotment.devotee.emailAddress)\n+                        if(allotment.devotee.emailAddress === _new.devotee.emailAddress)\n+                            alloted_before++;\n+            }\n+            if (alloted_before > 1)\n+                alloted_before = true;\n+            SQR_Helper.sendEmailOnFileAllotment(coordinatorConfig, old, _new, change.after, alloted_before, helpers.sendEmail)\n+            return 1;\n+        }).catch(err => console.log(err));\n+        \n+        return 1;\n+});\n+\n+\n+/////////////////////////////////////////////////\n+//          Sync Storage to DB (HTTP Trigger)\n+//\n+//      1. Add the currently uploaded MP3s into the DB\n+//              Function --> handleCurrentlyUploadedFiles\n+//\n+//      2. Remove DB entries for MP3s that don't exist\n+//              Function --> removeNonExistingMp3DBEntries\n+/////////////////////////////////////////////////\n+\n+exports.syncStorageToDB = functions.https.onRequest((req, res) => {\n+    SQR_Helper.handleCurrentlyUploadedFiles(bucket, db, helpers.storeFileNameToDB);\n+    SQR_Helper.removeNonExistingMp3DBEntries(bucket, db, helpers.removeFileNameFromDB);\n+    return res.send(`Started Execution, the process is now Running in the background`);\n+});\n+\n+\n+/////////////////////////////////////////////////\n+//          Add MP3 name to DB (Storage Upload Trigger)\n+//\n+//      1. Add a newly MP3 name to the database\n+//              Function --> handleCurrentlyUploadedFiles\n+//\n+//      2. Remove DB entries for MP3s that don't exist\n+//              Function --> removeNonExistingMp3DBEntries\n+/////////////////////////////////////////////////\n+\n+\n+exports.importMP3IntoSQR = functions.storage.object().onFinalize( object => {\n+    return SQR_Helper.handleNewUploads(object, db, helpers);\n+});\n+\n+\n+/////////////////////////////////////////////////\n+//          SQR Submission Processing (DB create Trigger)\n+//\n+//      1. Add the webform data to a SQR submissions DB path\n+//      2. Update the allotment to reflect the current state of the audio file\n+//      3. Notifying the coordinator using a mail that holds the following information\n+//          3.1 the current submission information\n+//          3.2 the data of the file in the submission\n+//          3.3 the list of all the files alloted to the devotee of the current submission\n+//          3.4 a boolean value indicating whether this is the first submission of this devotee or not\n+//              Function --> processSubmissions\n+/////////////////////////////////////////////////\n+\n+\n+exports.processSubmissions = functions.database.ref('/webforms/sqr/{submission_id}')\n+    .onCreate((snapshot, context) => {\n+        const original = snapshot.val();\n+\n+        let audioFileStatus = 'WIP';\n+        \n+\n+        if(original.not_preferred_language) \n+            audioFileStatus = 'Spare';        \n+        else if(original.unable_to_play_or_download)\n+            audioFileStatus = 'Audio Problem';\n+        \n+\n+        // 1. Add the webform data to a SQR submissions DB path\n+        let submission = {\n+            fileName: original.audio_file_name,\n+            cancellation: {\n+                notPreferredLanguage: audioFileStatus === 'Spare',\n+                audioProblem: audioFileStatus === 'Audio Problem'\n+            },\n+            soundQualityRating: original.sound_quality_rating,\n+            unwantedParts: original.unwanted_parts,\n+            soundIssues: original.sound_issues,\n+            duration: {\n+                beginning: original.beginning,\n+                ending: original.ending,\n+            },\n+            comments: original.comments,\n+            token: original.token,\n+            created: original.created, \n+            //  timestamp of the submission creation,\n+            // can differ from COMPLETED in case of saving a DRAFT and completing later.\n+            completed: original.completed, // timestamp of the submission completion.\n+            changed: original.changed, //timestamp of the submission update.\n+            devotee: {\n+                name: original.name,\n+                emailAddress: original.email_address\n+            }\n+        };\n+        db.ref(`/sqr/submissions/${original.serial}`).update(submission);\n+\n+\n+\n+        // 2. Update the allotment\n+        let allotmentUpdates = { status: audioFileStatus };\n+\n+        // in case 1 & 2 add the comments to the notes\n+        if (audioFileStatus !== 'WIP')\n+            allotmentUpdates.notes = original.comments;\n+        \n+        // if the audio has a problem then REMOVE the devotee from the file allotment\n+        if(audioFileStatus === 'audioProblem')\n+            allotmentUpdates.devotee = {};\n+\n+        db.ref(`/sqr/files/${original.list}/${original.audio_file_name}`).update(allotmentUpdates);\n+\n+\n+\n+\n+        // Coordinator object example { templateid: 3, email:'a@a.a', name: 'Aj' }\n+        let coordinator = functions.config().audioseva.coordinator;\n+        // 3. Notify the coordinator\n+        // 3.1 Get the submitted audio file data\n+\n+        //  EXTRACTING the list name first from the file_name\n+        let list = original.audio_file_name.match(/^[^-]*[^ -]/g)[0];\n+        let file_name = original.audio_file_name.slice( list.length + 1, original.audio_file_name.length );\n+        \n+        db.ref(`/sqr/files/${list}/${file_name}`).once('value')\n+        .then(snapshot => {\n+            if(snapshot.exists()) {\n+                let fileData = snapshot.val();\n+\n+                // 3.2 Get the devotee's Allotments in ('given' || 'WIP') state\n+                // Using the /sqr/files here instead of /sqr/allotmens to be able to check for the \n+                // state of ('given' || 'WIP')\n+                db.ref(`/sqr/files`).once('value')","path":"functions/src/SQR.functions.js","position":255,"original_position":180,"commit_id":"d8206823e878ae9c6f6a21a5bceb86743ba57c93","original_commit_id":"d751d1507866e475525ac6516cce3512b2aca70f","user":{"login":"anantakrishna","id":6065071,"node_id":"MDQ6VXNlcjYwNjUwNzE=","avatar_url":"https://avatars2.githubusercontent.com/u/6065071?v=4","gravatar_id":"","url":"https://api.github.com/users/anantakrishna","html_url":"https://github.com/anantakrishna","followers_url":"https://api.github.com/users/anantakrishna/followers","following_url":"https://api.github.com/users/anantakrishna/following{/other_user}","gists_url":"https://api.github.com/users/anantakrishna/gists{/gist_id}","starred_url":"https://api.github.com/users/anantakrishna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anantakrishna/subscriptions","organizations_url":"https://api.github.com/users/anantakrishna/orgs","repos_url":"https://api.github.com/users/anantakrishna/repos","events_url":"https://api.github.com/users/anantakrishna/events{/privacy}","received_events_url":"https://api.github.com/users/anantakrishna/received_events","type":"User","site_admin":false},"body":"I cannot understand the problem. Can you rephrase the question?","created_at":"2018-11-02T11:34:11Z","updated_at":"2018-11-02T11:34:11Z","html_url":"https://github.com/PureBhaktiArchive/audioseva/pull/9#discussion_r230344617","pull_request_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/9","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/comments/230344617"},"html":{"href":"https://github.com/PureBhaktiArchive/audioseva/pull/9#discussion_r230344617"},"pull_request":{"href":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/9"}},"in_reply_to_id":230014225},"pull_request":{"url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/9","id":227254745,"node_id":"MDExOlB1bGxSZXF1ZXN0MjI3MjU0NzQ1","html_url":"https://github.com/PureBhaktiArchive/audioseva/pull/9","diff_url":"https://github.com/PureBhaktiArchive/audioseva/pull/9.diff","patch_url":"https://github.com/PureBhaktiArchive/audioseva/pull/9.patch","issue_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/issues/9","number":9,"state":"open","locked":false,"title":"SQR allotment processing & SQR submissions processing","user":{"login":"ahmad-elbatanouni","id":1976151,"node_id":"MDQ6VXNlcjE5NzYxNTE=","avatar_url":"https://avatars0.githubusercontent.com/u/1976151?v=4","gravatar_id":"","url":"https://api.github.com/users/ahmad-elbatanouni","html_url":"https://github.com/ahmad-elbatanouni","followers_url":"https://api.github.com/users/ahmad-elbatanouni/followers","following_url":"https://api.github.com/users/ahmad-elbatanouni/following{/other_user}","gists_url":"https://api.github.com/users/ahmad-elbatanouni/gists{/gist_id}","starred_url":"https://api.github.com/users/ahmad-elbatanouni/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ahmad-elbatanouni/subscriptions","organizations_url":"https://api.github.com/users/ahmad-elbatanouni/orgs","repos_url":"https://api.github.com/users/ahmad-elbatanouni/repos","events_url":"https://api.github.com/users/ahmad-elbatanouni/events{/privacy}","received_events_url":"https://api.github.com/users/ahmad-elbatanouni/received_events","type":"User","site_admin":false},"body":"**1. SQR allotment processing**\r\n1. sends a notification email to the selected devotee using sendInBlue **Node.js** API.\r\n2. sets the file status to **`Given`**.\r\n3. sets the **allotments** sub-object under the allotted file path.\r\n\r\n**2. SQR submissions processing**\r\n1. Copies the form submitted data under **`/sqr/submissions`**\r\n2. Updates the allotment according to the rules specified.\r\n3. sends a notification email to the coordinator with all the data of the **submission**, **file**, **devotee's allotments**, a Boolean indicating if this is the first submission by this devotee or not.","created_at":"2018-10-31T11:46:29Z","updated_at":"2018-11-02T11:34:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b831aaa09ce2d90c0cb9ba48e45731eebba5f1ef","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/9/commits","review_comments_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/9/comments","review_comment_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/issues/9/comments","statuses_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/statuses/d8206823e878ae9c6f6a21a5bceb86743ba57c93","head":{"label":"PureBhaktiArchive:sqr-allotment-processing_sqr-submissions-processing","ref":"sqr-allotment-processing_sqr-submissions-processing","sha":"d8206823e878ae9c6f6a21a5bceb86743ba57c93","user":{"login":"PureBhaktiArchive","id":36103358,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM2MTAzMzU4","avatar_url":"https://avatars1.githubusercontent.com/u/36103358?v=4","gravatar_id":"","url":"https://api.github.com/users/PureBhaktiArchive","html_url":"https://github.com/PureBhaktiArchive","followers_url":"https://api.github.com/users/PureBhaktiArchive/followers","following_url":"https://api.github.com/users/PureBhaktiArchive/following{/other_user}","gists_url":"https://api.github.com/users/PureBhaktiArchive/gists{/gist_id}","starred_url":"https://api.github.com/users/PureBhaktiArchive/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PureBhaktiArchive/subscriptions","organizations_url":"https://api.github.com/users/PureBhaktiArchive/orgs","repos_url":"https://api.github.com/users/PureBhaktiArchive/repos","events_url":"https://api.github.com/users/PureBhaktiArchive/events{/privacy}","received_events_url":"https://api.github.com/users/PureBhaktiArchive/received_events","type":"Organization","site_admin":false},"repo":{"id":123226580,"node_id":"MDEwOlJlcG9zaXRvcnkxMjMyMjY1ODA=","name":"audioseva","full_name":"PureBhaktiArchive/audioseva","private":false,"owner":{"login":"PureBhaktiArchive","id":36103358,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM2MTAzMzU4","avatar_url":"https://avatars1.githubusercontent.com/u/36103358?v=4","gravatar_id":"","url":"https://api.github.com/users/PureBhaktiArchive","html_url":"https://github.com/PureBhaktiArchive","followers_url":"https://api.github.com/users/PureBhaktiArchive/followers","following_url":"https://api.github.com/users/PureBhaktiArchive/following{/other_user}","gists_url":"https://api.github.com/users/PureBhaktiArchive/gists{/gist_id}","starred_url":"https://api.github.com/users/PureBhaktiArchive/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PureBhaktiArchive/subscriptions","organizations_url":"https://api.github.com/users/PureBhaktiArchive/orgs","repos_url":"https://api.github.com/users/PureBhaktiArchive/repos","events_url":"https://api.github.com/users/PureBhaktiArchive/events{/privacy}","received_events_url":"https://api.github.com/users/PureBhaktiArchive/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PureBhaktiArchive/audioseva","description":"http://purebhakti.info/audioseva/","fork":false,"url":"https://api.github.com/repos/PureBhaktiArchive/audioseva","forks_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/forks","keys_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/teams","hooks_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/hooks","issue_events_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/issues/events{/number}","events_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/events","assignees_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/assignees{/user}","branches_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/branches{/branch}","tags_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/tags","blobs_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/git/refs{/sha}","trees_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/statuses/{sha}","languages_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/languages","stargazers_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/stargazers","contributors_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/contributors","subscribers_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/subscribers","subscription_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/subscription","commits_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/commits{/sha}","git_commits_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/git/commits{/sha}","comments_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/comments{/number}","issue_comment_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/issues/comments{/number}","contents_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/contents/{+path}","compare_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/merges","archive_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/downloads","issues_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/issues{/number}","pulls_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls{/number}","milestones_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/milestones{/number}","notifications_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/labels{/name}","releases_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/releases{/id}","deployments_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/deployments","created_at":"2018-02-28T03:57:00Z","updated_at":"2018-10-27T06:30:37Z","pushed_at":"2018-11-01T19:56:37Z","git_url":"git://github.com/PureBhaktiArchive/audioseva.git","ssh_url":"git@github.com:PureBhaktiArchive/audioseva.git","clone_url":"https://github.com/PureBhaktiArchive/audioseva.git","svn_url":"https://github.com/PureBhaktiArchive/audioseva","homepage":null,"size":857,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"base":{"label":"PureBhaktiArchive:master","ref":"master","sha":"7cf6f3e16d8cd75141ca768ace911b4e6b9a8998","user":{"login":"PureBhaktiArchive","id":36103358,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM2MTAzMzU4","avatar_url":"https://avatars1.githubusercontent.com/u/36103358?v=4","gravatar_id":"","url":"https://api.github.com/users/PureBhaktiArchive","html_url":"https://github.com/PureBhaktiArchive","followers_url":"https://api.github.com/users/PureBhaktiArchive/followers","following_url":"https://api.github.com/users/PureBhaktiArchive/following{/other_user}","gists_url":"https://api.github.com/users/PureBhaktiArchive/gists{/gist_id}","starred_url":"https://api.github.com/users/PureBhaktiArchive/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PureBhaktiArchive/subscriptions","organizations_url":"https://api.github.com/users/PureBhaktiArchive/orgs","repos_url":"https://api.github.com/users/PureBhaktiArchive/repos","events_url":"https://api.github.com/users/PureBhaktiArchive/events{/privacy}","received_events_url":"https://api.github.com/users/PureBhaktiArchive/received_events","type":"Organization","site_admin":false},"repo":{"id":123226580,"node_id":"MDEwOlJlcG9zaXRvcnkxMjMyMjY1ODA=","name":"audioseva","full_name":"PureBhaktiArchive/audioseva","private":false,"owner":{"login":"PureBhaktiArchive","id":36103358,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM2MTAzMzU4","avatar_url":"https://avatars1.githubusercontent.com/u/36103358?v=4","gravatar_id":"","url":"https://api.github.com/users/PureBhaktiArchive","html_url":"https://github.com/PureBhaktiArchive","followers_url":"https://api.github.com/users/PureBhaktiArchive/followers","following_url":"https://api.github.com/users/PureBhaktiArchive/following{/other_user}","gists_url":"https://api.github.com/users/PureBhaktiArchive/gists{/gist_id}","starred_url":"https://api.github.com/users/PureBhaktiArchive/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PureBhaktiArchive/subscriptions","organizations_url":"https://api.github.com/users/PureBhaktiArchive/orgs","repos_url":"https://api.github.com/users/PureBhaktiArchive/repos","events_url":"https://api.github.com/users/PureBhaktiArchive/events{/privacy}","received_events_url":"https://api.github.com/users/PureBhaktiArchive/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/PureBhaktiArchive/audioseva","description":"http://purebhakti.info/audioseva/","fork":false,"url":"https://api.github.com/repos/PureBhaktiArchive/audioseva","forks_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/forks","keys_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/teams","hooks_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/hooks","issue_events_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/issues/events{/number}","events_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/events","assignees_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/assignees{/user}","branches_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/branches{/branch}","tags_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/tags","blobs_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/git/refs{/sha}","trees_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/statuses/{sha}","languages_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/languages","stargazers_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/stargazers","contributors_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/contributors","subscribers_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/subscribers","subscription_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/subscription","commits_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/commits{/sha}","git_commits_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/git/commits{/sha}","comments_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/comments{/number}","issue_comment_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/issues/comments{/number}","contents_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/contents/{+path}","compare_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/merges","archive_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/downloads","issues_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/issues{/number}","pulls_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls{/number}","milestones_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/milestones{/number}","notifications_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/labels{/name}","releases_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/releases{/id}","deployments_url":"https://api.github.com/repos/PureBhaktiArchive/audioseva/deployments","created_at":"2018-02-28T03:57:00Z","updated_at":"2018-10-27T06:30:37Z","pushed_at":"2018-11-01T19:56:37Z","git_url":"git://github.com/PureBhaktiArchive/audioseva.git","ssh_url":"git@github.com:PureBhaktiArchive/audioseva.git","clone_url":"https://github.com/PureBhaktiArchive/audioseva.git","svn_url":"https://github.com/PureBhaktiArchive/audioseva","homepage":null,"size":857,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":2,"license":null,"forks":0,"open_issues":2,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/9"},"html":{"href":"https://github.com/PureBhaktiArchive/audioseva/pull/9"},"issue":{"href":"https://api.github.com/repos/PureBhaktiArchive/audioseva/issues/9"},"comments":{"href":"https://api.github.com/repos/PureBhaktiArchive/audioseva/issues/9/comments"},"review_comments":{"href":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/9/comments"},"review_comment":{"href":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PureBhaktiArchive/audioseva/pulls/9/commits"},"statuses":{"href":"https://api.github.com/repos/PureBhaktiArchive/audioseva/statuses/d8206823e878ae9c6f6a21a5bceb86743ba57c93"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"anantakrishna"}}