feat(api): expose response info in requests
This commit is contained in:
parent
48b69c88a9
commit
db1f469a4f
3 changed files with 20 additions and 5 deletions
|
|
@ -0,0 +1,15 @@
|
||||||
|
package moe.lava.neon.api
|
||||||
|
|
||||||
|
import io.ktor.client.call.body
|
||||||
|
import io.ktor.client.statement.HttpResponse
|
||||||
|
import io.ktor.util.reflect.TypeInfo
|
||||||
|
import io.ktor.util.reflect.typeInfo
|
||||||
|
|
||||||
|
class ApiResponse<T>(
|
||||||
|
val response: HttpResponse,
|
||||||
|
private val bodyType: TypeInfo,
|
||||||
|
) {
|
||||||
|
suspend fun body() = response.body(bodyType) as T
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun <reified T> HttpResponse.wrap() = ApiResponse<T>(this, typeInfo<T>())
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package moe.lava.neon.api.endpoints
|
package moe.lava.neon.api.endpoints
|
||||||
|
|
||||||
import io.ktor.client.call.body
|
|
||||||
import io.ktor.client.request.get
|
import io.ktor.client.request.get
|
||||||
import io.ktor.client.request.header
|
import io.ktor.client.request.header
|
||||||
import io.ktor.client.request.parameter
|
import io.ktor.client.request.parameter
|
||||||
|
|
@ -8,6 +7,7 @@ import io.ktor.client.request.post
|
||||||
import io.ktor.client.request.setBody
|
import io.ktor.client.request.setBody
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
import moe.lava.neon.api.ApiClient
|
import moe.lava.neon.api.ApiClient
|
||||||
|
import moe.lava.neon.api.wrap
|
||||||
|
|
||||||
@Serializable
|
@Serializable
|
||||||
data class ExperimentResponse(
|
data class ExperimentResponse(
|
||||||
|
|
@ -35,7 +35,7 @@ data class LoginResponse(
|
||||||
|
|
||||||
suspend fun ApiClient.getExperiments() = client.get("experiments") {
|
suspend fun ApiClient.getExperiments() = client.get("experiments") {
|
||||||
parameter("with_guild_experiments", "true")
|
parameter("with_guild_experiments", "true")
|
||||||
}.body<ExperimentResponse>()
|
}.wrap<ExperimentResponse>()
|
||||||
|
|
||||||
suspend fun ApiClient.login(email: String, password: String, fingerprint: String) = client.post("auth/login") {
|
suspend fun ApiClient.login(email: String, password: String, fingerprint: String) = client.post("auth/login") {
|
||||||
header("X-Fingerprint", fingerprint)
|
header("X-Fingerprint", fingerprint)
|
||||||
|
|
@ -43,4 +43,4 @@ suspend fun ApiClient.login(email: String, password: String, fingerprint: String
|
||||||
login = email,
|
login = email,
|
||||||
password = password,
|
password = password,
|
||||||
))
|
))
|
||||||
}.body<LoginResponse>()
|
}.wrap<LoginResponse>()
|
||||||
|
|
|
||||||
|
|
@ -30,14 +30,14 @@ class AuthRepository internal constructor(
|
||||||
): AuthResponse {
|
): AuthResponse {
|
||||||
try {
|
try {
|
||||||
if (fingerprint == null) {
|
if (fingerprint == null) {
|
||||||
fingerprint = api.getExperiments().fingerprint
|
fingerprint = api.getExperiments().body().fingerprint
|
||||||
}
|
}
|
||||||
|
|
||||||
val login = api.login(
|
val login = api.login(
|
||||||
email = email,
|
email = email,
|
||||||
password = password,
|
password = password,
|
||||||
fingerprint = fingerprint!!,
|
fingerprint = fingerprint!!,
|
||||||
)
|
).body()
|
||||||
logger.i { "Login success $login" }
|
logger.i { "Login success $login" }
|
||||||
this.token = login.token
|
this.token = login.token
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue