@@ -2,22 +2,22 @@ package com.moa.service
22
33import com.moa.common.exception.BadRequestException
44import com.moa.common.exception.ErrorCode
5+ import com.moa.common.exception.NotFoundException
56import com.moa.entity.PayrollVersion
67import com.moa.repository.PayrollVersionRepository
78import com.moa.service.dto.PayrollResponse
89import com.moa.service.dto.PayrollUpsertRequest
910import org.springframework.stereotype.Service
1011import org.springframework.transaction.annotation.Transactional
12+ import java.time.LocalDate
1113
1214@Service
1315class PayrollService (
1416 private val payrollVersionRepository : PayrollVersionRepository ,
1517) {
1618
1719 @Transactional
18- fun upsert (memberId : Long , req : PayrollUpsertRequest ): PayrollResponse {
19-
20- val effectiveFrom = req.effectiveFrom
20+ fun upsert (memberId : Long , req : PayrollUpsertRequest , today : LocalDate = LocalDate .now()): PayrollResponse {
2121 val salaryInputType = req.salaryInputType
2222 val salaryAmount = req.salaryAmount
2323 val paydayDay = req.paydayDay ? : 25
@@ -26,7 +26,7 @@ class PayrollService(
2626 throw BadRequestException (ErrorCode .INVALID_PAYROLL_INPUT )
2727 }
2828
29- val saved = payrollVersionRepository.findByMemberIdAndEffectiveFrom(memberId, effectiveFrom )
29+ val saved = payrollVersionRepository.findByMemberIdAndEffectiveFrom(memberId, today )
3030 ?.apply {
3131 this .salaryInputType = salaryInputType
3232 this .salaryAmount = salaryAmount
@@ -35,7 +35,7 @@ class PayrollService(
3535 ? : payrollVersionRepository.save(
3636 PayrollVersion (
3737 memberId = memberId,
38- effectiveFrom = effectiveFrom ,
38+ effectiveFrom = today ,
3939 salaryInputType = salaryInputType,
4040 salaryAmount = salaryAmount,
4141 paydayDay = paydayDay,
@@ -49,4 +49,17 @@ class PayrollService(
4949 paydayDay = saved.paydayDay,
5050 )
5151 }
52+
53+ @Transactional(readOnly = true )
54+ fun getCurrent (memberId : Long , today : LocalDate = LocalDate .now()): PayrollResponse {
55+ val version = payrollVersionRepository
56+ .findTopByMemberIdAndEffectiveFromLessThanEqualOrderByEffectiveFromDesc(memberId, today)
57+ ? : throw NotFoundException ()
58+ return PayrollResponse (
59+ effectiveFrom = version.effectiveFrom,
60+ salaryInputType = version.salaryInputType,
61+ salaryAmount = version.salaryAmount,
62+ paydayDay = version.paydayDay,
63+ )
64+ }
5265}
0 commit comments