Skip to content

Commit 37b5cb1

Browse files
sukeshniashawley
authored andcommitted
searchCode, searchIssues, searchUser
1 parent 4a37671 commit 37b5cb1

File tree

2 files changed

+83
-4
lines changed

2 files changed

+83
-4
lines changed

src/main/scala/codecheck/github/models/Search.scala

+49-4
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,28 @@ package codecheck.github.models
22

33
import org.json4s.JValue
44
import org.json4s.JArray
5-
import codecheck.github.models.SortDirection
65

76
sealed abstract class SearchSort(val name: String) {
87
override def toString = name
98
}
109
object SearchSort {
11-
case object stars extends SearchSort("stars")
12-
case object forks extends SearchSort("forks")
13-
case object updated extends SearchSort("updated")
10+
//for serachRepositories
11+
case object stars extends SearchSort("stars")
12+
case object forks extends SearchSort("forks")
13+
case object updated extends SearchSort("updated")
14+
15+
//for searchCode
16+
case object indexed extends SearchSort("indexed")
17+
18+
//for searchIssues
19+
case object comments extends SearchSort("comments")
20+
case object created extends SearchSort("created")
21+
//case object updated extends SearchSort("updated")
22+
23+
//for searchUser
24+
case object followers extends SearchSort("followers")
25+
case object repositories extends SearchSort("repositories")
26+
case object joined extends SearchSort("joined")
1427
}
1528

1629
case class SearchInput (
@@ -27,3 +40,35 @@ case class SearchRepositoryResult(value: JValue) extends AbstractJson(value) {
2740
case _ => Nil
2841
}
2942
}
43+
44+
case class searchCodeItems (value: JValue) extends AbstractJson(value){
45+
def name: String = get("name")
46+
lazy val Repo = new Repository(value \ "repository")
47+
}
48+
49+
case class SearchCodeResult(value: JValue) extends AbstractJson(value) {
50+
def total_count: Long = get("total_count").toLong
51+
def incomplete_results: Boolean = boolean("incomplete_results")
52+
lazy val items = (value \ "items") match {
53+
case JArray(arr) => arr.map(new searchCodeItems(_))
54+
case _ => Nil
55+
}
56+
}
57+
58+
case class SearchIssueResult(value: JValue) extends AbstractJson(value) {
59+
def total_count: Long = get("total_count").toLong
60+
def incomplete_results: Boolean = boolean("incomplete_results")
61+
lazy val items = (value \ "items") match {
62+
case JArray(arr) => arr.map(new Issue(_))
63+
case _ => Nil
64+
}
65+
}
66+
67+
case class SearchUserResult(value: JValue) extends AbstractJson(value) {
68+
def total_count: Long = get("total_count").toLong
69+
def incomplete_results: Boolean = boolean("incomplete_results")
70+
lazy val items = (value \ "items") match {
71+
case JArray(arr) => arr.map(new User(_))
72+
case _ => Nil
73+
}
74+
}

src/main/scala/codecheck/github/operations/SearchOp.scala

+34
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ import scala.concurrent.ExecutionContext.Implicits.global
66
import codecheck.github.api.GitHubAPI
77
import codecheck.github.models.SearchInput
88
import codecheck.github.models.SearchRepositoryResult
9+
//import codecheck.github.models.SortDirection
10+
import codecheck.github.models.SearchCodeResult
11+
import codecheck.github.models.SearchIssueResult
12+
import codecheck.github.models.SearchUserResult
913

1014
trait SearchOp {
1115
self: GitHubAPI =>
@@ -19,4 +23,34 @@ trait SearchOp {
1923
}
2024
}
2125
}
26+
27+
def searchCode(input: SearchInput): Future[Option[SearchCodeResult]] = {
28+
val path = s"/search/code?q=${input.q}&sort=${input.sort}&order=${input.order}"
29+
exec("GET", path ).map { res =>
30+
res.statusCode match {
31+
case 200 => Some(SearchCodeResult(res.body))
32+
case 404 => None
33+
}
34+
}
35+
}
36+
37+
def searchIssues(input: SearchInput): Future[Option[SearchIssueResult]] = {
38+
val path = s"/search/issues?q=${input.q}&sort=${input.sort}&order=${input.order}"
39+
exec("GET", path ).map { res =>
40+
res.statusCode match {
41+
case 200 => Some(SearchIssueResult(res.body))
42+
case 404 => None
43+
}
44+
}
45+
}
46+
47+
def searchUser(input: SearchInput): Future[Option[SearchUserResult]] = {
48+
val path = s"/search/user?q=${input.q}&sort=${input.sort}&order=${input.order}"
49+
exec("GET", path ).map { res =>
50+
res.statusCode match {
51+
case 200 => Some(SearchUserResult(res.body))
52+
case 404 => None
53+
}
54+
}
55+
}
2256
}

0 commit comments

Comments
 (0)