Skip to content
This repository was archived by the owner on Apr 9, 2024. It is now read-only.

Commit 9ca6575

Browse files
committed
Added search endpoints
1 parent 50ea08c commit 9ca6575

25 files changed

+164
-5
lines changed

src/main/java/com/thoo/api/FortniteAPI.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class FortniteAPI private constructor(
4848
.client(client).build()
4949

5050
private val aesEndpoint = AESEndpoint(retrofit)
51-
private val cosmeticEndpoint = CosmeticEndpoint(retrofit, language)
51+
private val cosmeticEndpoint = CosmeticEndpoint(retrofit, client, language)
5252
private val newsEndpoint = NewsEndpoint(retrofit, language)
5353
private val createCodeEndpoint = CreatorCodeEndpoint(retrofit)
5454

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,52 @@
11
package com.thoo.api.endpoints
22

3+
import com.google.gson.Gson
4+
import com.google.gson.reflect.TypeToken
35
import com.thoo.api.enums.Language
6+
import com.thoo.api.models.BaseModel
7+
import com.thoo.api.models.Cosmetic
48
import com.thoo.api.services.CosmeticService
9+
import com.thoo.api.utils.QueryBuilder
510
import com.thoo.api.utils.send
11+
import okhttp3.OkHttpClient
12+
import okhttp3.Request
613
import retrofit2.Retrofit
714

8-
class CosmeticEndpoint(retrofit: Retrofit, private val defaultLang: Language) :
15+
class CosmeticEndpoint(retrofit: Retrofit, private val client: OkHttpClient, private val defaultLang: Language) :
916
Endpoint<CosmeticService>(retrofit, CosmeticService::class.java) {
1017

18+
private val gson = Gson()
19+
1120
@JvmOverloads fun getCosmetics(language: Language = defaultLang) = service.cosmetics(language.code).send()
1221
@JvmOverloads fun getCosmeticByID(id: String, language: Language = defaultLang) = service.cosmeticByID(id, language.code).send()
1322
@JvmOverloads fun getCosmeticsByID(vararg ids: String, language: Language = defaultLang) = service.cosmeticsByID(language.code, *ids).send()
1423

24+
@JvmOverloads
25+
fun searchCosmetic(query: QueryBuilder, language: Language = defaultLang): BaseModel<Cosmetic> {
26+
var url = "https://fortnite-api.com/v2/cosmetics/br/search"
27+
for(field in query::class.java.declaredFields){
28+
field.isAccessible = true
29+
val value = field.get(query)
30+
if(value != null) url += "?${field.name}=$value"
31+
}
32+
println(url)
33+
val requestBuilder = Request.Builder().url(url)
34+
val type = object: TypeToken<BaseModel<Cosmetic>>(){}.type
35+
return gson.fromJson<BaseModel<Cosmetic>>(client.newCall(requestBuilder.build()).execute().body?.string(), type)
36+
}
37+
38+
@JvmOverloads
39+
fun searchAllCosmetic(query: QueryBuilder, language: Language = defaultLang): BaseModel<Array<Cosmetic>> {
40+
var url = "https://fortnite-api.com/v2/cosmetics/br/search/all"
41+
for(field in query::class.java.declaredFields){
42+
field.isAccessible = true
43+
val value = field.get(query)
44+
if(value != null) url += "?${field.name}=$value"
45+
}
46+
println(url)
47+
val requestBuilder = Request.Builder().url(url)
48+
val type = object: TypeToken<BaseModel<Cosmetic>>(){}.type
49+
return gson.fromJson<BaseModel<Array<Cosmetic>>>(client.newCall(requestBuilder.build()).execute().body?.string(), type)
50+
}
51+
1552
}

src/main/java/com/thoo/api/endpoints/CreatorCodeEndpoint.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ package com.thoo.api.endpoints
22

33
import com.thoo.api.services.CreatorCodeService
44
import com.thoo.api.utils.send
5+
import okhttp3.OkHttpClient
56
import retrofit2.Retrofit
67

7-
class CreatorCodeEndpoint(retrofit: Retrofit) :
8+
class CreatorCodeEndpoint(retrofit: Retrofit):
89
Endpoint<CreatorCodeService>(retrofit, CreatorCodeService::class.java) {
910

1011
fun getCreatorCode(slug: String) = service.getCreatorCode(slug).send()
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.thoo.api.endpoints
2+
3+
import retrofit2.Retrofit
4+
5+
class ShopEndpoint(retrofit: Retrofit, private val defaultLanguage: String) :
6+
Endpoint<ShopEndpoint>(retrofit, ShopEndpoint::class.java) {
7+
8+
//@JvmOverloads fun getShop(language: String = defaultLanguage) = service.getShop(language)
9+
10+
}

src/main/java/com/thoo/api/enums/Language.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,6 @@ enum class Language(val code: String) {
1818
ZHCN("zh-CN"),
1919
ZHHANT("zh-Hant");
2020

21+
override fun toString(): String = code
22+
2123
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.thoo.api.enums
2+
3+
enum class MatchMethod(val code: String) {
4+
5+
FULL("full"),
6+
CONTAINS("contains"),
7+
STARTS("starts"),
8+
ENDS("ends");
9+
10+
override fun toString(): String = code
11+
12+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.thoo.api.models
2+
3+
import java.util.*
4+
5+
class ShopModel(
6+
val hash: String,
7+
val date: Date,
8+
val featured: Shop,
9+
val daily: Shop,
10+
val specialFeatured: Shop?,
11+
val specialDaily: Shop?,
12+
val vote: Shop?,
13+
val voteWinners: Shop?
14+
)
15+
16+
class Shop(
17+
val name: String,
18+
val entries: Array<ShopEntry>
19+
)
20+
21+
class ShopEntry(
22+
val regularPlace: Int,
23+
val finalPrice: Int,
24+
val bundle: Bundle,
25+
val banner: Banner,
26+
val giftable: Boolean,
27+
val refundable: Boolean,
28+
val sortPriority: Int,
29+
val categories: Array<String>,
30+
val devName: String,
31+
val offerId: String,
32+
val displayAssetPth: String,
33+
val items: Array<Cosmetic>
34+
)
35+
36+
class Banner(
37+
val value: String,
38+
val backendValue: String
39+
)
40+
41+
class Bundle(
42+
val name: String,
43+
val backendValue: String
44+
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.thoo.api.services
2+
3+
import com.thoo.api.models.BaseModel
4+
import com.thoo.api.models.ShopModel
5+
import retrofit2.Call
6+
import retrofit2.http.GET
7+
import retrofit2.http.Query
8+
9+
interface ShopService {
10+
11+
@GET("/v2/shop/br")
12+
fun shop(@Query("language") language: String): Call<BaseModel<ShopModel>>
13+
14+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.thoo.api.utils
2+
3+
import com.thoo.api.enums.Language
4+
import com.thoo.api.enums.MatchMethod
5+
6+
class QueryBuilder(
7+
internal var searchLanguage: Language? = null,
8+
internal var mathMethod: MatchMethod ? = null,
9+
internal var id: String? = null,
10+
internal var name: String? = null,
11+
internal var description: String? = null,
12+
internal var type: String? = null,
13+
internal var displayType: String? = null,
14+
internal var rarity: String? = null,
15+
internal var displayRarity: String? = null,
16+
internal var backendRarity: String? = null,
17+
internal var hasSeries: Boolean? = null,
18+
internal var series: String? = null,
19+
internal var backendSeries: String? = null,
20+
internal var hasSet: Boolean? = null,
21+
internal var set: String? = null,
22+
internal var setText: String? = null,
23+
internal var backendSet: String? = null,
24+
internal var hasIntroduction: Boolean? = null,
25+
internal var introductionChapter: String? = null,
26+
internal var introductionSeason: String? = null,
27+
internal var hasFeaturedImage: Boolean? = null,
28+
internal var hasVariants: Boolean? = null,
29+
internal var gameplayTags: String? = null,
30+
internal var added: Long? = null,
31+
internal var addedSince: Long? = null,
32+
internal var unseenFor: Int? = null,
33+
internal var lastAppearance: Long? = null
34+
)

src/test/java/Test.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1+
import com.google.gson.Gson
12
import com.thoo.api.FortniteAPI
3+
import com.thoo.api.utils.QueryBuilder
24

35
object Test {
46

57
@JvmStatic
68
fun main(args: Array<String>) {
79
val api = FortniteAPI.Builder().build()
8-
val cc = api.getCreatorEndpoint()
9-
val code = cc.getCreatorCode("Teveelgevraagd")
10+
val query = QueryBuilder(
11+
name = "Aura"
12+
)
13+
val test = api.getCosmeticEndpoint().searchCosmetic(query)
14+
println(Gson().toJson(test))
1015
}
1116

1217
}

0 commit comments

Comments
 (0)