diff --git a/src/main/java/me/gg/pinit/pinittask/application/schedule/service/ScheduleService.java b/src/main/java/me/gg/pinit/pinittask/application/schedule/service/ScheduleService.java index 6113b5b..9cb1e50 100644 --- a/src/main/java/me/gg/pinit/pinittask/application/schedule/service/ScheduleService.java +++ b/src/main/java/me/gg/pinit/pinittask/application/schedule/service/ScheduleService.java @@ -14,7 +14,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.*; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; import java.util.Deque; import java.util.List; @@ -36,10 +39,10 @@ public Schedule getSchedule(Long memberId, Long scheduleId) { } @Transactional(readOnly = true) - public List getScheduleList(Long memberId, LocalDate date) { + public List getScheduleList(Long memberId, ZonedDateTime dateTime) { ZoneId memberZoneById = memberService.findZoneIdOfMember(memberId); - Instant startOfDay = date.atStartOfDay(memberZoneById).toInstant(); - Instant endExclusive = date.plusDays(1).atStartOfDay(memberZoneById).toInstant(); + Instant startOfDay = dateTime.toLocalDate().atStartOfDay(memberZoneById).toInstant(); + Instant endExclusive = dateTime.toLocalDate().plusDays(1).atStartOfDay(memberZoneById).toInstant(); return scheduleRepository.findAllByOwnerIdAndDesignatedStartTimeInstantBetween( memberId, diff --git a/src/main/java/me/gg/pinit/pinittask/interfaces/web/MemberController.java b/src/main/java/me/gg/pinit/pinittask/interfaces/web/MemberController.java deleted file mode 100644 index f74338e..0000000 --- a/src/main/java/me/gg/pinit/pinittask/interfaces/web/MemberController.java +++ /dev/null @@ -1,39 +0,0 @@ -package me.gg.pinit.pinittask.interfaces.web; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import me.gg.pinit.pinittask.application.member.service.MemberService; -import me.gg.pinit.pinittask.interfaces.utils.MemberId; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -@Deprecated -@RestController -public class MemberController { - private final MemberService memberService; - - public MemberController(MemberService memberService) { - this.memberService = memberService; - } - - @GetMapping("/now") - @Operation(summary = "현재 진행 중인 일정 ID 조회", description = "사용자의 현재 진행 중인 일정 ID를 조회합니다.") - public ResponseEntity getNowInProgressScheduleId(@MemberId Long memberId) { - Long scheduleId = memberService.getNowInProgressScheduleId(memberId); - return ResponseEntity.ok(scheduleId); - } - - @GetMapping("/zone-offset") - @Operation(summary = "사용자 시간대 조회", description = "사용자의 시간대를 조회합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "사용자 시간대 조회 성공", content = @Content(schema = @Schema(implementation = String.class, example = "+09:00"))), - }) - public ResponseEntity getMemberZoneOffset(@MemberId Long memberId) { - String zoneOffset = memberService.findZoneOffsetOfMember(memberId).toString(); - return ResponseEntity.ok(zoneOffset); - } -} diff --git a/src/main/java/me/gg/pinit/pinittask/interfaces/web/MemberControllerV0.java b/src/main/java/me/gg/pinit/pinittask/interfaces/web/MemberControllerV0.java index 42b6765..1a2875e 100644 --- a/src/main/java/me/gg/pinit/pinittask/interfaces/web/MemberControllerV0.java +++ b/src/main/java/me/gg/pinit/pinittask/interfaces/web/MemberControllerV0.java @@ -1,6 +1,7 @@ package me.gg.pinit.pinittask.interfaces.web; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -25,7 +26,7 @@ public MemberControllerV0(MemberService memberService) { @GetMapping("/now") @Operation(summary = "현재 진행 중인 일정 ID 조회", description = "사용자의 현재 진행 중인 일정 ID를 조회합니다.") - public ResponseEntity getNowInProgressScheduleId(@MemberId Long memberId) { + public ResponseEntity getNowInProgressScheduleId(@Parameter(hidden = true) @MemberId Long memberId) { Long scheduleId = memberService.getNowInProgressScheduleId(memberId); return ResponseEntity.ok(scheduleId); } @@ -35,7 +36,7 @@ public ResponseEntity getNowInProgressScheduleId(@MemberId Long memberId) @ApiResponses({ @ApiResponse(responseCode = "200", description = "사용자 시간대 조회 성공", content = @Content(schema = @Schema(implementation = String.class, example = "+09:00"))), }) - public ResponseEntity getMemberZoneOffset(@MemberId Long memberId) { + public ResponseEntity getMemberZoneOffset(@Parameter(hidden = true) @MemberId Long memberId) { String zoneOffset = memberService.findZoneOffsetOfMember(memberId).toString(); return ResponseEntity.ok(zoneOffset); } diff --git a/src/main/java/me/gg/pinit/pinittask/interfaces/web/ScheduleController.java b/src/main/java/me/gg/pinit/pinittask/interfaces/web/ScheduleController.java deleted file mode 100644 index 6dbfa8a..0000000 --- a/src/main/java/me/gg/pinit/pinittask/interfaces/web/ScheduleController.java +++ /dev/null @@ -1,169 +0,0 @@ -package me.gg.pinit.pinittask.interfaces.web; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.responses.ApiResponses; -import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.validation.Valid; -import lombok.RequiredArgsConstructor; -import me.gg.pinit.pinittask.application.datetime.DateTimeUtils; -import me.gg.pinit.pinittask.application.schedule.service.ScheduleAdjustmentService; -import me.gg.pinit.pinittask.application.schedule.service.ScheduleService; -import me.gg.pinit.pinittask.application.schedule.service.ScheduleStateChangeService; -import me.gg.pinit.pinittask.domain.schedule.model.Schedule; -import me.gg.pinit.pinittask.interfaces.dto.ScheduleRequest; -import me.gg.pinit.pinittask.interfaces.dto.ScheduleResponse; -import me.gg.pinit.pinittask.interfaces.exception.ErrorResponse; -import me.gg.pinit.pinittask.interfaces.utils.MemberId; -import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.List; - -@Deprecated -@RestController -@RequestMapping("/schedules") -@RequiredArgsConstructor -@Tag(name = "Schedule", description = "일정 관리 API") -@ApiResponses({ - @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse(responseCode = "404", description = "대상을 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse(responseCode = "409", description = "현재 상태와 충돌했습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))), - @ApiResponse(responseCode = "500", description = "서버 내부 오류", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) -}) -public class ScheduleController { - private final DateTimeUtils dateTimeUtils; - private final ScheduleService scheduleService; - private final ScheduleAdjustmentService scheduleAdjustmentService; - private final ScheduleStateChangeService scheduleStateChangeService; - - @PostMapping - @Operation(summary = "일정 생성", description = "새 일정과 의존 관계를 등록합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "201", description = "일정이 성공적으로 생성되었습니다."), - @ApiResponse(responseCode = "400", description = "요청 값 검증에 실패했습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - }) - public ResponseEntity createSchedule(@MemberId Long memberId, - @Valid @RequestBody ScheduleRequest request) { - Schedule saved = scheduleAdjustmentService.createSchedule(memberId, request.toCommand(null, memberId, dateTimeUtils)); - return ResponseEntity.status(HttpStatus.CREATED).body(ScheduleResponse.from(saved)); - } - - @PatchMapping("/{scheduleId}") - @Operation(summary = "일정 수정", description = "일정 본문과 의존 관계를 함께 수정합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "일정이 수정되었습니다."), - @ApiResponse(responseCode = "400", description = "요청 값 검증에 실패했습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - }) - public ResponseEntity updateSchedule(@MemberId Long memberId, - @PathVariable Long scheduleId, - @Valid @RequestBody ScheduleRequest request) { - Schedule updated = scheduleAdjustmentService.adjustSchedule(memberId, request.toCommand(scheduleId, memberId, dateTimeUtils)); - return ResponseEntity.ok(ScheduleResponse.from(updated)); - } - - @GetMapping - @Operation(summary = "일정 목록 조회", description = "지정한 날짜의 일정을 조회합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "목록 조회에 성공했습니다."), - @ApiResponse(responseCode = "400", description = "날짜 형식이 올바르지 않습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - }) - public List getSchedules(@MemberId Long memberId, - @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime date) { - return scheduleService.getScheduleList(memberId, date.toLocalDate()).stream() - .map(ScheduleResponse::from) - .toList(); - } - - @GetMapping("/{scheduleId}") - @Operation(summary = "일정 단건 조회", description = "특정 일정의 상세 정보를 조회합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "단건 조회에 성공했습니다."), - @ApiResponse(responseCode = "404", description = "일정을 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - }) - public ScheduleResponse getSchedule(@MemberId Long memberId, @PathVariable Long scheduleId) { - Schedule schedule = scheduleService.getSchedule(memberId, scheduleId); - return ScheduleResponse.from(schedule); - } - - @GetMapping("/week") - @Operation(summary = "주간 일정 조회", description = "해당 주의 일정을 조회합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "200", description = "주간 일정 조회에 성공했습니다."), - @ApiResponse(responseCode = "400", description = "잘못된 요청입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - }) - public List getWeeklySchedules(@MemberId Long memberId, - @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, - @RequestParam ZoneId zoneId) { - return scheduleService.getScheduleListForWeek(memberId, dateTimeUtils.toZonedDateTime(time, zoneId)).stream() - .map(ScheduleResponse::from) - .toList(); - } - - @PostMapping("/{scheduleId}/start") - @Operation(summary = "일정 시작", description = "일정을 진행 중 상태로 변경합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "204", description = "일정이 시작되었습니다."), - @ApiResponse(responseCode = "409", description = "잘못된 상태 전환입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - }) - public ResponseEntity startSchedule(@MemberId Long memberId, @PathVariable Long scheduleId, - @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, - @RequestParam ZoneId zoneId) { - scheduleStateChangeService.startSchedule(memberId, scheduleId, dateTimeUtils.toZonedDateTime(time, zoneId)); - return ResponseEntity.noContent().build(); - } - - @PostMapping("/{scheduleId}/complete") - @Operation(summary = "일정 완료", description = "진행 중인 일정을 완료 처리합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "204", description = "일정이 완료되었습니다."), - @ApiResponse(responseCode = "409", description = "잘못된 상태 전환입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - }) - public ResponseEntity completeSchedule(@MemberId Long memberId, @PathVariable Long scheduleId, - @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, - @RequestParam ZoneId zoneId) { - scheduleStateChangeService.completeSchedule(memberId, scheduleId, dateTimeUtils.toZonedDateTime(time, zoneId)); - return ResponseEntity.noContent().build(); - } - - @PostMapping("/{scheduleId}/suspend") - @Operation(summary = "일정 일시중지", description = "진행 중인 일정을 일시중지합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "204", description = "일정이 일시중지되었습니다."), - @ApiResponse(responseCode = "409", description = "잘못된 상태 전환입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - }) - public ResponseEntity suspendSchedule(@MemberId Long memberId, @PathVariable Long scheduleId, - @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, - @RequestParam ZoneId zoneId) { - scheduleStateChangeService.suspendSchedule(memberId, scheduleId, dateTimeUtils.toZonedDateTime(time, zoneId)); - return ResponseEntity.noContent().build(); - } - - @PostMapping("/{scheduleId}/cancel") - @Operation(summary = "일정 취소", description = "예정되었거나 진행 중인 일정을 취소합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "204", description = "일정이 취소되었습니다."), - @ApiResponse(responseCode = "409", description = "잘못된 상태 전환입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - }) - public ResponseEntity cancelSchedule(@MemberId Long memberId, @PathVariable Long scheduleId) { - scheduleStateChangeService.cancelSchedule(memberId, scheduleId); - return ResponseEntity.noContent().build(); - } - - @DeleteMapping("/{scheduleId}") - @Operation(summary = "일정 삭제", description = "지정한 일정을 삭제합니다.") - @ApiResponses({ - @ApiResponse(responseCode = "204", description = "일정이 삭제되었습니다."), - @ApiResponse(responseCode = "409", description = "잘못된 상태 전환입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - }) - public ResponseEntity deleteSchedule(@MemberId Long memberId, @PathVariable Long scheduleId) { - scheduleService.deleteSchedule(memberId, scheduleId); - return ResponseEntity.noContent().build(); - } -} diff --git a/src/main/java/me/gg/pinit/pinittask/interfaces/web/ScheduleControllerV0.java b/src/main/java/me/gg/pinit/pinittask/interfaces/web/ScheduleControllerV0.java index a5b7b18..08945bb 100644 --- a/src/main/java/me/gg/pinit/pinittask/interfaces/web/ScheduleControllerV0.java +++ b/src/main/java/me/gg/pinit/pinittask/interfaces/web/ScheduleControllerV0.java @@ -1,6 +1,7 @@ package me.gg.pinit.pinittask.interfaces.web; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -48,7 +49,7 @@ public class ScheduleControllerV0 { @ApiResponse(responseCode = "201", description = "일정이 성공적으로 생성되었습니다."), @ApiResponse(responseCode = "400", description = "요청 값 검증에 실패했습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) }) - public ResponseEntity createSchedule(@MemberId Long memberId, + public ResponseEntity createSchedule(@Parameter(hidden = true) @MemberId Long memberId, @Valid @RequestBody ScheduleRequest request) { Schedule saved = scheduleAdjustmentService.createSchedule(memberId, request.toCommand(null, memberId, dateTimeUtils)); return ResponseEntity.status(HttpStatus.CREATED).body(ScheduleResponse.from(saved)); @@ -60,7 +61,7 @@ public ResponseEntity createSchedule(@MemberId Long memberId, @ApiResponse(responseCode = "200", description = "일정이 수정되었습니다."), @ApiResponse(responseCode = "400", description = "요청 값 검증에 실패했습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) }) - public ResponseEntity updateSchedule(@MemberId Long memberId, + public ResponseEntity updateSchedule(@Parameter(hidden = true) @MemberId Long memberId, @PathVariable Long scheduleId, @Valid @RequestBody ScheduleRequest request) { Schedule updated = scheduleAdjustmentService.adjustSchedule(memberId, request.toCommand(scheduleId, memberId, dateTimeUtils)); @@ -73,9 +74,10 @@ public ResponseEntity updateSchedule(@MemberId Long memberId, @ApiResponse(responseCode = "200", description = "목록 조회에 성공했습니다."), @ApiResponse(responseCode = "400", description = "날짜 형식이 올바르지 않습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) }) - public List getSchedules(@MemberId Long memberId, - @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime date) { - return scheduleService.getScheduleList(memberId, date.toLocalDate()).stream() + public List getSchedules(@Parameter(hidden = true) @MemberId Long memberId, + @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, + @RequestParam ZoneId zoneId) { + return scheduleService.getScheduleList(memberId, dateTimeUtils.toZonedDateTime(time, zoneId)).stream() .map(ScheduleResponse::from) .toList(); } @@ -86,7 +88,7 @@ public List getSchedules(@MemberId Long memberId, @ApiResponse(responseCode = "200", description = "단건 조회에 성공했습니다."), @ApiResponse(responseCode = "404", description = "일정을 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) }) - public ScheduleResponse getSchedule(@MemberId Long memberId, @PathVariable Long scheduleId) { + public ScheduleResponse getSchedule(@Parameter(hidden = true) @MemberId Long memberId, @PathVariable Long scheduleId) { Schedule schedule = scheduleService.getSchedule(memberId, scheduleId); return ScheduleResponse.from(schedule); } @@ -97,7 +99,7 @@ public ScheduleResponse getSchedule(@MemberId Long memberId, @PathVariable Long @ApiResponse(responseCode = "200", description = "주간 일정 조회에 성공했습니다."), @ApiResponse(responseCode = "400", description = "잘못된 요청입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) }) - public List getWeeklySchedules(@MemberId Long memberId, + public List getWeeklySchedules(@Parameter(hidden = true) @MemberId Long memberId, @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, @RequestParam ZoneId zoneId) { return scheduleService.getScheduleListForWeek(memberId, dateTimeUtils.toZonedDateTime(time, zoneId)).stream() @@ -111,7 +113,7 @@ public List getWeeklySchedules(@MemberId Long memberId, @ApiResponse(responseCode = "204", description = "일정이 시작되었습니다."), @ApiResponse(responseCode = "409", description = "잘못된 상태 전환입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) }) - public ResponseEntity startSchedule(@MemberId Long memberId, @PathVariable Long scheduleId, + public ResponseEntity startSchedule(@Parameter(hidden = true) @MemberId Long memberId, @PathVariable Long scheduleId, @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, @RequestParam ZoneId zoneId) { scheduleStateChangeService.startSchedule(memberId, scheduleId, dateTimeUtils.toZonedDateTime(time, zoneId)); @@ -124,7 +126,7 @@ public ResponseEntity startSchedule(@MemberId Long memberId, @PathVariable @ApiResponse(responseCode = "204", description = "일정이 완료되었습니다."), @ApiResponse(responseCode = "409", description = "잘못된 상태 전환입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) }) - public ResponseEntity completeSchedule(@MemberId Long memberId, @PathVariable Long scheduleId, + public ResponseEntity completeSchedule(@Parameter(hidden = true) @MemberId Long memberId, @PathVariable Long scheduleId, @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, @RequestParam ZoneId zoneId) { scheduleStateChangeService.completeSchedule(memberId, scheduleId, dateTimeUtils.toZonedDateTime(time, zoneId)); @@ -137,7 +139,7 @@ public ResponseEntity completeSchedule(@MemberId Long memberId, @PathVaria @ApiResponse(responseCode = "204", description = "일정이 일시중지되었습니다."), @ApiResponse(responseCode = "409", description = "잘못된 상태 전환입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) }) - public ResponseEntity suspendSchedule(@MemberId Long memberId, @PathVariable Long scheduleId, + public ResponseEntity suspendSchedule(@Parameter(hidden = true) @MemberId Long memberId, @PathVariable Long scheduleId, @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, @RequestParam ZoneId zoneId) { scheduleStateChangeService.suspendSchedule(memberId, scheduleId, dateTimeUtils.toZonedDateTime(time, zoneId)); @@ -150,7 +152,7 @@ public ResponseEntity suspendSchedule(@MemberId Long memberId, @PathVariab @ApiResponse(responseCode = "204", description = "일정이 취소되었습니다."), @ApiResponse(responseCode = "409", description = "잘못된 상태 전환입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) }) - public ResponseEntity cancelSchedule(@MemberId Long memberId, @PathVariable Long scheduleId) { + public ResponseEntity cancelSchedule(@Parameter(hidden = true) @MemberId Long memberId, @PathVariable Long scheduleId) { scheduleStateChangeService.cancelSchedule(memberId, scheduleId); return ResponseEntity.noContent().build(); } @@ -161,7 +163,7 @@ public ResponseEntity cancelSchedule(@MemberId Long memberId, @PathVariabl @ApiResponse(responseCode = "204", description = "일정이 삭제되었습니다."), @ApiResponse(responseCode = "409", description = "잘못된 상태 전환입니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) }) - public ResponseEntity deleteSchedule(@MemberId Long memberId, @PathVariable Long scheduleId) { + public ResponseEntity deleteSchedule(@Parameter(hidden = true) @MemberId Long memberId, @PathVariable Long scheduleId) { scheduleService.deleteSchedule(memberId, scheduleId); return ResponseEntity.noContent().build(); } diff --git a/src/main/java/me/gg/pinit/pinittask/interfaces/web/StatisticsController.java b/src/main/java/me/gg/pinit/pinittask/interfaces/web/StatisticsController.java deleted file mode 100644 index 33fd07f..0000000 --- a/src/main/java/me/gg/pinit/pinittask/interfaces/web/StatisticsController.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.gg.pinit.pinittask.interfaces.web; - -import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Content; -import io.swagger.v3.oas.annotations.media.Schema; -import io.swagger.v3.oas.annotations.responses.ApiResponse; -import io.swagger.v3.oas.annotations.tags.Tag; -import me.gg.pinit.pinittask.application.datetime.DateTimeUtils; -import me.gg.pinit.pinittask.application.statistics.service.StatisticsService; -import me.gg.pinit.pinittask.interfaces.dto.StatisticsResponse; -import me.gg.pinit.pinittask.interfaces.exception.ErrorResponse; -import me.gg.pinit.pinittask.interfaces.utils.MemberId; -import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.time.LocalDateTime; -import java.time.ZoneId; - -@Deprecated -@RestController -@RequestMapping("/statistics") -@Tag(name = "Statistics", description = "통계 조회 API") -public class StatisticsController { - private final StatisticsService statisticsService; - private final DateTimeUtils dateTimeUtils; - - public StatisticsController(StatisticsService statisticsService, DateTimeUtils dateTimeUtils) { - this.statisticsService = statisticsService; - this.dateTimeUtils = dateTimeUtils; - } - - @GetMapping - @Operation(summary = "사용자 통계 조회", description = "주어진 시점 기준 주간 통계를 조회합니다.") - @ApiResponse(responseCode = "200", description = "통계 조회 성공") - @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - @ApiResponse(responseCode = "404", description = "통계를 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) - public StatisticsResponse getStatistics( - @MemberId Long memberId, - @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, - @RequestParam ZoneId zoneId - ) { - return StatisticsResponse.from(statisticsService.getStatistics(memberId, dateTimeUtils.toZonedDateTime(time, zoneId))); - } -} diff --git a/src/main/java/me/gg/pinit/pinittask/interfaces/web/StatisticsControllerV0.java b/src/main/java/me/gg/pinit/pinittask/interfaces/web/StatisticsControllerV0.java index 4176028..555e4b6 100644 --- a/src/main/java/me/gg/pinit/pinittask/interfaces/web/StatisticsControllerV0.java +++ b/src/main/java/me/gg/pinit/pinittask/interfaces/web/StatisticsControllerV0.java @@ -1,6 +1,7 @@ package me.gg.pinit.pinittask.interfaces.web; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; @@ -37,7 +38,7 @@ public StatisticsControllerV0(StatisticsService statisticsService, DateTimeUtils @ApiResponse(responseCode = "400", description = "잘못된 요청", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) @ApiResponse(responseCode = "404", description = "통계를 찾을 수 없습니다.", content = @Content(schema = @Schema(implementation = ErrorResponse.class))) public StatisticsResponse getStatistics( - @MemberId Long memberId, + @Parameter(hidden = true) @MemberId Long memberId, @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime time, @RequestParam ZoneId zoneId ) { diff --git a/src/test/java/me/gg/pinit/pinittask/application/schedule/service/ScheduleServiceTest.java b/src/test/java/me/gg/pinit/pinittask/application/schedule/service/ScheduleServiceTest.java index 78afd61..128a5b4 100644 --- a/src/test/java/me/gg/pinit/pinittask/application/schedule/service/ScheduleServiceTest.java +++ b/src/test/java/me/gg/pinit/pinittask/application/schedule/service/ScheduleServiceTest.java @@ -14,8 +14,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import java.time.LocalDate; import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.List; import java.util.Optional; @@ -62,7 +62,7 @@ void getScheduleList() { when(scheduleRepository.findAllByOwnerIdAndDesignatedStartTimeInstantBetween(eq(memberId), any(), any())).thenReturn(List.of(scheduleSample)); //when - List scheduleList = scheduleService.getScheduleList(memberId, LocalDate.of(2025, 10, 1)); + List scheduleList = scheduleService.getScheduleList(memberId, ZonedDateTime.of(2025, 10, 1, 0, 0, 0, 0, ZoneId.of("Asia/Seoul"))); //then assertNotNull(scheduleList);