Skip to content

Commit

Permalink
merge: (#281) 휴무일 dto 리팩토링 (#306)
Browse files Browse the repository at this point in the history
  • Loading branch information
khcho0125 authored Jan 18, 2023
2 parents 3ccaecc + ebcf63f commit 70288c1
Show file tree
Hide file tree
Showing 42 changed files with 348 additions and 282 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import java.time.LocalDate

/**
*
* 연차 지정을 요청하는 AppointAnnualWebRequest
* 연차 지정 요청 정보를 전달하는 AppointAnnualData
*
* @author Chokyunghyeon
* @date 2022/12/19
* @version 1.0.0
* @date 2023/01/13
* @version 1.2.5
**/
data class AppointAnnualWebRequest(
data class AppointAnnualData(
val date: LocalDate
)
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ import java.time.LocalDate

/**
*
* 휴무일 지정을 요청하는 AppointHolidayWebRequest
* 휴무일 지정 요청 정보를 전달하는 AppointHolidayData
*
* @author Chokyunghyeon
* @date 2022/12/03
* @version 1.0.0
* @date 2023/01/13
* @version 1.2.5
**/
data class AppointHolidayWebRequest(
data class AppointHolidayData(
val date: LocalDate
)
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package team.comit.simtong.domain.holiday.dto
package team.comit.simtong.domain.holiday.dto.request

import java.time.LocalDate

/**
*
* 휴무표 작성 기간 설정 요청 정보를 전달하는 AppointHolidayPeriodRequest
* 휴무표 작성 기간 설정 요청 정보를 전달하는 AppointHolidayPeriodData
*
* @author Chokyunghyeon
* @date 2022/12/22
* @version 1.0.0
* @version 1.2.5
**/
data class AppointHolidayPeriodRequest(
data class AppointHolidayPeriodData(
val year: Int,

val month: Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package team.comit.simtong.domain.holiday.dto.request

import java.time.LocalDate

/**
*
* 휴무일 / 연차 취소 요청 정보를 전달하는 CancelHolidayData
*
* @author Chokyunghyeon
* @date 2023/01/13
* @version 1.2.5
**/
data class CancelHolidayData(
val date: LocalDate
)
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,16 @@ import java.util.UUID

/**
*
* 직원의 휴무일 변경을 요청하는 ChangeEmployeeHolidayWebRequest
* 직원 휴무일 변경 요청 정보를 전달하는 ChangeEmployeeHolidayData
*
* @author kimbeomjin
* @date 2022/12/23
* @version 1.0.0
* @author Chokyunghyeon
* @date 2023/01/13
* @version 1.2.5
**/
data class ChangeEmployeeHolidayWebRequest(
data class ChangeEmployeeHolidayData(
val beforeDate: LocalDate,

val userId: UUID,

val afterDate: LocalDate
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package team.comit.simtong.domain.holiday.dto.request

/**
*
* 휴무일 공유 요청 정보를 전달하는 ShareHolidayData
*
* @author Chokyunghyeon
* @date 2023/01/13
* @version 1.2.5
**/
data class ShareHolidayData(
val year: Int,

val month: Int
)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package team.comit.simtong.domain.holiday.dto
package team.comit.simtong.domain.holiday.dto.response

import team.comit.simtong.domain.holiday.model.HolidayType
import java.time.LocalDate
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package team.comit.simtong.domain.holiday.dto
package team.comit.simtong.domain.holiday.dto.response

import java.time.LocalDate

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package team.comit.simtong.domain.holiday.dto
package team.comit.simtong.domain.holiday.dto.response

import java.time.LocalDate

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ package team.comit.simtong.domain.holiday.dto.response
* @date 2022/12/20
* @version 1.0.0
**/
data class QueryRemainAnnualWebResponse(
data class QueryRemainAnnualResponse(
val result: Long
)
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package team.comit.simtong.domain.holiday.usecase

import team.comit.simtong.domain.holiday.dto.request.AppointAnnualData
import team.comit.simtong.domain.holiday.exception.HolidayExceptions
import team.comit.simtong.domain.holiday.model.Holiday
import team.comit.simtong.domain.holiday.model.Holiday.Companion.checkNotExceededAnnualLimit
Expand Down Expand Up @@ -29,25 +30,25 @@ class AppointAnnualUseCase(
private val securityPort: HolidaySecurityPort
) {

fun execute(date: LocalDate) {
if (date <= LocalDate.now()) {
fun execute(request: AppointAnnualData) {
if (request.date <= LocalDate.now()) {
throw HolidayExceptions.CannotChange("당일 이후만 연차를 사용할 수 있습니다.")
}

val user = queryUserPort.queryUserById(securityPort.getCurrentUserId())
?: throw UserExceptions.NotFound()

if (queryHolidayPort.existsHolidayByDateAndUserIdAndType(date, user.id, HolidayType.ANNUAL)) {
if (queryHolidayPort.existsHolidayByDateAndUserIdAndType(request.date, user.id, HolidayType.ANNUAL)) {
throw HolidayExceptions.AlreadyExists("해당 날짜는 이미 연차입니다.")
}

val annualCount = queryHolidayPort.countHolidayByYearAndUserIdAndType(date.year, user.id, HolidayType.ANNUAL)
val annualCount = queryHolidayPort.countHolidayByYearAndUserIdAndType(request.date.year, user.id, HolidayType.ANNUAL)

checkNotExceededAnnualLimit(annualCount)

commandHolidayPort.save(
Holiday.createAnnual(
date = date,
date = request.date,
userId = user.id,
spotId = user.spotId
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package team.comit.simtong.domain.holiday.usecase

import team.comit.simtong.domain.holiday.dto.AppointHolidayPeriodRequest
import team.comit.simtong.domain.holiday.dto.request.AppointHolidayPeriodData
import team.comit.simtong.domain.holiday.model.HolidayPeriod
import team.comit.simtong.domain.holiday.spi.CommandHolidayPeriodPort
import team.comit.simtong.domain.holiday.spi.HolidayQueryUserPort
Expand All @@ -14,7 +14,7 @@ import team.comit.simtong.global.annotation.UseCase
*
* @author Chokyunghyeon
* @date 2022/12/22
* @version 1.0.0
* @version 1.2.5
**/
@UseCase
class AppointHolidayPeriodUseCase(
Expand All @@ -23,7 +23,7 @@ class AppointHolidayPeriodUseCase(
private val securityPort: HolidaySecurityPort
) {

fun execute(request: AppointHolidayPeriodRequest) {
fun execute(request: AppointHolidayPeriodData) {
val user = queryUserPort.queryUserById(securityPort.getCurrentUserId())
?: throw UserExceptions.NotFound()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package team.comit.simtong.domain.holiday.usecase

import team.comit.simtong.domain.holiday.dto.request.AppointHolidayData
import team.comit.simtong.domain.holiday.exception.HolidayExceptions
import team.comit.simtong.domain.holiday.model.Holiday
import team.comit.simtong.domain.holiday.model.Holiday.Companion.checkNotExceededHolidayLimit
Expand Down Expand Up @@ -31,12 +32,12 @@ class AppointHolidayUseCase(
private val securityPort: HolidaySecurityPort
) {

fun execute(date: LocalDate) {
fun execute(request: AppointHolidayData) {
val user = queryUserPort.queryUserById(securityPort.getCurrentUserId())
?: throw UserExceptions.NotFound()

val holidayPeriod = queryHolidayPeriodPort.queryHolidayPeriodByYearAndMonthAndSpotId(
date.year, date.monthValue, user.spotId
request.date.year, request.date.monthValue, user.spotId
) ?: throw HolidayExceptions.NotFound("휴무표 작성 기간이 등록되지 않았습니다.")

val today = LocalDate.now()
Expand All @@ -45,17 +46,17 @@ class AppointHolidayUseCase(
throw HolidayExceptions.NotWritablePeriod()
}

if (queryHolidayPort.existsHolidayByDateAndUserIdAndType(date, user.id, HolidayType.HOLIDAY)) {
if (queryHolidayPort.existsHolidayByDateAndUserIdAndType(request.date, user.id, HolidayType.HOLIDAY)) {
throw HolidayExceptions.AlreadyExists("해당 날짜는 이미 휴무일입니다.")
}

val holidayCount = queryHolidayPort.countHolidayByWeekAndUserIdAndType(date, user.id, HolidayType.HOLIDAY)
val holidayCount = queryHolidayPort.countHolidayByWeekAndUserIdAndType(request.date, user.id, HolidayType.HOLIDAY)

checkNotExceededHolidayLimit(holidayCount)

commandHolidayPort.save(
Holiday.createHoliday(
date = date,
date = request.date,
userId = user.id,
spotId = user.spotId
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package team.comit.simtong.domain.holiday.usecase

import team.comit.simtong.domain.holiday.dto.request.CancelHolidayData
import team.comit.simtong.domain.holiday.exception.HolidayExceptions
import team.comit.simtong.domain.holiday.model.HolidayType
import team.comit.simtong.domain.holiday.spi.CommandHolidayPort
Expand All @@ -24,10 +25,10 @@ class CancelHolidayUseCase(
private val securityPort: HolidaySecurityPort
) {

fun execute(date: LocalDate) {
fun execute(request: CancelHolidayData) {
val currentUserId = securityPort.getCurrentUserId()

val holiday = queryHolidayPort.queryHolidayByDateAndUserId(date, currentUserId)
val holiday = queryHolidayPort.queryHolidayByDateAndUserId(request.date, currentUserId)
?: throw HolidayExceptions.NotFound()

when (holiday.type) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package team.comit.simtong.domain.holiday.usecase

import team.comit.simtong.domain.holiday.dto.request.ChangeEmployeeHolidayData
import team.comit.simtong.domain.holiday.exception.HolidayExceptions
import team.comit.simtong.domain.holiday.model.HolidayType
import team.comit.simtong.domain.holiday.spi.CommandHolidayPort
Expand All @@ -8,15 +9,14 @@ import team.comit.simtong.domain.holiday.spi.HolidaySecurityPort
import team.comit.simtong.domain.holiday.spi.QueryHolidayPort
import team.comit.simtong.domain.user.exception.UserExceptions
import team.comit.simtong.global.annotation.UseCase
import java.time.LocalDate
import java.util.UUID

/**
*
* 지점 직원의 휴무일을 변경하는 ChangeEmployeeHolidayUseCase
* 기존 휴무일 삭제, 새로운 휴무일 생성 (PK라 변경할 수 없음)
*
* @author kimbeomjin
* @author Chokyunghyeon
* @date 2022/12/23
* @version 1.2.5
**/
Expand All @@ -28,21 +28,21 @@ class ChangeEmployeeHolidayUseCase(
private val queryUserPort: HolidayQueryUserPort
) {

fun execute(beforeDate: LocalDate, userId: UUID, afterDate: LocalDate) {
fun execute(request: ChangeEmployeeHolidayData) {
val currentUserId = securityPort.getCurrentUserId()
val admin = queryUserPort.queryUserById(currentUserId) ?: throw UserExceptions.NotFound()

val holiday = queryHolidayPort.queryHolidayByDateAndUserId(beforeDate, userId)
val holiday = queryHolidayPort.queryHolidayByDateAndUserId(request.beforeDate, request.userId)
?: throw HolidayExceptions.NotFound()

if (!holiday.isSameSpot(admin.spotId)) {
throw HolidayExceptions.CannotChange("같은 지점 직원의 휴무일만 변경할 수 있습니다.")
}

val holidayCount = queryHolidayPort.countHolidayByWeekAndUserIdAndType(afterDate, userId, HolidayType.HOLIDAY)
val holidayCount = queryHolidayPort.countHolidayByWeekAndUserIdAndType(request.afterDate, request.userId, HolidayType.HOLIDAY)

commandHolidayPort.save(
holiday.change(holidayCount, afterDate)
holiday.change(holidayCount, request.afterDate)
)
commandHolidayPort.delete(holiday)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package team.comit.simtong.domain.holiday.usecase

import team.comit.simtong.domain.holiday.dto.QueryEmployeeHolidayResponse
import team.comit.simtong.domain.holiday.dto.response.QueryEmployeeHolidayResponse
import team.comit.simtong.domain.holiday.model.HolidayQueryType
import team.comit.simtong.domain.holiday.spi.HolidayQueryUserPort
import team.comit.simtong.domain.holiday.spi.HolidaySecurityPort
Expand All @@ -18,6 +18,7 @@ import java.util.UUID
* HolidayStatus가 WRITTEN 상태인 것만 조회
*
* @author kimbeomjin
* @author Chokyunghyeon
* @date 2022/12/22
* @version 1.2.5
**/
Expand All @@ -28,19 +29,19 @@ class QueryEmployeeHolidayUseCase(
private val queryUserPort: HolidayQueryUserPort
) {

fun execute(year: Int, month: Int, typeName: String, teamId: UUID?): QueryEmployeeHolidayResponse {
fun execute(year: Int, month: Int, type: HolidayQueryType, teamId: UUID?): QueryEmployeeHolidayResponse {
val currentUserId = securityPort.getCurrentUserId()
val user = queryUserPort.queryUserById(currentUserId) ?: throw UserExceptions.NotFound()

val holidays = queryHolidayPort.queryHolidaysByYearAndMonthAndTeamId(
year = year,
month = month,
type = HolidayQueryType.valueOf(typeName).toHolidayType(),
type = type.toHolidayType(),
spotId = user.spotId,
teamId = teamId
)

val response = holidays.map {
return holidays.map {
QueryEmployeeHolidayResponse.Holiday(
date = it.date,
type = it.type,
Expand All @@ -51,8 +52,6 @@ class QueryEmployeeHolidayUseCase(
spot = it.spotName
)
)
}

return QueryEmployeeHolidayResponse(response)
}.let(::QueryEmployeeHolidayResponse)
}
}
Loading

0 comments on commit 70288c1

Please sign in to comment.