Skip to content
Merged
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
1 change: 1 addition & 0 deletions common/src/main/kotlin/co/nilin/opex/common/OpexError.kt
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ enum class OpexError(val code: Int, val message: String?, val status: HttpStatus
OTPCannotBeRequested(6050, "OTP cannot be requested", HttpStatus.BAD_REQUEST),
WithdrawRequestExpired(6051,"Withdraw request expired", HttpStatus.BAD_REQUEST),
ForbiddenSwapPair(6052, null, HttpStatus.BAD_REQUEST),
TerminalLocalizationNotFound(6053, "Terminal localization not found", HttpStatus.NOT_FOUND),


// code 7000: api
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
package co.nilin.opex.common.translation

import co.nilin.opex.common.utils.LanguageUtils.getUserLanguage
import co.nilin.opex.utility.error.data.DefaultExceptionResponse
import co.nilin.opex.utility.error.data.OpexException
import co.nilin.opex.utility.error.spi.ErrorTranslator
import co.nilin.opex.utility.error.spi.ExceptionResponse
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Value
import org.springframework.stereotype.Service
import reactor.core.publisher.Mono

Expand All @@ -31,9 +31,6 @@ class CustomErrorTranslator() : ErrorTranslator {
)
}
}

fun getUserLanguage(): Mono<String> =
Mono.deferContextual { ctx -> Mono.just(ctx.getOrDefault("lang", "EN")!!) }
}


Expand Down
12 changes: 12 additions & 0 deletions common/src/main/kotlin/co/nilin/opex/common/utils/LanguageUtils.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package co.nilin.opex.common.utils

import co.nilin.opex.common.data.UserLanguage
import reactor.core.publisher.Mono

object LanguageUtils {

fun getUserLanguage(): Mono<String> =
Mono.deferContextual { ctx -> Mono.just(ctx.getOrDefault("lang", UserLanguage.EN.toString())!!) }

fun getDefaultUserLanguage(): String = UserLanguage.EN.toString()
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,12 @@ package co.nilin.opex.wallet.app.controller

import co.nilin.opex.wallet.app.dto.AdminSearchDepositRequest
import co.nilin.opex.wallet.app.dto.ManualTransferRequest
import co.nilin.opex.wallet.app.dto.TerminalLocalizationRequest
import co.nilin.opex.wallet.app.dto.TerminalLocalizationResponse
import co.nilin.opex.wallet.app.service.DepositService
import co.nilin.opex.wallet.core.inout.DepositAdminResponse
import co.nilin.opex.wallet.core.inout.TerminalCommand
import co.nilin.opex.wallet.core.inout.TerminalLocalizationCommand
import co.nilin.opex.wallet.core.inout.TransferResult
import co.nilin.opex.wallet.core.spi.TerminalManager
import io.swagger.annotations.ApiResponse
Expand Down Expand Up @@ -139,5 +142,35 @@ class DepositAdminController(
terminalManager.fetchTerminal(terminalUuid)
}

@PostMapping("/terminal/{uuid}/localization")
suspend fun saveTerminalLocalization(
@PathVariable("uuid") terminalUuid: String,
@RequestBody body: TerminalLocalizationRequest
): TerminalLocalizationResponse {
val terminalLocalizations = terminalManager.saveTerminalLocalizations(terminalUuid, body.terminalLocalizations)
return TerminalLocalizationResponse(terminalUuid, terminalLocalizations)
}

@GetMapping("/terminal/{uuid}/localization")
suspend fun getTerminalLocalization(
@PathVariable("uuid") terminalUuid: String
): TerminalLocalizationResponse {
val terminalLocalizations = terminalManager.fetchTerminalLocalizations(terminalUuid)
return TerminalLocalizationResponse(terminalUuid, terminalLocalizations)
}

@DeleteMapping("/terminal/localization/{id}")
suspend fun deleteTerminalLocalization(
@PathVariable("id") id: Long,
) {
terminalManager.deleteTerminalLocalizations(id)
}

@PutMapping("/terminal/localization")
suspend fun updateTerminalLocalization(
@RequestBody body: TerminalLocalizationCommand
): TerminalLocalizationCommand {
return terminalManager.updateTerminalLocalization(body)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package co.nilin.opex.wallet.app.dto

import co.nilin.opex.wallet.core.inout.TerminalLocalizationCommand

data class TerminalLocalizationRequest(
val terminalLocalizations: List<TerminalLocalizationCommand>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package co.nilin.opex.wallet.app.dto

import co.nilin.opex.wallet.core.inout.TerminalLocalizationCommand

data class TerminalLocalizationResponse(
val terminalUuid: String,
val terminalLocalizations: List<TerminalLocalizationCommand>
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package co.nilin.opex.wallet.core.inout

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

import co.nilin.opex.wallet.core.inout.TerminalCommand
import co.nilin.opex.wallet.core.inout.TerminalLocalizationCommand

interface TerminalManager {

Expand All @@ -9,4 +10,8 @@ interface TerminalManager {
suspend fun delete(uuid: String)
suspend fun fetchTerminal(): List<TerminalCommand>?
suspend fun fetchTerminal(uuid: String): TerminalCommand?
suspend fun saveTerminalLocalizations(terminalUuid : String , terminalLocalizations : List<TerminalLocalizationCommand>) : List<TerminalLocalizationCommand>
suspend fun fetchTerminalLocalizations(terminalUuid : String) : List<TerminalLocalizationCommand>
suspend fun deleteTerminalLocalizations(id : Long)
suspend fun updateTerminalLocalization(terminalLocalization : TerminalLocalizationCommand):TerminalLocalizationCommand
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package co.nilin.opex.wallet.ports.postgres.dao

import co.nilin.opex.wallet.ports.postgres.model.TerminalModel
import co.nilin.opex.wallet.ports.postgres.dto.TerminalView
import co.nilin.opex.wallet.ports.postgres.model.GatewayTerminalModel
import org.springframework.data.r2dbc.repository.Query
import org.springframework.data.repository.reactive.ReactiveCrudRepository
Expand All @@ -13,6 +13,23 @@ interface GatewayTerminalRepository : ReactiveCrudRepository<GatewayTerminalMode

fun deleteByTerminalIdAndGatewayId(terminalId: Long, gatewayId: Long): Mono<Void>

@Query("select t.* from gateway_terminal gt join terminal t on gt.terminal_id=t.id where gt.gateway_id=:gatewayId ")
fun findByGatewayId(gatewayId: Long): Flux<TerminalModel>?
@Query(
"""
SELECT t.id,
t.uuid,
t.owner,
t.identifier,
t.active,
t.type,
t.meta_data,
t.display_order,
tl.description
FROM gateway_terminal gt
JOIN terminal t ON gt.terminal_id=t.id
LEFT JOIN terminal_localization tl ON tl.terminal_id = t.id
AND tl.language = :lang
WHERE gt.gateway_id=:gatewayI
"""
)
fun findByGatewayId(gatewayId: Long, lang: String? = null): Flux<TerminalView>?
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package co.nilin.opex.wallet.ports.postgres.dao

import co.nilin.opex.wallet.ports.postgres.model.TerminalLocalizationModel
import org.springframework.data.repository.reactive.ReactiveCrudRepository
import org.springframework.stereotype.Repository
import reactor.core.publisher.Flux

@Repository
interface TerminalLocalizationsRepository : ReactiveCrudRepository<TerminalLocalizationModel, Long> {
suspend fun findByTerminalId(terminalId: Long): Flux<TerminalLocalizationModel>
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package co.nilin.opex.wallet.ports.postgres.dao

import co.nilin.opex.wallet.ports.postgres.dto.TerminalView
import co.nilin.opex.wallet.ports.postgres.model.TerminalModel
import org.springframework.data.r2dbc.repository.Query
import org.springframework.data.repository.reactive.ReactiveCrudRepository
import org.springframework.stereotype.Repository
import reactor.core.publisher.Flux
Expand All @@ -9,8 +11,46 @@ import reactor.core.publisher.Mono
@Repository
interface TerminalRepository : ReactiveCrudRepository<TerminalModel, Long> {
fun findByIdentifier(identifier: String): Mono<TerminalModel>?
fun findByUuid(uuid: String): Mono<TerminalModel>?
fun findAllByOrderByDisplayOrder(): Flux<TerminalModel>

@Query(
"""
SELECT t.id,
t.uuid,
t.owner,
t.identifier,
t.active,
t.type,
t.meta_data,
t.display_order,
tl.description
FROM terminal t
LEFT JOIN terminal_localization tl
ON tl.terminal_id = t.id
AND tl.language = :lang
WHERE t.uuid = :uuid;
"""
)
fun findByUuid(uuid: String, lang: String? = null): Mono<TerminalView>?

@Query(
"""
SELECT t.id,
t.uuid,
t.owner,
t.identifier,
t.active,
t.type,
t.meta_data,
t.display_order,
tl.description
FROM terminal t
LEFT JOIN terminal_localization tl
ON tl.terminal_id = t.id
AND tl.language = :lang
order by t.display_order
"""
)
fun findAllByOrderByDisplayOrder(lang: String?= null): Flux<TerminalView>


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package co.nilin.opex.wallet.ports.postgres.dto

import co.nilin.opex.wallet.core.inout.TransferMethod

data class TerminalView(
var id: Long?,
val uuid: String,
val owner: String,
val identifier: String,
val active: Boolean,
val type: TransferMethod,
val metaData: String,
val displayOrder: Int?,
val description: String?
)
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package co.nilin.opex.wallet.ports.postgres.impl

import co.nilin.opex.common.OpexError
import co.nilin.opex.common.data.UserLanguage
import co.nilin.opex.common.utils.LanguageUtils.getUserLanguage
import co.nilin.opex.wallet.core.inout.TerminalCommand
import co.nilin.opex.wallet.core.spi.GatewayTerminalManager
import co.nilin.opex.wallet.ports.postgres.dao.TerminalRepository
import co.nilin.opex.wallet.ports.postgres.dao.GatewayTerminalRepository
import co.nilin.opex.wallet.ports.postgres.dao.OffChainGatewayRepository
import co.nilin.opex.wallet.ports.postgres.dao.TerminalRepository
import co.nilin.opex.wallet.ports.postgres.model.GatewayTerminalModel
import co.nilin.opex.wallet.ports.postgres.util.toDto
import co.nilin.opex.wallet.ports.postgres.util.toCommand
import kotlinx.coroutines.reactor.awaitSingleOrNull
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Component
Expand Down Expand Up @@ -39,7 +41,10 @@ class GatewayTerminalImpl(

override suspend fun getAssignedTerminalToGateway(gatewayUuid: String): List<TerminalCommand>? {
return gatewayRepository.findByGatewayUuid(gatewayUuid)?.awaitSingleOrNull()?.let { gateway ->
gatewayTerminalRepository.findByGatewayId(gateway.id!!)?.map { it.toDto() }?.collectList()
gatewayTerminalRepository.findByGatewayId(
gateway.id!!,
UserLanguage.safeValueOf(getUserLanguage().awaitSingleOrNull()).toString()
)?.map { it.toCommand() }?.collectList()
?.awaitSingleOrNull()
} ?: throw OpexError.GatewayNotFount.exception()
}
Expand Down
Loading
Loading