Skip to content

Commit

Permalink
feat: empire api integration
Browse files Browse the repository at this point in the history
  • Loading branch information
makeevrserg committed Oct 15, 2023
1 parent 6e829c5 commit 80e0701
Show file tree
Hide file tree
Showing 20 changed files with 245 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ modules/services/xlsx/libs
modules/services/ads-yandex/build
modules/services/wear-messenger/build
modules/services/build-konfig/build
modules/services/api-empireapi/build
# Features ----------------------------------
modules/features/dialog-confirm/build
modules/features/words-local/build
Expand Down
1 change: 1 addition & 0 deletions modules/features/root/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ kotlin {
api(projects.modules.services.resources)
api(projects.modules.features.splash)
api(projects.modules.services.core)
api(projects.modules.services.apiEmpireapi)
}
}
val androidMain by getting {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.makeevrserg.empireprojekt.mobile.features.root.di

import com.makeevrserg.empireprojekt.mobile.api.empireapi.di.EmpireApiModule
import com.makeevrserg.empireprojekt.mobile.features.logic.splash.di.SplashComponentModule
import com.makeevrserg.empireprojekt.mobile.features.status.di.StatusModule
import ru.astrainteractive.klibs.kdi.Module
Expand All @@ -10,4 +11,6 @@ interface RootModule : Module {
val statusModule: StatusModule
val splashModule: SplashComponentModule
val componentsModule: ComponentsModule

val empireApiModule: EmpireApiModule
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.makeevrserg.empireprojekt.mobile.features.root.di.impl

import com.makeevrserg.empireprojekt.mobile.api.empireapi.di.EmpireApiModule
import com.makeevrserg.empireprojekt.mobile.features.logic.splash.di.SplashComponentModule
import com.makeevrserg.empireprojekt.mobile.features.root.di.ComponentsModule
import com.makeevrserg.empireprojekt.mobile.features.root.di.RootModule
Expand Down Expand Up @@ -32,4 +33,10 @@ class RootModuleImpl : RootModule {
override val componentsModule: ComponentsModule by Single {
ComponentsModuleImpl(this)
}

override val empireApiModule: EmpireApiModule by Provider {
EmpireApiModule.Default(
httpClient = servicesModule.httpClient.value
)
}
}
43 changes: 43 additions & 0 deletions modules/services/api-empireapi/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
@file:Suppress("UnusedPrivateMember")

import ru.astrainteractive.gradleplugin.util.ProjectProperties.projectInfo

plugins {
id("com.android.library")
kotlin("multiplatform")
id("ru.astrainteractive.gradleplugin.java.core")
id("ru.astrainteractive.gradleplugin.android.core")
id("dev.icerock.mobile.multiplatform-resources")
alias(libs.plugins.kotlin.serialization)
}

kotlin {
android()
ios()
iosSimulatorArm64()
sourceSets {
val commonMain by getting {
dependencies {
// klibs
implementation(libs.klibs.mikro.core)
api(libs.klibs.mikro.platform)
implementation(libs.klibs.kstorage)
implementation(libs.klibs.kdi)
// Ktor
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.contentNegitiation)
implementation(libs.ktor.client.serialization)
implementation(libs.ktor.client.json)
implementation(libs.ktor.serialization.json)
// Serialization
implementation(libs.kotlin.serialization.json)
// Coroutines
implementation(libs.kotlin.coroutines.core)
}
}
}
}

android {
namespace = "${projectInfo.group}.api.empireapi"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.makeevrserg.empireprojekt.mobile.api.empireapi

import ru.astrainteractive.empireapi.models.rating.RatingListRequest
import ru.astrainteractive.empireapi.models.rating.RatingModel
import ru.astrainteractive.empireapi.models.rating.RatingUserModel
import ru.astrainteractive.empireapi.models.rating.UserRatingsRequest
import ru.astrainteractive.empireapi.models.response.GenericPagedModel

interface RatingApi {
/**
* Fetch all users
*/
suspend fun users(body: RatingListRequest): GenericPagedModel<RatingUserModel>

/**
* Fetch selected user
*/
suspend fun user(id: Long): RatingUserModel

/**
* Fetch ratings of selected user
*/
suspend fun ratings(body: UserRatingsRequest): GenericPagedModel<RatingModel>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.makeevrserg.empireprojekt.mobile.api.empireapi.di

import com.makeevrserg.empireprojekt.mobile.api.empireapi.RatingApi
import com.makeevrserg.empireprojekt.mobile.api.empireapi.impl.RatingApiImpl
import io.ktor.client.HttpClient
import ru.astrainteractive.klibs.kdi.Provider
import ru.astrainteractive.klibs.kdi.getValue

interface EmpireApiModule {
val ratingApi: RatingApi

class Default(httpClient: HttpClient) : EmpireApiModule {
override val ratingApi: RatingApi by Provider {
RatingApiImpl(httpClient = httpClient)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.makeevrserg.empireprojekt.mobile.api.empireapi.impl

import com.makeevrserg.empireprojekt.mobile.api.empireapi.RatingApi
import io.ktor.client.HttpClient
import io.ktor.client.call.body
import io.ktor.client.request.get
import io.ktor.client.request.parameter
import io.ktor.client.request.post
import io.ktor.client.request.setBody
import io.ktor.client.request.url
import ru.astrainteractive.empireapi.models.rating.RatingListRequest
import ru.astrainteractive.empireapi.models.rating.RatingModel
import ru.astrainteractive.empireapi.models.rating.RatingUserModel
import ru.astrainteractive.empireapi.models.rating.UserRatingsRequest
import ru.astrainteractive.empireapi.models.response.GenericPagedModel

class RatingApiImpl(
private val httpClient: HttpClient,
private val baseUrl: String = "http://192.168.1.3:8080"
) : RatingApi {

override suspend fun users(body: RatingListRequest): GenericPagedModel<RatingUserModel> {
return httpClient.post {
url("$baseUrl/rating/users")
setBody(body)
}.body()
}

override suspend fun user(id: Long): RatingUserModel {
return httpClient.get {
url("$baseUrl/rating/user")
parameter("user_id", id)
}.body()
}

override suspend fun ratings(body: UserRatingsRequest): GenericPagedModel<RatingModel> {
return httpClient.post {
url("$baseUrl/rating/user/votes")
setBody(body)
}.body()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package ru.astrainteractive.empireapi.models.currency

class CurrencyHistoryEntry(
val id: Long,
val value: Float
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package ru.astrainteractive.empireapi.models.currency

class CurrencyHistoryModel(
val currencyModel: CurrencyModel,
val entries: List<CurrencyHistoryEntry>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ru.astrainteractive.empireapi.models.currency

import kotlinx.serialization.Serializable

@Serializable
class CurrencyModel(
val id: Long,
val name: String,
val author: UserModel
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package ru.astrainteractive.empireapi.models.currency

import kotlinx.serialization.Serializable

@Serializable
data class UserModel(
val id: Long,
val username: String
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ru.astrainteractive.empireapi.models.rating

import kotlinx.serialization.Serializable

@Serializable
class RatingListRequest(
val page: Long = 0,
val size: Int = 10,
val sort: Sort = Sort.NAME_ASC,
val query: String = "",
) {
enum class Sort {
NAME_ASC, NAME_DESC
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package ru.astrainteractive.empireapi.models.rating

import kotlinx.serialization.Serializable

@Serializable
class RatingModel(
val userCreatedReport: RatingUserModel?,
val reportedUser: RatingUserModel,
val rating: Int,
val ratingTypeIndex: Int,
val message: String,
val time: Long
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package ru.astrainteractive.empireapi.models.rating

import kotlinx.serialization.Serializable

@Serializable
data class RatingUserModel(
val id: Long,
val minecraftUUID: String,
val minecraftName: String,
val lastUpdated: Long,
val total: Long
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package ru.astrainteractive.empireapi.models.rating

import kotlinx.serialization.Serializable

@Serializable
class UserRatingsRequest(
val id: Long,
val page: Long = 0,
val size: Int = 54
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package ru.astrainteractive.empireapi.models.response

import kotlinx.serialization.Serializable

@Serializable
class GenericPagedModel<T>(
override val data: List<T>,
override val total: Long,
override val currentPageAmount: Int,
override val page: Long
) : PagedModel<T>
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ru.astrainteractive.empireapi.models.response

interface PagedModel<T> {
val data: List<T>
val total: Long
val currentPageAmount: Int
val page: Long
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package ru.astrainteractive.empireapi.models.user

import kotlinx.serialization.Serializable

@Serializable
data class UserModel(val id: Long, val mail: String)
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ include(":modules:services:core-ui")
include(":modules:services:core")
include(":modules:services:wear-messenger")
include(":modules:services:build-konfig")
include(":modules:services:api-empireapi")
// Feature
include(":modules:features:root")
include(":modules:features:splash")
Expand Down

0 comments on commit 80e0701

Please sign in to comment.