-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetPokemons.groovy
45 lines (37 loc) · 1.61 KB
/
getPokemons.groovy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import groovy.json.JsonBuilder
import groovy.transform.BaseScript
import groovyx.net.http.RESTClient
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.core.Response
@BaseScript CustomEndpointDelegate delegate
getPokemons(httpMethod: "GET", groups: ["jira-administrators"]) { MultivaluedMap queryParams ->
def rt = [:]
def query = queryParams.getFirst("query") as String
if (!query) {
return Response.ok(new JsonBuilder(rt).toString()).build();
}
query = query.toLowerCase()
// клиент для работы с рест сервисом
def pokeapi = new RESTClient("https://pokeapi.co/api/v2/")
def getAvatar = { name ->
def innerResp = pokeapi.get( path: "pokemon/${name}")
innerResp?.data?.sprites?.front_default ?: ""
}
// получаем список покемонов и фильтруем только тех, которые содержат query
def resp = pokeapi.get( path: "pokemon", query : [limit:2000] )
def pokeNames = resp?.data?.results*.name?.findAll {it.toLowerCase().contains(query)}
// формируем ответный json
rt = [
items: pokeNames.collect { poke ->
[
value: poke,
html: poke.replaceAll(/(?i)$query/) { "<b>${it}</b>" },
label: poke,
icon: getAvatar(poke)
]
},
total: pokeNames.size()
]
return Response.ok(new JsonBuilder(rt).toString()).build();
}