diff --git a/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/AppFeedbackController.java b/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/AppFeedbackController.java index 23329609..d0396e22 100644 --- a/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/AppFeedbackController.java +++ b/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/AppFeedbackController.java @@ -1,6 +1,8 @@ package kr.ac.kookmin.stream.api.app.welfare.feedback; import jakarta.validation.Valid; +import java.time.LocalDateTime; +import java.util.List; import kr.ac.kookmin.stream.api.app.AppApiUser; import kr.ac.kookmin.stream.api.app.welfare.feedback.request.FeedbackCreateRequest; import kr.ac.kookmin.stream.api.app.welfare.feedback.response.FeedbackResponse; @@ -9,9 +11,9 @@ import kr.ac.kookmin.stream.api.common.dto.PageParams; import kr.ac.kookmin.stream.api.common.dto.PageResponse; import kr.ac.kookmin.stream.common.PageResult; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackRoundOptions; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.OpenFeedback; -import kr.ac.kookmin.stream.welfare.domain.feedback.service.OpenFeedbackService; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.Feedback; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackPeriod; +import kr.ac.kookmin.stream.welfare.domain.feedback.service.FeedbackService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; @@ -27,12 +29,12 @@ @RequiredArgsConstructor public class AppFeedbackController implements AppFeedbackApi { - private final OpenFeedbackService openFeedbackService; + private final FeedbackService feedbackService; @Override @GetMapping("/{feedbackId}") public ApiResponse getFeedback(AppApiUser apiUser, @PathVariable Long feedbackId) { - OpenFeedback feedback = openFeedbackService.getById(feedbackId); + Feedback feedback = feedbackService.getById(feedbackId); return ApiResponse.success(FeedbackResponse.from(feedback)); } @@ -44,7 +46,8 @@ public ApiResponse> getFeedbacks( @RequestParam(required = false) Integer round, @Valid @ModelAttribute PageParams pageParams ) { - PageResult result = openFeedbackService.search(year, round, pageParams.toOffset()); + FeedbackPeriod period = FeedbackPeriod.of(year, round); + PageResult result = feedbackService.search(period, pageParams.toOffset()); return ApiResponse.success(PageResponse.from(result, FeedbackResponse::from)); } @@ -54,7 +57,7 @@ public ApiResponse createFeedback( AppApiUser apiUser, @Valid @RequestBody FeedbackCreateRequest request ) { - OpenFeedback feedback = openFeedbackService.create(apiUser.userId(), request.question()); + Feedback feedback = feedbackService.create(apiUser.userId(), request.question()); return ApiResponse.success(FeedbackResponse.from(feedback)); } @@ -64,7 +67,9 @@ public ApiResponse getFeedbackRounds( AppApiUser apiUser, @RequestParam(required = false) Integer year ) { - FeedbackRoundOptions options = openFeedbackService.getRoundOptions(year); - return ApiResponse.success(FeedbackRoundsResponse.from(options)); + List years = feedbackService.getAvailableYears(); + int targetYear = year != null ? year : LocalDateTime.now().getYear(); + List rounds = feedbackService.getRoundsOf(targetYear); + return ApiResponse.success(FeedbackRoundsResponse.of(years, targetYear, rounds)); } } diff --git a/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/response/FeedbackResponse.java b/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/response/FeedbackResponse.java index e998b185..b5efd301 100644 --- a/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/response/FeedbackResponse.java +++ b/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/response/FeedbackResponse.java @@ -1,7 +1,7 @@ package kr.ac.kookmin.stream.api.app.welfare.feedback.response; import java.time.LocalDateTime; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.OpenFeedback; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.Feedback; public record FeedbackResponse( Long feedbackId, @@ -12,7 +12,7 @@ public record FeedbackResponse( LocalDateTime answeredAt, String answer ) { - public static FeedbackResponse from(OpenFeedback feedback) { + public static FeedbackResponse from(Feedback feedback) { return new FeedbackResponse( feedback.id(), feedback.year(), diff --git a/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/response/FeedbackRoundsResponse.java b/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/response/FeedbackRoundsResponse.java index 3434da2a..c7ee9928 100644 --- a/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/response/FeedbackRoundsResponse.java +++ b/api/app-api/src/main/java/kr/ac/kookmin/stream/api/app/welfare/feedback/response/FeedbackRoundsResponse.java @@ -1,11 +1,10 @@ package kr.ac.kookmin.stream.api.app.welfare.feedback.response; import java.util.List; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackRoundOptions; public record FeedbackRoundsResponse(List years, int year, List rounds) { - public static FeedbackRoundsResponse from(FeedbackRoundOptions options) { - return new FeedbackRoundsResponse(options.years(), options.year(), options.rounds()); + public static FeedbackRoundsResponse of(List years, int year, List rounds) { + return new FeedbackRoundsResponse(years, year, rounds); } } diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/OpenFeedback.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/Feedback.java similarity index 65% rename from core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/OpenFeedback.java rename to core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/Feedback.java index 3eeefe7c..7815fd78 100644 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/OpenFeedback.java +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/Feedback.java @@ -2,7 +2,7 @@ import java.time.LocalDateTime; -public record OpenFeedback( +public record Feedback( Long id, int year, int round, @@ -15,12 +15,12 @@ public record OpenFeedback( ) { // 회차는 서버가 자동 배정하므로 여기서 받는다(요청 시각 = questionedAt, 아직 답변 없음). - public static OpenFeedback create(int year, int round, String question, Long createdBy) { - return new OpenFeedback(null, year, round, question, LocalDateTime.now(), null, null, createdBy, null); + public static Feedback create(int year, int round, String question, Long createdBy) { + return new Feedback(null, year, round, question, LocalDateTime.now(), null, null, createdBy, null); } // DB에서 복원할 때 모든 필드를 그대로 받는다. - public static OpenFeedback of( + public static Feedback of( Long id, int year, int round, @@ -31,6 +31,6 @@ public static OpenFeedback of( Long createdBy, Long answeredBy ) { - return new OpenFeedback(id, year, round, question, questionedAt, answer, answeredAt, createdBy, answeredBy); + return new Feedback(id, year, round, question, questionedAt, answer, answeredAt, createdBy, answeredBy); } } diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/FeedbackPeriod.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/FeedbackPeriod.java new file mode 100644 index 00000000..b76dd28e --- /dev/null +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/FeedbackPeriod.java @@ -0,0 +1,18 @@ +package kr.ac.kookmin.stream.welfare.domain.feedback.domain; + +import kr.ac.kookmin.stream.common.BusinessException; + +/** + * 연도·회차로 특정 회차를 가리키는 값. 실제로 존재하는 회차 엔티티({@link FeedbackRound})와 달리, + * 존재 여부와 무관하게 "어느 회차를 가리키는가"만 표현한다 — 둘 다 없으면 "지정 없음"을 뜻한다. + * round의 유효성(1 이상)은 이 값 자체의 불변식이라 여기서 검증한다. + */ +public record FeedbackPeriod(Integer year, Integer round) { + + public static FeedbackPeriod of(Integer year, Integer round) { + if (round != null && round <= 0) { + throw new BusinessException(FeedbackErrorCode.INVALID_FEEDBACK_ROUND); + } + return new FeedbackPeriod(year, round); + } +} diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/FeedbackRoundOptions.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/FeedbackRoundOptions.java deleted file mode 100644 index 9d570c69..00000000 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/domain/FeedbackRoundOptions.java +++ /dev/null @@ -1,12 +0,0 @@ -package kr.ac.kookmin.stream.welfare.domain.feedback.domain; - -import java.util.List; - -// 목록 화면의 연도 드롭다운·회차 칩을 그리는 데 쓰는 조회 전용 값 객체. -// years: 피드백 회차가 하나라도 존재했던 전체 연도. rounds: year 기준으로 실제 존재하는 회차 번호. -public record FeedbackRoundOptions(List years, int year, List rounds) { - - public static FeedbackRoundOptions of(List years, int year, List rounds) { - return new FeedbackRoundOptions(years, year, rounds); - } -} diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/repository/FeedbackRepository.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/repository/FeedbackRepository.java new file mode 100644 index 00000000..e95803f1 --- /dev/null +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/repository/FeedbackRepository.java @@ -0,0 +1,16 @@ +package kr.ac.kookmin.stream.welfare.domain.feedback.repository; + +import java.util.Optional; +import kr.ac.kookmin.stream.common.PageOffset; +import kr.ac.kookmin.stream.common.PageResult; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.Feedback; + +public interface FeedbackRepository { + + Optional findById(Long id); + + // year/round가 null이면 그 조건은 필터하지 않는다 + PageResult search(Integer year, Integer round, PageOffset pageOffset); + + Feedback save(Feedback feedback); +} diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/repository/OpenFeedbackRepository.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/repository/OpenFeedbackRepository.java deleted file mode 100644 index cfd679bf..00000000 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/repository/OpenFeedbackRepository.java +++ /dev/null @@ -1,16 +0,0 @@ -package kr.ac.kookmin.stream.welfare.domain.feedback.repository; - -import java.util.Optional; -import kr.ac.kookmin.stream.common.PageOffset; -import kr.ac.kookmin.stream.common.PageResult; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.OpenFeedback; - -public interface OpenFeedbackRepository { - - Optional findById(Long id); - - // year/round가 null이면 그 조건은 필터하지 않는다 - PageResult search(Integer year, Integer round, PageOffset pageOffset); - - OpenFeedback save(OpenFeedback feedback); -} diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/FeedbackService.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/FeedbackService.java new file mode 100644 index 00000000..7fdc96b2 --- /dev/null +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/FeedbackService.java @@ -0,0 +1,23 @@ +package kr.ac.kookmin.stream.welfare.domain.feedback.service; + +import java.util.List; +import kr.ac.kookmin.stream.common.PageOffset; +import kr.ac.kookmin.stream.common.PageResult; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.Feedback; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackPeriod; + +public interface FeedbackService { + + Feedback getById(Long id); + + PageResult search(FeedbackPeriod period, PageOffset pageOffset); + + // 회차는 현재 열려 있는 회차로 서버가 자동 배정한다 + Feedback create(Long memberId, String question); + + // 회차가 하나라도 존재했던 연도 목록(최신순) + List getAvailableYears(); + + // 해당 연도에 실제로 존재하는 회차 번호(오름차순) + List getRoundsOf(int year); +} diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/OpenFeedbackService.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/OpenFeedbackService.java deleted file mode 100644 index 45611551..00000000 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/OpenFeedbackService.java +++ /dev/null @@ -1,20 +0,0 @@ -package kr.ac.kookmin.stream.welfare.domain.feedback.service; - -import kr.ac.kookmin.stream.common.PageOffset; -import kr.ac.kookmin.stream.common.PageResult; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackRoundOptions; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.OpenFeedback; - -public interface OpenFeedbackService { - - OpenFeedback getById(Long id); - - // year/round가 null이면 그 조건은 전체(필터 없음) - PageResult search(Integer year, Integer round, PageOffset pageOffset); - - // 회차는 현재 열려 있는 회차로 서버가 자동 배정한다 - OpenFeedback create(Long memberId, String question); - - // year가 null이면 현재 연도 기준 - FeedbackRoundOptions getRoundOptions(Integer year); -} diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/impl/FeedbackServiceImpl.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/impl/FeedbackServiceImpl.java new file mode 100644 index 00000000..de1d3d76 --- /dev/null +++ b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/impl/FeedbackServiceImpl.java @@ -0,0 +1,56 @@ +package kr.ac.kookmin.stream.welfare.domain.feedback.service.impl; + +import java.time.LocalDateTime; +import java.util.List; +import kr.ac.kookmin.stream.common.BusinessException; +import kr.ac.kookmin.stream.common.PageOffset; +import kr.ac.kookmin.stream.common.PageResult; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.Feedback; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackErrorCode; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackPeriod; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackRound; +import kr.ac.kookmin.stream.welfare.domain.feedback.repository.FeedbackRepository; +import kr.ac.kookmin.stream.welfare.domain.feedback.repository.FeedbackRoundRepository; +import kr.ac.kookmin.stream.welfare.domain.feedback.service.FeedbackService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +class FeedbackServiceImpl implements FeedbackService { + + private final FeedbackRepository feedbackRepository; + private final FeedbackRoundRepository feedbackRoundRepository; + + @Override + public Feedback getById(Long id) { + return feedbackRepository.findById(id) + .orElseThrow(() -> new BusinessException(FeedbackErrorCode.FEEDBACK_NOT_FOUND)); + } + + @Override + public PageResult search(FeedbackPeriod period, PageOffset pageOffset) { + return feedbackRepository.search(period.year(), period.round(), pageOffset); + } + + @Override + @Transactional + public Feedback create(Long memberId, String question) { + FeedbackRound openRound = feedbackRoundRepository.findOpenAt(LocalDateTime.now()) + .orElseThrow(() -> new BusinessException(FeedbackErrorCode.FEEDBACK_NOT_OPEN)); + + Feedback feedback = Feedback.create(openRound.year(), openRound.round(), question, memberId); + return feedbackRepository.save(feedback); + } + + @Override + public List getAvailableYears() { + return feedbackRoundRepository.findDistinctYears(); + } + + @Override + public List getRoundsOf(int year) { + return feedbackRoundRepository.findRoundsByYear(year); + } +} diff --git a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/impl/OpenFeedbackServiceImpl.java b/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/impl/OpenFeedbackServiceImpl.java deleted file mode 100644 index 8c31a8ee..00000000 --- a/core/domain/welfare/src/main/java/kr/ac/kookmin/stream/welfare/domain/feedback/service/impl/OpenFeedbackServiceImpl.java +++ /dev/null @@ -1,58 +0,0 @@ -package kr.ac.kookmin.stream.welfare.domain.feedback.service.impl; - -import java.time.LocalDateTime; -import java.util.List; -import kr.ac.kookmin.stream.common.BusinessException; -import kr.ac.kookmin.stream.common.PageOffset; -import kr.ac.kookmin.stream.common.PageResult; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackErrorCode; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackRound; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.FeedbackRoundOptions; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.OpenFeedback; -import kr.ac.kookmin.stream.welfare.domain.feedback.repository.FeedbackRoundRepository; -import kr.ac.kookmin.stream.welfare.domain.feedback.repository.OpenFeedbackRepository; -import kr.ac.kookmin.stream.welfare.domain.feedback.service.OpenFeedbackService; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -@Service -@RequiredArgsConstructor -class OpenFeedbackServiceImpl implements OpenFeedbackService { - - private final OpenFeedbackRepository openFeedbackRepository; - private final FeedbackRoundRepository feedbackRoundRepository; - - @Override - public OpenFeedback getById(Long id) { - return openFeedbackRepository.findById(id) - .orElseThrow(() -> new BusinessException(FeedbackErrorCode.FEEDBACK_NOT_FOUND)); - } - - @Override - public PageResult search(Integer year, Integer round, PageOffset pageOffset) { - if (round != null && round <= 0) { - throw new BusinessException(FeedbackErrorCode.INVALID_FEEDBACK_ROUND); - } - return openFeedbackRepository.search(year, round, pageOffset); - } - - @Override - @Transactional - public OpenFeedback create(Long memberId, String question) { - FeedbackRound openRound = feedbackRoundRepository.findOpenAt(LocalDateTime.now()) - .orElseThrow(() -> new BusinessException(FeedbackErrorCode.FEEDBACK_NOT_OPEN)); - - OpenFeedback feedback = OpenFeedback.create(openRound.year(), openRound.round(), question, memberId); - return openFeedbackRepository.save(feedback); - } - - @Override - public FeedbackRoundOptions getRoundOptions(Integer year) { - List years = feedbackRoundRepository.findDistinctYears(); - int targetYear = year != null ? year : LocalDateTime.now().getYear(); - List rounds = feedbackRoundRepository.findRoundsByYear(targetYear); - - return FeedbackRoundOptions.of(years, targetYear, rounds); - } -} diff --git a/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/OpenFeedbackJpaEntity.java b/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/FeedbackJpaEntity.java similarity index 80% rename from infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/OpenFeedbackJpaEntity.java rename to infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/FeedbackJpaEntity.java index 7ff3cadb..b9ebd879 100644 --- a/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/OpenFeedbackJpaEntity.java +++ b/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/FeedbackJpaEntity.java @@ -8,14 +8,14 @@ import jakarta.persistence.Table; import java.time.LocalDateTime; import kr.ac.kookmin.stream.db.common.BaseSoftDeleteEntity; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.OpenFeedback; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.Feedback; import lombok.AccessLevel; import lombok.NoArgsConstructor; @Entity @Table(name = "open_feedbacks") @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class OpenFeedbackJpaEntity extends BaseSoftDeleteEntity { +public class FeedbackJpaEntity extends BaseSoftDeleteEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -49,7 +49,7 @@ public class OpenFeedbackJpaEntity extends BaseSoftDeleteEntity { @Column(name = "answered_by") private Long answeredBy; - private OpenFeedbackJpaEntity(OpenFeedback feedback) { + private FeedbackJpaEntity(Feedback feedback) { this.id = feedback.id(); this.year = feedback.year(); this.round = feedback.round(); @@ -61,11 +61,11 @@ private OpenFeedbackJpaEntity(OpenFeedback feedback) { this.answeredBy = feedback.answeredBy(); } - public static OpenFeedbackJpaEntity from(OpenFeedback feedback) { - return new OpenFeedbackJpaEntity(feedback); + public static FeedbackJpaEntity from(Feedback feedback) { + return new FeedbackJpaEntity(feedback); } - public OpenFeedback toDomain() { - return OpenFeedback.of(id, year, round, question, questionedAt, answer, answeredAt, createdBy, answeredBy); + public Feedback toDomain() { + return Feedback.of(id, year, round, question, questionedAt, answer, answeredAt, createdBy, answeredBy); } } diff --git a/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/OpenFeedbackJpaRepository.java b/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/FeedbackJpaRepository.java similarity index 65% rename from infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/OpenFeedbackJpaRepository.java rename to infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/FeedbackJpaRepository.java index ac24bdd7..9b6fd9e8 100644 --- a/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/OpenFeedbackJpaRepository.java +++ b/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/FeedbackJpaRepository.java @@ -7,22 +7,22 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; -public interface OpenFeedbackJpaRepository extends JpaRepository { +public interface FeedbackJpaRepository extends JpaRepository { - Optional findByIdAndIsDeletedFalse(Long id); + Optional findByIdAndIsDeletedFalse(Long id); @Query(value = """ - SELECT f FROM OpenFeedbackJpaEntity f + SELECT f FROM FeedbackJpaEntity f WHERE f.isDeleted = false AND (:year IS NULL OR f.year = :year) AND (:round IS NULL OR f.round = :round) ORDER BY f.questionedAt DESC, f.id DESC """, countQuery = """ - SELECT COUNT(f) FROM OpenFeedbackJpaEntity f + SELECT COUNT(f) FROM FeedbackJpaEntity f WHERE f.isDeleted = false AND (:year IS NULL OR f.year = :year) AND (:round IS NULL OR f.round = :round) """) - Page search(@Param("year") Integer year, @Param("round") Integer round, Pageable pageable); + Page search(@Param("year") Integer year, @Param("round") Integer round, Pageable pageable); } diff --git a/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/FeedbackRepositoryImpl.java b/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/FeedbackRepositoryImpl.java new file mode 100644 index 00000000..0733dedc --- /dev/null +++ b/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/FeedbackRepositoryImpl.java @@ -0,0 +1,42 @@ +package kr.ac.kookmin.stream.db.welfare; + +import java.util.Optional; +import kr.ac.kookmin.stream.common.PageOffset; +import kr.ac.kookmin.stream.common.PageResult; +import kr.ac.kookmin.stream.welfare.domain.feedback.domain.Feedback; +import kr.ac.kookmin.stream.welfare.domain.feedback.repository.FeedbackRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Repository; + +@Repository +@RequiredArgsConstructor +public class FeedbackRepositoryImpl implements FeedbackRepository { + + private final FeedbackJpaRepository feedbackJpaRepository; + + @Override + public Optional findById(Long id) { + return feedbackJpaRepository.findByIdAndIsDeletedFalse(id).map(FeedbackJpaEntity::toDomain); + } + + @Override + public PageResult search(Integer year, Integer round, PageOffset pageOffset) { + Page result = feedbackJpaRepository.search( + year, round, PageRequest.of(pageOffset.page(), pageOffset.size()) + ); + + return PageResult.of( + result.getContent().stream().map(FeedbackJpaEntity::toDomain).toList(), + result.getNumber(), + result.getSize(), + result.getTotalElements() + ); + } + + @Override + public Feedback save(Feedback feedback) { + return feedbackJpaRepository.save(FeedbackJpaEntity.from(feedback)).toDomain(); + } +} diff --git a/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/OpenFeedbackRepositoryImpl.java b/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/OpenFeedbackRepositoryImpl.java deleted file mode 100644 index f585850c..00000000 --- a/infrastructure/db/src/main/java/kr/ac/kookmin/stream/db/welfare/OpenFeedbackRepositoryImpl.java +++ /dev/null @@ -1,42 +0,0 @@ -package kr.ac.kookmin.stream.db.welfare; - -import java.util.Optional; -import kr.ac.kookmin.stream.common.PageOffset; -import kr.ac.kookmin.stream.common.PageResult; -import kr.ac.kookmin.stream.welfare.domain.feedback.domain.OpenFeedback; -import kr.ac.kookmin.stream.welfare.domain.feedback.repository.OpenFeedbackRepository; -import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.stereotype.Repository; - -@Repository -@RequiredArgsConstructor -public class OpenFeedbackRepositoryImpl implements OpenFeedbackRepository { - - private final OpenFeedbackJpaRepository openFeedbackJpaRepository; - - @Override - public Optional findById(Long id) { - return openFeedbackJpaRepository.findByIdAndIsDeletedFalse(id).map(OpenFeedbackJpaEntity::toDomain); - } - - @Override - public PageResult search(Integer year, Integer round, PageOffset pageOffset) { - Page result = openFeedbackJpaRepository.search( - year, round, PageRequest.of(pageOffset.page(), pageOffset.size()) - ); - - return PageResult.of( - result.getContent().stream().map(OpenFeedbackJpaEntity::toDomain).toList(), - result.getNumber(), - result.getSize(), - result.getTotalElements() - ); - } - - @Override - public OpenFeedback save(OpenFeedback feedback) { - return openFeedbackJpaRepository.save(OpenFeedbackJpaEntity.from(feedback)).toDomain(); - } -}