Skip to content

Commit 7d26695

Browse files
committed
improve onboarding status response structure
1 parent a8cefbb commit 7d26695

13 files changed

Lines changed: 73 additions & 52 deletions

src/main/kotlin/com/moa/common/auth/AuthenticatedMember.kt renamed to src/main/kotlin/com/moa/common/auth/Auth.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.moa.common.auth
22

33
@Target(AnnotationTarget.VALUE_PARAMETER)
44
@Retention(AnnotationRetention.RUNTIME)
5-
annotation class AuthenticatedMember
5+
annotation class Auth
66

77
data class AuthenticatedMemberInfo(
88
val id: Long,

src/main/kotlin/com/moa/common/auth/AuthenticatedMemberResolver.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import org.springframework.web.method.support.ModelAndViewContainer
1414
class AuthenticatedMemberResolver : HandlerMethodArgumentResolver {
1515

1616
override fun supportsParameter(parameter: MethodParameter): Boolean {
17-
return parameter.hasParameterAnnotation(AuthenticatedMember::class.java) &&
17+
return parameter.hasParameterAnnotation(Auth::class.java) &&
1818
parameter.parameterType == AuthenticatedMemberInfo::class.java
1919
}
2020

src/main/kotlin/com/moa/common/config/SwaggerConfig.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.moa.common.config
22

3-
import com.moa.common.auth.AuthenticatedMember
3+
import com.moa.common.auth.Auth
44
import io.swagger.v3.oas.models.Components
55
import io.swagger.v3.oas.models.OpenAPI
66
import io.swagger.v3.oas.models.info.Info
@@ -15,7 +15,7 @@ import org.springframework.context.annotation.Configuration
1515
class SwaggerConfig {
1616

1717
init {
18-
SpringDocUtils.getConfig().addAnnotationsToIgnore(AuthenticatedMember::class.java)
18+
SpringDocUtils.getConfig().addAnnotationsToIgnore(Auth::class.java)
1919
}
2020

2121
@Bean

src/main/kotlin/com/moa/controller/AuthController.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.moa.common.response.ApiResponse
44
import com.moa.service.AuthService
55
import com.moa.service.dto.KaKaoSignInUpRequest
66
import com.moa.service.dto.KakaoSignInUpResponse
7+
import jakarta.validation.Valid
78
import org.springframework.http.ResponseEntity
89
import org.springframework.web.bind.annotation.PostMapping
910
import org.springframework.web.bind.annotation.RequestBody
@@ -15,7 +16,7 @@ class AuthController(
1516
) {
1617

1718
@PostMapping("/api/v1/auth/kakao")
18-
fun kakaoSignInUp(@RequestBody kaKaoSignInUpRequest: KaKaoSignInUpRequest): ResponseEntity<ApiResponse<KakaoSignInUpResponse>> {
19+
fun kakaoSignInUp(@RequestBody @Valid kaKaoSignInUpRequest: KaKaoSignInUpRequest): ResponseEntity<ApiResponse<KakaoSignInUpResponse>> {
1920
return ResponseEntity.ok(ApiResponse.success(authService.kakaoSignInUp(kaKaoSignInUpRequest)))
2021
}
2122
}

src/main/kotlin/com/moa/controller/OnboardingController.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.moa.controller
22

3-
import com.moa.common.auth.AuthenticatedMember
3+
import com.moa.common.auth.Auth
44
import com.moa.common.auth.AuthenticatedMemberInfo
55
import com.moa.common.response.ApiResponse
66
import com.moa.service.*
@@ -22,24 +22,24 @@ class OnboardingController(
2222
) {
2323

2424
@GetMapping("/status")
25-
fun status(@AuthenticatedMember member: AuthenticatedMemberInfo) =
25+
fun status(@Auth member: AuthenticatedMemberInfo) =
2626
ApiResponse.success(onboardingStatusService.getStatus(member.id))
2727

2828
@PatchMapping("/profile")
2929
fun upsertProfile(
30-
@AuthenticatedMember member: AuthenticatedMemberInfo,
30+
@Auth member: AuthenticatedMemberInfo,
3131
@RequestBody @Valid req: ProfileUpsertRequest,
3232
) = ApiResponse.success(profileService.upsertProfile(member.id, req))
3333

3434
@PatchMapping("/payroll")
3535
fun upsertPayroll(
36-
@AuthenticatedMember member: AuthenticatedMemberInfo,
36+
@Auth member: AuthenticatedMemberInfo,
3737
@RequestBody @Valid req: PayrollUpsertRequest,
3838
) = ApiResponse.success(payrollService.upsert(member.id, req))
3939

4040
@PatchMapping("/work-policy")
4141
fun upsertWorkPolicy(
42-
@AuthenticatedMember member: AuthenticatedMemberInfo,
42+
@Auth member: AuthenticatedMemberInfo,
4343
@RequestBody @Valid req: WorkPolicyUpsertRequest,
4444
) = ApiResponse.success(workPolicyService.upsert(member.id, req))
4545

@@ -48,12 +48,12 @@ class OnboardingController(
4848
ApiResponse.success(termsService.getTerms())
4949

5050
@GetMapping("/terms/agreements")
51-
fun agreements(@AuthenticatedMember member: AuthenticatedMemberInfo) =
51+
fun agreements(@Auth member: AuthenticatedMemberInfo) =
5252
ApiResponse.success(termsService.getAgreements(member.id))
5353

5454
@PutMapping("/terms/agreements")
5555
fun agree(
56-
@AuthenticatedMember member: AuthenticatedMemberInfo,
56+
@Auth member: AuthenticatedMemberInfo,
5757
@RequestBody @Valid req: TermsAgreementRequest,
5858
) = ApiResponse.success(termsService.upsertAgreements(member.id, req))
5959
}

src/main/kotlin/com/moa/entity/Profile.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class Profile(
1111
var nickname: String,
1212

1313
@Column(nullable = false)
14-
var workplaceName: String,
14+
var workplace: String,
1515
) : BaseEntity() {
1616

1717
@Id

src/main/kotlin/com/moa/service/OnboardingStatusService.kt

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package com.moa.service
22

33
import com.moa.repository.*
44
import com.moa.service.dto.OnboardingStatusResponse
5+
import com.moa.service.dto.PayrollResponse
6+
import com.moa.service.dto.ProfileResponse
7+
import com.moa.service.dto.WorkPolicyResponse
58
import org.springframework.stereotype.Service
69
import org.springframework.transaction.annotation.Transactional
710
import java.time.LocalDate
@@ -17,6 +20,43 @@ class OnboardingStatusService(
1720

1821
@Transactional(readOnly = true)
1922
fun getStatus(memberId: Long, today: LocalDate = LocalDate.now()): OnboardingStatusResponse {
23+
// 프로필 완료 여부
24+
val profile = profileRepository.findByMemberId(memberId)
25+
?.takeIf { it.nickname.isNotBlank() && it.workplace.isNotBlank() }
26+
?.let {
27+
ProfileResponse(
28+
nickname = it.nickname,
29+
workplace = it.workplace,
30+
)
31+
}
32+
33+
// 급여 완료 여부
34+
val payroll = payrollVersionRepository
35+
.findTopByMemberIdAndEffectiveFromLessThanEqualOrderByEffectiveFromDesc(memberId, today)
36+
?.let {
37+
PayrollResponse(
38+
effectiveFrom = it.effectiveFrom,
39+
salaryInputType = it.salaryInputType,
40+
salaryAmount = it.salaryAmount,
41+
paydayDay = it.paydayDay,
42+
)
43+
}
44+
45+
// 근무정책 완료 여부
46+
val workPolicy = workPolicyVersionRepository
47+
.findTopByMemberIdAndEffectiveFromLessThanEqualOrderByEffectiveFromDesc(memberId, today)
48+
?.takeIf { it.workdays.isNotEmpty() }
49+
?.let {
50+
WorkPolicyResponse(
51+
effectiveFrom = it.effectiveFrom,
52+
workdays = it.workdays.sorted(),
53+
clockInTime = it.clockInTime,
54+
clockOutTime = it.clockOutTime,
55+
breakStartTime = it.breakStartTime,
56+
breakEndTime = it.breakEndTime,
57+
)
58+
}
59+
2060
// 필수 약관 동의 여부
2161
val requiredCodes = termRepository.findAll()
2262
.filter { it.required }
@@ -28,29 +68,11 @@ class OnboardingStatusService(
2868

2969
val hasRequiredTermsAgreed = requiredCodes.all { agreements[it] == true }
3070

31-
// 프로필 완료 여부
32-
val profile = profileRepository.findByMemberId(memberId)
33-
val profileCompleted =
34-
profile != null && profile.nickname.isNotBlank() && profile.workplaceName.isNotBlank()
35-
36-
// 급여 완료 여부
37-
val payrollCompleted =
38-
payrollVersionRepository
39-
.findTopByMemberIdAndEffectiveFromLessThanEqualOrderByEffectiveFromDesc(memberId, today) != null
40-
41-
// 근무정책 완료 여부
42-
val version =
43-
workPolicyVersionRepository
44-
.findTopByMemberIdAndEffectiveFromLessThanEqualOrderByEffectiveFromDesc(memberId, today)
45-
46-
val workPolicyCompleted =
47-
version != null && version.workdays.isNotEmpty()
48-
4971
return OnboardingStatusResponse(
72+
profile = profile,
73+
payroll = payroll,
74+
workPolicy = workPolicy,
5075
hasRequiredTermsAgreed = hasRequiredTermsAgreed,
51-
profileCompleted = profileCompleted,
52-
payrollCompleted = payrollCompleted,
53-
workPolicyCompleted = workPolicyCompleted,
5476
)
5577
}
5678
}

src/main/kotlin/com/moa/service/ProfileService.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import com.moa.entity.Profile
44
import com.moa.repository.ProfileRepository
55
import com.moa.service.dto.ProfileResponse
66
import com.moa.service.dto.ProfileUpsertRequest
7-
import com.moa.service.dto.WorkplaceDto
87
import org.springframework.stereotype.Service
98
import org.springframework.transaction.annotation.Transactional
109

@@ -16,22 +15,22 @@ class ProfileService(
1615
@Transactional
1716
fun upsertProfile(memberId: Long, req: ProfileUpsertRequest): ProfileResponse {
1817
val nickname = req.nickname
19-
val workplaceName = req.workplace.name
18+
val workplace = req.workplace
2019

2120
val profile = profileRepository.findByMemberId(memberId)?.apply {
2221
this.nickname = nickname
23-
this.workplaceName = workplaceName
22+
this.workplace = workplace
2423
} ?: profileRepository.save(
2524
Profile(
2625
memberId = memberId,
2726
nickname = nickname,
28-
workplaceName = workplaceName,
27+
workplace = workplace,
2928
)
3029
)
3130

3231
return ProfileResponse(
3332
nickname = profile.nickname,
34-
workplace = WorkplaceDto(profile.workplaceName),
33+
workplace = profile.workplace,
3534
)
3635
}
3736
}

src/main/kotlin/com/moa/service/dto/KaKaoSignInUpRequest.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package com.moa.service.dto
22

3+
import jakarta.validation.constraints.NotBlank
4+
35
data class KaKaoSignInUpRequest(
6+
@field:NotBlank
47
val idToken: String,
58
val fcmDeviceToken: String? = null,
69
) {
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.moa.service.dto
22

33
data class OnboardingStatusResponse(
4+
val profile: ProfileResponse?,
5+
val payroll: PayrollResponse?,
6+
val workPolicy: WorkPolicyResponse?,
47
val hasRequiredTermsAgreed: Boolean,
5-
val profileCompleted: Boolean,
6-
val payrollCompleted: Boolean,
7-
val workPolicyCompleted: Boolean,
88
)

0 commit comments

Comments
 (0)