Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,18 +1,20 @@
package co.nilin.opex.api.app.config

import co.nilin.opex.common.data.UserLanguage
import io.netty.channel.ChannelOption
import io.netty.handler.logging.LogLevel
import org.springframework.beans.factory.annotation.Qualifier
import org.springframework.cloud.client.ServiceInstance
import org.springframework.cloud.client.loadbalancer.reactive.ReactiveLoadBalancer
import org.springframework.cloud.client.loadbalancer.reactive.ReactorLoadBalancerExchangeFilterFunction
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Profile
import org.springframework.http.client.reactive.ReactorClientHttpConnector
import org.springframework.web.reactive.function.client.ClientRequest
import org.springframework.web.reactive.function.client.ExchangeFilterFunction
import org.springframework.web.reactive.function.client.WebClient
import org.zalando.logbook.Logbook
import org.zalando.logbook.netty.LogbookClientHandler
import reactor.core.publisher.Mono
import reactor.netty.http.client.HttpClient
import reactor.netty.resources.ConnectionProvider
import reactor.netty.transport.logging.AdvancedByteBufFormat
Expand Down Expand Up @@ -45,11 +47,12 @@ class WebClientConfig(private val logbook: Logbook) {
return WebClient.builder()
.filter(ReactorLoadBalancerExchangeFilterFunction(loadBalancerFactory, emptyList()))
.clientConnector(ReactorClientHttpConnector(client))
.filter(languageFilter())
.build()
}

@Bean("keycloakWebClient")
fun keycloakWebClient( logbook: Logbook): WebClient {
fun keycloakWebClient(logbook: Logbook): WebClient {
val provider = ConnectionProvider.builder("apiKeycloakPool")
.maxConnections(150)
.maxIdleTime(Duration.ofSeconds(30))
Expand All @@ -71,5 +74,15 @@ class WebClientConfig(private val logbook: Logbook) {
.build()
}

private fun languageFilter() = ExchangeFilterFunction { request, next ->
Mono.deferContextual { ctx ->
val lang = ctx.getOrDefault("lang", UserLanguage.EN.toString())
val mutatedRequest = ClientRequest.from(request)
.header("Accept-Language", lang)
.build()
next.exchange(mutatedRequest)
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import java.util.*
data class CurrencyCommand(
var symbol: String,
var uuid: String? = UUID.randomUUID().toString(),
var name: String,
var name: String? = null,
var precision: BigDecimal,
var title: String? = null,
var alias: String? = null,
Expand All @@ -22,7 +22,7 @@ data class CurrencyCommand(
var externalUrl: String? = null,
var gateways: List<CurrencyGatewayCommand>? = null,
var availableGatewayType: String? = null,
var order: Int? = null
var displayOrder: Int? = null

) {
fun updateTo(newData: CurrencyCommand): CurrencyCommand {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import java.util.*
data class CurrencyData(
var symbol: String,
var uuid: String? = UUID.randomUUID().toString(),
var name: String,
var name: String? = null,
var precision: BigDecimal,
var title: String? = null,
var alias: String? = null,
Expand All @@ -18,7 +18,7 @@ data class CurrencyData(
var description: String? = null,
var shortDescription: String? = null,
var externalUrl: String? = null,
var order: Int? = null,
var maxOrder : BigDecimal? = null,
var displayOrder: Int? = null,
var maxOrder: BigDecimal? = null,

)
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package co.nilin.opex.api.core.inout

data class CurrencyLocalizationCommand(
var id: Long? = null,
var name: String? = null,
var title: String? = null,
var alias: String? = null,
var description: String? = null,
var shortDescription: String? = null,
var language: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package co.nilin.opex.api.core.inout


data class CurrencyLocalizationRequest(
val currencyLocalizations: List<CurrencyLocalizationCommand>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package co.nilin.opex.api.core.inout

data class CurrencyLocalizationResponse(
val currency: String,
val currencyLocalizations: List<CurrencyLocalizationCommand>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package co.nilin.opex.api.core.inout

data class TerminalLocalizationCommand(
var id : Long?,
var description: String,
var language: String,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package co.nilin.opex.api.core.inout


data class TerminalLocalizationRequest(
val terminalLocalizations: List<TerminalLocalizationCommand>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package co.nilin.opex.api.core.inout

data class TerminalLocalizationResponse(
val terminalUuid: String,
val terminalLocalizations: List<TerminalLocalizationCommand>
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package co.nilin.opex.api.core.spi

import co.nilin.opex.api.core.inout.*
import co.nilin.opex.api.core.inout.analytics.DailyAmount
import org.springframework.security.core.userdetails.UserDetails
import java.math.BigDecimal

interface WalletProxy {
Expand Down Expand Up @@ -202,8 +201,40 @@ interface WalletProxy {

suspend fun getDailyBalanceLast31Days(token: String, uuid: String): List<DailyAmount>

suspend fun reserveSwap(token: String, request: TransferReserveRequest) :ReservedTransferResponse
suspend fun finalizeSwap(token: String,reserveUuid: String,description: String?,transferRef: String?) : TransferResult
suspend fun getGatewayTerminal(gatewayUuid: String):List<TerminalCommand>
suspend fun reserveSwap(token: String, request: TransferReserveRequest): ReservedTransferResponse
suspend fun finalizeSwap(
token: String,
reserveUuid: String,
description: String?,
transferRef: String?
): TransferResult

suspend fun getGatewayTerminal(gatewayUuid: String): List<TerminalCommand>
suspend fun getUsersDetailAssets(limit: Int, offset: Int): List<UserDetailAssetsSnapshot>
suspend fun getCurrencyLocalizations(token: String, currency: String): CurrencyLocalizationResponse
suspend fun saveCurrencyLocalizations(
token: String,
currency: String,
request: CurrencyLocalizationRequest
): CurrencyLocalizationResponse

suspend fun updateCurrencyLocalization(
token: String,
request: CurrencyLocalizationCommand
): CurrencyLocalizationCommand

suspend fun deleteCurrencyLocalization(token: String, id: Long)
suspend fun getTerminalLocalizations(token: String, terminalUuid: String): TerminalLocalizationResponse
suspend fun saveTerminalLocalizations(
token: String,
terminalUuid: String,
request: TerminalLocalizationRequest
): TerminalLocalizationResponse

suspend fun updateTerminalLocalization(
token: String,
request: TerminalLocalizationCommand
): TerminalLocalizationCommand

suspend fun deleteTerminalLocalization(token: String, id: Long)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package co.nilin.opex.api.ports.opex.controller

import co.nilin.opex.api.core.inout.*
import co.nilin.opex.api.core.spi.WalletProxy
import co.nilin.opex.api.ports.opex.util.jwtAuthentication
import co.nilin.opex.api.ports.opex.util.tokenValue
import org.springframework.security.core.annotation.CurrentSecurityContext
import org.springframework.security.core.context.SecurityContext
import org.springframework.web.bind.annotation.*

@RestController
@RequestMapping("/opex/v1/admin/localization")
class LocalizationAdminController(
private val walletProxy: WalletProxy,
) {
@GetMapping("/currency/{currency}")
suspend fun getCurrencyLocalizations(
@CurrentSecurityContext securityContext: SecurityContext,
@PathVariable("currency") currency: String
): CurrencyLocalizationResponse {
return walletProxy.getCurrencyLocalizations(securityContext.jwtAuthentication().tokenValue(), currency)
}

@PostMapping("/currency/{currency}")
suspend fun saveCurrencyLocalizations(
@CurrentSecurityContext securityContext: SecurityContext,
@PathVariable("currency") currency: String,
@RequestBody request: CurrencyLocalizationRequest
): CurrencyLocalizationResponse {
return walletProxy.saveCurrencyLocalizations(
securityContext.jwtAuthentication().tokenValue(),
currency,
request
)
}

@PutMapping("/currency")
suspend fun updateCurrencyLocalization(
@CurrentSecurityContext securityContext: SecurityContext,
@RequestBody request: CurrencyLocalizationCommand
): CurrencyLocalizationCommand {
return walletProxy.updateCurrencyLocalization(securityContext.jwtAuthentication().tokenValue(), request)
}

@DeleteMapping("/currency/{id}")
suspend fun deleteCurrencyLocalization(
@CurrentSecurityContext securityContext: SecurityContext,
@PathVariable("id") id: Long
) {
walletProxy.deleteCurrencyLocalization(securityContext.jwtAuthentication().tokenValue(), id)
}

@GetMapping("/terminal/{terminalUuid}")
suspend fun getTerminalLocalizations(
@CurrentSecurityContext securityContext: SecurityContext,
@PathVariable("terminalUuid") terminalUuid: String
): TerminalLocalizationResponse {
return walletProxy.getTerminalLocalizations(securityContext.jwtAuthentication().tokenValue(), terminalUuid)
}

@PostMapping("/terminal/{terminalUuid}")
suspend fun saveTerminalLocalizations(
@CurrentSecurityContext securityContext: SecurityContext,
@PathVariable("terminalUuid") terminalUuid: String,
@RequestBody request: TerminalLocalizationRequest
): TerminalLocalizationResponse {
return walletProxy.saveTerminalLocalizations(
securityContext.jwtAuthentication().tokenValue(),
terminalUuid,
request
)
}

@PutMapping("/terminal")
suspend fun updateTerminalLocalization(
@CurrentSecurityContext securityContext: SecurityContext,
@RequestBody request: TerminalLocalizationCommand
): TerminalLocalizationCommand {
return walletProxy.updateTerminalLocalization(securityContext.jwtAuthentication().tokenValue(), request)
}

@DeleteMapping("/terminal/{id}")
suspend fun deleteTerminalLocalization(
@CurrentSecurityContext securityContext: SecurityContext,
@PathVariable("id") id: Long
) {
walletProxy.deleteTerminalLocalization(securityContext.jwtAuthentication().tokenValue(), id)
}
}
Loading
Loading