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
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ class MissionApi(
@GetMapping("/current")
fun getCurrentMission(
@CurrentUserId userId: UUID,
): SuccessResponse<CurrentMissionResponse> = SuccessResponse.of(missionFinder.getCurrentMission(userId))
): SuccessResponse<CurrentMissionResponse> {
userMissionRegister.ensureInitialized(userId)
return SuccessResponse.of(missionFinder.getCurrentMission(userId))
}

@RequireAuth
@ResponseStatus(HttpStatus.NO_CONTENT)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ package com.didit.application.achievement
import com.didit.application.achievement.exception.CurrentMissionNotFoundException
import com.didit.application.achievement.provided.UserMissionRegister
import com.didit.application.achievement.required.MissionRepository
import com.didit.application.achievement.required.UserLevelRepository
import com.didit.application.achievement.required.UserMissionRepository
import com.didit.domain.achievement.MissionType
import com.didit.domain.achievement.UserLevel
import com.didit.domain.achievement.UserMission
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.time.LocalDateTime
Expand All @@ -15,7 +18,20 @@ import java.util.UUID
class UserMissionService(
private val userMissionRepository: UserMissionRepository,
private val missionRepository: MissionRepository,
private val userLevelRepository: UserLevelRepository,
) : UserMissionRegister {
override fun ensureInitialized(userId: UUID) {
if (userLevelRepository.existsByUserId(userId)) {
return
}
userLevelRepository.save(UserLevel.create(userId))

val lv1Mission = missionRepository.findByLevel(1) ?: return
val userMission = UserMission.create(userId, lv1Mission.id)
userMission.levelUpPopupShown = true
userMissionRepository.save(userMission)
}

override fun confirmLevelUp(userId: UUID) {
val userMission =
userMissionRepository.findCurrentMissionByUserId(userId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package com.didit.application.achievement.provided
import java.util.UUID

interface UserMissionRegister {
fun ensureInitialized(userId: UUID)

fun confirmLevelUp(userId: UUID)

fun retryMission(userId: UUID)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.didit.application.achievement

import com.didit.application.achievement.exception.CurrentMissionNotFoundException
import com.didit.application.achievement.required.MissionRepository
import com.didit.application.achievement.required.UserLevelRepository
import com.didit.application.achievement.required.UserMissionRepository
import com.didit.domain.achievement.Mission
import com.didit.domain.achievement.MissionStatus
Expand All @@ -15,6 +16,7 @@ import org.junit.jupiter.api.extension.ExtendWith
import org.mockito.Mock
import org.mockito.junit.jupiter.MockitoExtension
import org.mockito.kotlin.any
import org.mockito.kotlin.never
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
import java.time.LocalDateTime
Expand All @@ -28,14 +30,38 @@ class UserMissionServiceTest {
@Mock
lateinit var missionRepository: MissionRepository

@Mock
lateinit var userLevelRepository: UserLevelRepository

private lateinit var userMissionService: UserMissionService

private val userId = UUID.randomUUID()
private val missionId = UUID.randomUUID()

@BeforeEach
fun setUp() {
userMissionService = UserMissionService(userMissionRepository, missionRepository)
userMissionService = UserMissionService(userMissionRepository, missionRepository, userLevelRepository)
}

@Test
fun `레벨 정보가 없으면 UserLevel과 Lv1 미션을 생성한다`() {
whenever(userLevelRepository.existsByUserId(userId)).thenReturn(false)
whenever(missionRepository.findByLevel(1)).thenReturn(Mission.firstRetro())

userMissionService.ensureInitialized(userId)

verify(userLevelRepository).save(any())
verify(userMissionRepository).save(any())
}

@Test
fun `이미 레벨 정보가 있으면 아무것도 생성하지 않는다`() {
whenever(userLevelRepository.existsByUserId(userId)).thenReturn(true)

userMissionService.ensureInitialized(userId)

verify(userLevelRepository, never()).save(any())
verify(userMissionRepository, never()).save(any())
}

@Test
Expand Down
Loading