Skip to content

Commit 6a29bfb

Browse files
committed
Change the get fee uri
2 parents 093b85e + 77309b7 commit 6a29bfb

7 files changed

Lines changed: 42 additions & 33 deletions

File tree

api/api-core/src/main/kotlin/co/nilin/opex/api/core/inout/UserFee.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,7 @@ import java.math.BigDecimal
55
data class UserFee(
66
val name: String,
77
val makerFee: BigDecimal,
8-
val takerFee: BigDecimal,
9-
8+
val takerFee: BigDecimal
109
)
1110

1211

profile/profile-app/src/main/kotlin/co/nilin/opex/profile/app/listener/KycLevelUpdatedListener.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import org.springframework.stereotype.Component
77
import co.nilin.opex.profile.core.spi.KycLevelUpdatedEventListener
88
import kotlinx.coroutines.CoroutineScope
99
import kotlinx.coroutines.Dispatchers
10+
import kotlinx.coroutines.SupervisorJob
1011
import kotlinx.coroutines.launch
1112

1213
@Component
1314
class KycLevelUpdatedListener(val userRegistrationService: ProfileManagement) : KycLevelUpdatedEventListener {
1415

1516
private val logger = LoggerFactory.getLogger(KycLevelUpdatedListener::class.java)
16-
val scope = CoroutineScope(Dispatchers.IO)
1717
override fun id(): String {
1818
return "KycLevelUpdatedListener"
1919
}
@@ -23,8 +23,13 @@ class KycLevelUpdatedListener(val userRegistrationService: ProfileManagement) :
2323
logger.info("==========================================================================")
2424
logger.info("Incoming UserLevelUpdated event: $event")
2525
logger.info("==========================================================================")
26-
scope.launch {
27-
userRegistrationService.updateUserLevel(event.userId, event.kycLevel)
26+
CoroutineScope(SupervisorJob() + Dispatchers.Default).launch {
27+
try {
28+
userRegistrationService.updateUserLevel(event.userId, event.kycLevel)
29+
logger.info("User level updated successfully for ${event.userId}")
30+
} catch (ex: Exception) {
31+
logger.error("Failed to update user level for ${event.userId}", ex)
32+
}
2833
}
2934
}
3035

profile/profile-app/src/main/kotlin/co/nilin/opex/profile/app/listener/UserCreatedListener.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@ package co.nilin.opex.profile.app.listener
22

33
import co.nilin.opex.profile.app.service.ProfileManagement
44
import co.nilin.opex.profile.core.spi.UserCreatedEventListener
5-
import kotlinx.coroutines.runBlocking
65
import org.slf4j.LoggerFactory
76
import org.springframework.stereotype.Component
87
import co.nilin.opex.profile.core.data.event.UserCreatedEvent
9-
import kotlinx.coroutines.CoroutineScope
10-
import kotlinx.coroutines.Dispatchers
11-
import kotlinx.coroutines.launch
8+
import kotlinx.coroutines.*
129

1310
@Component
1411
class UserCreatedListener(val userRegistrationService: ProfileManagement) : UserCreatedEventListener {
1512

1613
private val logger = LoggerFactory.getLogger(UserCreatedListener::class.java)
17-
val scope = CoroutineScope(Dispatchers.IO)
1814
override fun id(): String {
1915
return "UserCreatedEventListener"
2016
}
@@ -24,8 +20,13 @@ class UserCreatedListener(val userRegistrationService: ProfileManagement) : User
2420
logger.info("==========================================================================")
2521
logger.info("Incoming UserCreated event: $event")
2622
logger.info("==========================================================================")
27-
scope.launch {
28-
userRegistrationService.registerNewUser(event)
23+
CoroutineScope(SupervisorJob() + Dispatchers.Default).launch {
24+
try {
25+
userRegistrationService.registerNewUser(event)
26+
logger.info("User created successfully ")
27+
} catch (ex: Exception) {
28+
logger.error("Failed to create new user", ex)
29+
}
2930
}
3031
}
3132
}

profile/profile-app/src/main/kotlin/co/nilin/opex/profile/app/service/ProfileManagement.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import kotlinx.coroutines.flow.map
1515
import kotlinx.coroutines.flow.toList
1616
import kotlinx.coroutines.reactive.awaitFirst
1717
import kotlinx.coroutines.reactive.awaitFirstOrNull
18+
import kotlinx.coroutines.reactive.awaitSingle
19+
import kotlinx.coroutines.reactor.awaitSingle
1820
import org.slf4j.LoggerFactory
1921
import org.springframework.beans.factory.annotation.Value
2022
import org.springframework.stereotype.Component
@@ -205,26 +207,23 @@ class ProfileManagement(
205207

206208
validateInquiryResponses(shahkarResponse, comparativeResponse)
207209

208-
if (isIranian && !isAdminApprovalRequired) {
209-
approveProfileAutomatically(userId, completedProfile)
210-
} else {
211-
requestAdminApproval(userId)
212-
}
213-
return completedProfile
210+
if (isIranian && !isAdminApprovalRequired)
211+
return approveProfileAutomatically(userId, completedProfile)
212+
213+
return requestAdminApproval(userId)
214+
214215
}
215216

216-
private suspend fun approveProfileAutomatically(userId: String, completedProfile: Profile) {
217+
private suspend fun approveProfileAutomatically(userId: String, completedProfile: Profile): Profile {
217218
kycLevelUpdatedPublisher.publish(
218219
KycLevelUpdatedEvent(userId, KycLevel.LEVEL_2, LocalDateTime.now())
219220
)
220-
completedProfile.kycLevel = KycLevel.LEVEL_2
221-
completedProfile.status = ProfileStatus.SYSTEM_APPROVED
222-
profilePersister.updateStatus(userId, ProfileStatus.SYSTEM_APPROVED)
221+
return profilePersister.updateStatus(userId, ProfileStatus.SYSTEM_APPROVED)
223222
}
224223

225-
private suspend fun requestAdminApproval(userId: String) {
224+
private suspend fun requestAdminApproval(userId: String): Profile {
226225
saveProfileApprovalRequest(userId)
227-
profilePersister.updateStatus(userId, ProfileStatus.PENDING_ADMIN_APPROVAL)
226+
return profilePersister.updateStatus(userId, ProfileStatus.PENDING_ADMIN_APPROVAL)
228227
}
229228

230229
suspend fun updateProfile(

profile/profile-core/src/main/kotlin/co/nilin/opex/profile/core/spi/ProfilePersister.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@ interface ProfilePersister {
99

1010
suspend fun updateProfile(id: String, data: UpdateProfileRequest): Mono<Profile>
1111
suspend fun completeProfile(
12-
id: String,
13-
data: CompleteProfileRequest,
14-
mobileIdentityMatch: Boolean?,
15-
personalIdentityMatch: Boolean?
12+
id: String,
13+
data: CompleteProfileRequest,
14+
mobileIdentityMatch: Boolean?,
15+
personalIdentityMatch: Boolean?
1616
): Mono<Profile>
1717

1818
suspend fun updateProfileAsAdmin(id: String, data: Profile): Mono<Profile>
@@ -27,6 +27,6 @@ interface ProfilePersister {
2727
suspend fun validateMobileForUpdate(userId: String, mobile: String)
2828
suspend fun updateMobile(userId: String, mobile: String)
2929
suspend fun updateEmail(userId: String, email: String)
30-
suspend fun updateStatus(userId: String, status: ProfileStatus)
30+
suspend fun updateStatus(userId: String, status: ProfileStatus): Profile
3131
}
3232

profile/profile-ports/profile-postgres/src/main/kotlin/co/nilin/opex/profile/ports/postgres/dao/ProfileRepository.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,7 @@ interface ProfileRepository : ReactiveCrudRepository<ProfileModel, Long> {
5151

5252
fun findByEmail(email: String?): Mono<ProfileModel>?
5353

54+
@Query("UPDATE profile SET kyc_level = :level WHERE user_id = :userId")
55+
fun updateKycLevelByUserId(userId: String, level: String): Mono<Void>
56+
5457
}

profile/profile-ports/profile-postgres/src/main/kotlin/co/nilin/opex/profile/ports/postgres/imp/ProfileManagementImp.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import kotlinx.coroutines.flow.map
2222
import kotlinx.coroutines.flow.toList
2323
import kotlinx.coroutines.reactive.awaitFirst
2424
import kotlinx.coroutines.reactive.awaitFirstOrNull
25+
import kotlinx.coroutines.reactive.awaitSingle
2526
import org.slf4j.LoggerFactory
2627
import org.springframework.data.domain.PageRequest
2728
import org.springframework.data.domain.Sort
@@ -192,11 +193,11 @@ class ProfileManagementImp(
192193
return resp.toList()
193194
}
194195

196+
//todo add version column to profile table
195197
override suspend fun updateUserLevelAndStatus(userId: String, userLevel: KycLevel) {
196198
profileRepository.findByUserId(userId)?.awaitFirstOrNull()?.let { profileModel ->
197199
profileModel.kycLevel = userLevel
198-
profileRepository.save(profileModel).awaitFirstOrNull()
199-
200+
profileRepository.updateKycLevelByUserId(userId, userLevel.name).awaitFirstOrNull()
200201
} ?: throw OpexError.UserNotFound.exception()
201202
}
202203

@@ -243,11 +244,12 @@ class ProfileManagementImp(
243244
override suspend fun updateStatus(
244245
userId: String,
245246
status: ProfileStatus
246-
) {
247+
): Profile {
247248
val profile = profileRepository.findByUserId(userId)?.awaitFirstOrNull()
248249
?: throw OpexError.ProfileNotfound.exception()
249250
profile.status = status
250-
profileRepository.save(profile).awaitFirstOrNull()
251+
val saved = profileRepository.save(profile).awaitSingle()
252+
return saved.convert(Profile::class.java)
251253
}
252254

253255
fun isMajorChanges(oldData: ProfileModel, newData: UpdateProfileRequest): Boolean {

0 commit comments

Comments
 (0)