{"action":"created","comment":{"url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/comments/113326599","pull_request_review_id":34705098,"id":113326599,"diff_hunk":"@@ -0,0 +1,397 @@\n+package tds.exam.services.item.selection;\n+\n+import TDS.Shared.Exceptions.ReturnStatusException;\n+import org.springframework.beans.factory.annotation.Autowired;\n+import org.springframework.stereotype.Service;\n+\n+import java.util.ArrayList;\n+import java.util.Collections;\n+import java.util.Comparator;\n+import java.util.HashSet;\n+import java.util.List;\n+import java.util.Map;\n+import java.util.Optional;\n+import java.util.Set;\n+import java.util.UUID;\n+import java.util.stream.Collectors;\n+\n+import tds.assessment.Assessment;\n+import tds.assessment.Item;\n+import tds.assessment.Segment;\n+import tds.common.Algorithm;\n+import tds.dll.api.IItemSelectionDLL;\n+import tds.exam.ExamItem;\n+import tds.exam.ExamItemResponse;\n+import tds.exam.ExamItemResponseScore;\n+import tds.exam.ExamPage;\n+import tds.exam.ExamSegment;\n+import tds.exam.ExpandableExam;\n+import tds.exam.ExpandableExamAttributes;\n+import tds.exam.models.FieldTestItemGroup;\n+import tds.exam.services.AssessmentService;\n+import tds.exam.services.ExamSegmentService;\n+import tds.exam.services.ExpandableExamService;\n+import tds.exam.services.FieldTestService;\n+import tds.itemselection.api.ItemSelectionException;\n+import tds.itemselection.base.ItemCandidatesData;\n+import tds.itemselection.base.ItemGroup;\n+import tds.itemselection.impl.ItemResponse;\n+import tds.itemselection.loader.StudentHistory2013;\n+import tds.itemselection.loader.TestSegment;\n+import tds.itemselection.model.OffGradeResponse;\n+import tds.itemselection.services.ItemCandidatesService;\n+import tds.itemselection.services.SegmentService;\n+\n+@Service\n+public class ItemCandidateServiceImpl implements ItemCandidatesService {\n+    private final ExpandableExamService expandableExamService;\n+    private final FieldTestService fieldTestService;\n+    private final ExamSegmentService examSegmentService;\n+    private final AssessmentService assessmentService;\n+    private final SegmentService segmentService;\n+\n+    private final static String ADAPTIVE = \"adaptive\";\n+    private final static String FIELD_TEST = \"fieldtest\";\n+\n+    @Autowired\n+    public ItemCandidateServiceImpl(final ExpandableExamService expandableExamService, final FieldTestService fieldTestService, final ExamSegmentService examSegmentService, final AssessmentService assessmentService, final SegmentService segmentService) {\n+        this.expandableExamService = expandableExamService;\n+        this.fieldTestService = fieldTestService;\n+        this.examSegmentService = examSegmentService;\n+        this.assessmentService = assessmentService;\n+        this.segmentService = segmentService;\n+    }\n+\n+    @Override\n+    public ItemCandidatesData getItemCandidates(UUID examId) throws ReturnStatusException {\n+        //Port of ItemSelectionDLL.AA_GetNextItemCandidates_SP\n+        return getAllItemCandidates(examId).get(0);\n+    }\n+\n+    @Override\n+    public List<ItemCandidatesData> getAllItemCandidates(UUID examId) throws ReturnStatusException {\n+        //Port of ItemSelectionDLL.AA_GetNextItemCandidates_SP\n+        ExpandableExam exam = expandableExamService.findExam(examId, ExpandableExamAttributes.EXAM_SEGMENTS, ExpandableExamAttributes.EXAM_PAGE_AND_ITEMS)\n+            .orElseThrow(() -> new ReturnStatusException(\"Could not find Exam for id\" + examId));\n+\n+        Assessment assessment = assessmentService.findAssessment(exam.getExam().getClientName(), exam.getExam().getAssessmentKey())\n+            .orElseThrow(() -> new ReturnStatusException(\"Could not find assessment for \" + exam.getExam().getAssessmentKey()));\n+\n+        List<SegmentHolder> segments = mapSegmentToItems(exam);\n+\n+        List<SegmentHolder> unsatisfiedSegments = segments.stream()\n+            .filter(segmentHolder -> !segmentHolder.examSegment.isSatisfied())\n+            .collect(Collectors.toList());\n+\n+        final List<FieldTestItemGroup> fieldTestItemGroups = fieldTestService.findUsageInExam(examId);\n+\n+        //Only care about non deleted nor administered field tests\n+        final Map<String, List<FieldTestItemGroup>> fieldTestItemsBySegmentKey = fieldTestItemGroups.stream()\n+            .filter(fieldTestItemGroup -> !fieldTestItemGroup.isDeleted() && fieldTestItemGroup.getAdministeredAt() == null)\n+            .collect(Collectors.groupingBy(FieldTestItemGroup::getSegmentKey));\n+\n+        if (unsatisfiedSegments.isEmpty()) {\n+            return Collections.singletonList(new ItemCandidatesData(examId, IItemSelectionDLL.SATISFIED));\n+        }\n+\n+        List<ExamSegment> satisfiedSegments = new ArrayList<>();\n+        List<SegmentHolder> nonSatisfiedSegments = new ArrayList<>();\n+        for (SegmentHolder segment : unsatisfiedSegments) {\n+            long nonFieldTestItemCount = segment.items.stream()\n+                .filter(examItem -> !examItem.isFieldTest())\n+                .count();\n+\n+            long fieldTestItemCount = segment.items.stream()\n+                .filter(ExamItem::isFieldTest)\n+                .count();\n+\n+            final ExamSegment examSegment = segment.examSegment;\n+            boolean fieldTestItemsSatisfied = fieldTestItemsBySegmentKey.containsKey(examSegment.getSegmentKey())\n+                && fieldTestItemsBySegmentKey.get(examSegment.getSegmentKey()).isEmpty();\n+\n+            if (examSegment.getAlgorithm().getType().contains(ADAPTIVE)\n+                && examSegment.getExamItemCount() == nonFieldTestItemCount\n+                && fieldTestItemsSatisfied) {\n+                satisfiedSegments.add(examSegment);","path":"service/src/main/java/tds/exam/services/item/selection/ItemCandidateServiceImpl.java","position":115,"original_position":115,"commit_id":"bd681e3eb3545f6f7c982448c89bdf98f40dc4ea","original_commit_id":"bd681e3eb3545f6f7c982448c89bdf98f40dc4ea","user":{"login":"millerts","id":726145,"avatar_url":"https://avatars2.githubusercontent.com/u/726145?v=3","gravatar_id":"","url":"https://api.github.com/users/millerts","html_url":"https://github.com/millerts","followers_url":"https://api.github.com/users/millerts/followers","following_url":"https://api.github.com/users/millerts/following{/other_user}","gists_url":"https://api.github.com/users/millerts/gists{/gist_id}","starred_url":"https://api.github.com/users/millerts/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/millerts/subscriptions","organizations_url":"https://api.github.com/users/millerts/orgs","repos_url":"https://api.github.com/users/millerts/repos","events_url":"https://api.github.com/users/millerts/events{/privacy}","received_events_url":"https://api.github.com/users/millerts/received_events","type":"User","site_admin":false},"body":"It is true if:\r\n\r\n1. Algorithm type for the exam segment is `ADAPTIVE`\r\n2. The number of items for the segment (ignoring field test items) == the number of items expected for a segment.\r\n3. All field test items required for the item group have been satisfied\r\n\r\nSorry if this is information you know, but field test items are items that will be presented and answered by students but are not included in scoring nor satisfy the required number of items for a segment.  FieldTestItems are the way SBAC verify that potential new items fit within their statistical model for student scoring.","created_at":"2017-04-25T22:24:05Z","updated_at":"2017-04-25T22:24:05Z","html_url":"https://github.com/SmarterApp/TDS_ExamService/pull/159#discussion_r113326599","pull_request_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/159","_links":{"self":{"href":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/comments/113326599"},"html":{"href":"https://github.com/SmarterApp/TDS_ExamService/pull/159#discussion_r113326599"},"pull_request":{"href":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/159"}}},"pull_request":{"url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/159","id":117558304,"html_url":"https://github.com/SmarterApp/TDS_ExamService/pull/159","diff_url":"https://github.com/SmarterApp/TDS_ExamService/pull/159.diff","patch_url":"https://github.com/SmarterApp/TDS_ExamService/pull/159.patch","issue_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/issues/159","number":159,"state":"open","locked":false,"title":"Feature/item selection","user":{"login":"millerts","id":726145,"avatar_url":"https://avatars2.githubusercontent.com/u/726145?v=3","gravatar_id":"","url":"https://api.github.com/users/millerts","html_url":"https://github.com/millerts","followers_url":"https://api.github.com/users/millerts/followers","following_url":"https://api.github.com/users/millerts/following{/other_user}","gists_url":"https://api.github.com/users/millerts/gists{/gist_id}","starred_url":"https://api.github.com/users/millerts/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/millerts/subscriptions","organizations_url":"https://api.github.com/users/millerts/orgs","repos_url":"https://api.github.com/users/millerts/repos","events_url":"https://api.github.com/users/millerts/events{/privacy}","received_events_url":"https://api.github.com/users/millerts/received_events","type":"User","site_admin":false},"body":"I'm still doing some testing, but I feel confident enough that this can be reviewed.  Any future changes should be as simple as find x value from y instead of z.\r\n\r\nA lot of the internal interfaces being used are from ItemSelectionShell.  Feel free to look at the item-selection-components module for more context.\r\n\r\nCouple general notes:\r\n- Some classes have unimplemented implementations or have comments like `//Do we need this`.  Since I was focused on getting `FixedForm` assessments working I ignored the implementations needed for adaptive and msb, which i will tackle next.\r\n- There may be some inefficiencies in the way we fetch data, but we're kinda stuck with it for now since we chose to use the existing item selection code rather than rewriting to a spec.","created_at":"2017-04-25T19:07:26Z","updated_at":"2017-04-25T22:24:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a0739e980cb941690f40053ffe156e222c7c7f51","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/159/commits","review_comments_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/159/comments","review_comment_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/issues/159/comments","statuses_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/statuses/bd681e3eb3545f6f7c982448c89bdf98f40dc4ea","head":{"label":"SmarterApp:feature/itemSelection","ref":"feature/itemSelection","sha":"bd681e3eb3545f6f7c982448c89bdf98f40dc4ea","user":{"login":"SmarterApp","id":7026395,"avatar_url":"https://avatars3.githubusercontent.com/u/7026395?v=3","gravatar_id":"","url":"https://api.github.com/users/SmarterApp","html_url":"https://github.com/SmarterApp","followers_url":"https://api.github.com/users/SmarterApp/followers","following_url":"https://api.github.com/users/SmarterApp/following{/other_user}","gists_url":"https://api.github.com/users/SmarterApp/gists{/gist_id}","starred_url":"https://api.github.com/users/SmarterApp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SmarterApp/subscriptions","organizations_url":"https://api.github.com/users/SmarterApp/orgs","repos_url":"https://api.github.com/users/SmarterApp/repos","events_url":"https://api.github.com/users/SmarterApp/events{/privacy}","received_events_url":"https://api.github.com/users/SmarterApp/received_events","type":"Organization","site_admin":false},"repo":{"id":66864369,"name":"TDS_ExamService","full_name":"SmarterApp/TDS_ExamService","owner":{"login":"SmarterApp","id":7026395,"avatar_url":"https://avatars3.githubusercontent.com/u/7026395?v=3","gravatar_id":"","url":"https://api.github.com/users/SmarterApp","html_url":"https://github.com/SmarterApp","followers_url":"https://api.github.com/users/SmarterApp/followers","following_url":"https://api.github.com/users/SmarterApp/following{/other_user}","gists_url":"https://api.github.com/users/SmarterApp/gists{/gist_id}","starred_url":"https://api.github.com/users/SmarterApp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SmarterApp/subscriptions","organizations_url":"https://api.github.com/users/SmarterApp/orgs","repos_url":"https://api.github.com/users/SmarterApp/repos","events_url":"https://api.github.com/users/SmarterApp/events{/privacy}","received_events_url":"https://api.github.com/users/SmarterApp/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SmarterApp/TDS_ExamService","description":null,"fork":false,"url":"https://api.github.com/repos/SmarterApp/TDS_ExamService","forks_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/forks","keys_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/teams","hooks_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/hooks","issue_events_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/issues/events{/number}","events_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/events","assignees_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/assignees{/user}","branches_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/branches{/branch}","tags_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/tags","blobs_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/git/refs{/sha}","trees_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/statuses/{sha}","languages_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/languages","stargazers_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/stargazers","contributors_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/contributors","subscribers_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/subscribers","subscription_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/subscription","commits_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/commits{/sha}","git_commits_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/git/commits{/sha}","comments_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/comments{/number}","issue_comment_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/issues/comments{/number}","contents_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/contents/{+path}","compare_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/merges","archive_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/downloads","issues_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/issues{/number}","pulls_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls{/number}","milestones_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/milestones{/number}","notifications_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/labels{/name}","releases_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/releases{/id}","deployments_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/deployments","created_at":"2016-08-29T17:20:35Z","updated_at":"2016-11-29T18:52:03Z","pushed_at":"2017-04-25T21:27:18Z","git_url":"git://github.com/SmarterApp/TDS_ExamService.git","ssh_url":"git@github.com:SmarterApp/TDS_ExamService.git","clone_url":"https://github.com/SmarterApp/TDS_ExamService.git","svn_url":"https://github.com/SmarterApp/TDS_ExamService","homepage":null,"size":1432,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":0,"default_branch":"develop"}},"base":{"label":"SmarterApp:develop","ref":"develop","sha":"d7bf61c916c971d83e490b74aa1197e919fa23f0","user":{"login":"SmarterApp","id":7026395,"avatar_url":"https://avatars3.githubusercontent.com/u/7026395?v=3","gravatar_id":"","url":"https://api.github.com/users/SmarterApp","html_url":"https://github.com/SmarterApp","followers_url":"https://api.github.com/users/SmarterApp/followers","following_url":"https://api.github.com/users/SmarterApp/following{/other_user}","gists_url":"https://api.github.com/users/SmarterApp/gists{/gist_id}","starred_url":"https://api.github.com/users/SmarterApp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SmarterApp/subscriptions","organizations_url":"https://api.github.com/users/SmarterApp/orgs","repos_url":"https://api.github.com/users/SmarterApp/repos","events_url":"https://api.github.com/users/SmarterApp/events{/privacy}","received_events_url":"https://api.github.com/users/SmarterApp/received_events","type":"Organization","site_admin":false},"repo":{"id":66864369,"name":"TDS_ExamService","full_name":"SmarterApp/TDS_ExamService","owner":{"login":"SmarterApp","id":7026395,"avatar_url":"https://avatars3.githubusercontent.com/u/7026395?v=3","gravatar_id":"","url":"https://api.github.com/users/SmarterApp","html_url":"https://github.com/SmarterApp","followers_url":"https://api.github.com/users/SmarterApp/followers","following_url":"https://api.github.com/users/SmarterApp/following{/other_user}","gists_url":"https://api.github.com/users/SmarterApp/gists{/gist_id}","starred_url":"https://api.github.com/users/SmarterApp/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SmarterApp/subscriptions","organizations_url":"https://api.github.com/users/SmarterApp/orgs","repos_url":"https://api.github.com/users/SmarterApp/repos","events_url":"https://api.github.com/users/SmarterApp/events{/privacy}","received_events_url":"https://api.github.com/users/SmarterApp/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SmarterApp/TDS_ExamService","description":null,"fork":false,"url":"https://api.github.com/repos/SmarterApp/TDS_ExamService","forks_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/forks","keys_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/teams","hooks_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/hooks","issue_events_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/issues/events{/number}","events_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/events","assignees_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/assignees{/user}","branches_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/branches{/branch}","tags_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/tags","blobs_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/git/refs{/sha}","trees_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/statuses/{sha}","languages_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/languages","stargazers_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/stargazers","contributors_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/contributors","subscribers_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/subscribers","subscription_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/subscription","commits_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/commits{/sha}","git_commits_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/git/commits{/sha}","comments_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/comments{/number}","issue_comment_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/issues/comments{/number}","contents_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/contents/{+path}","compare_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/merges","archive_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/downloads","issues_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/issues{/number}","pulls_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls{/number}","milestones_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/milestones{/number}","notifications_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/labels{/name}","releases_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/releases{/id}","deployments_url":"https://api.github.com/repos/SmarterApp/TDS_ExamService/deployments","created_at":"2016-08-29T17:20:35Z","updated_at":"2016-11-29T18:52:03Z","pushed_at":"2017-04-25T21:27:18Z","git_url":"git://github.com/SmarterApp/TDS_ExamService.git","ssh_url":"git@github.com:SmarterApp/TDS_ExamService.git","clone_url":"https://github.com/SmarterApp/TDS_ExamService.git","svn_url":"https://github.com/SmarterApp/TDS_ExamService","homepage":null,"size":1432,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":0,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/159"},"html":{"href":"https://github.com/SmarterApp/TDS_ExamService/pull/159"},"issue":{"href":"https://api.github.com/repos/SmarterApp/TDS_ExamService/issues/159"},"comments":{"href":"https://api.github.com/repos/SmarterApp/TDS_ExamService/issues/159/comments"},"review_comments":{"href":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/159/comments"},"review_comment":{"href":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SmarterApp/TDS_ExamService/pulls/159/commits"},"statuses":{"href":"https://api.github.com/repos/SmarterApp/TDS_ExamService/statuses/bd681e3eb3545f6f7c982448c89bdf98f40dc4ea"}}}}
{"actor":{"display_login":"millerts"}}