From b2f0c9f50052e58f8ec5d224aa5e5e5e12447616 Mon Sep 17 00:00:00 2001 From: Taeho KIM Date: Wed, 16 Jul 2025 17:04:02 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=8F=84=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=EC=A0=84=EC=B2=B4=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../comment/controller/CommentController.java | 10 +++---- .../comment/dto/CommentCreateRequestDto.java | 4 +-- .../comment/service/CommentService.java | 16 +++++------- .../coupon/user/dto/CouponResponseDto.java | 16 +----------- .../user/dto/CreateUserCouponResponseDto.java | 3 ++- .../user/dto/UserCouponResponseDto.java | 4 ++- .../domain/coupon/user/entity/Coupon.java | 1 + .../domain/coupon/user/entity/UserCoupon.java | 2 -- .../coupon/user/mapper/CouponMapper.java | 2 +- .../coupon/user/mapper/UserCouponMapper.java | 4 +-- .../user/repository/CouponRepository.java | 3 ++- .../controller/AdminLessonController.java | 25 ++++++------------ .../lesson/admin/dto/CreatedLessonDto.java | 4 ++- .../lesson/admin/dto/LessonResponseDto.java | 3 ++- .../admin/mapper/CreatedLessonMapper.java | 2 +- .../lesson/admin/mapper/LessonMapper.java | 6 ++--- .../repository/LessonImageRepository.java | 1 + .../admin/service/AdminLessonService.java | 9 ++----- .../controller/StudentLessonController.java | 26 +++++++------------ .../student/dto/LessonDetailResponseDto.java | 10 ++++--- .../student/dto/LessonSearchResponseDto.java | 3 ++- .../MyLessonApplicationListWrapperDto.java | 2 +- .../mapper/LessonApplicationMapper.java | 4 +-- .../student/mapper/LessonSearchMapper.java | 2 +- .../student/service/StudentLessonService.java | 14 ++++++---- .../profile/controller/ProfileController.java | 5 ++-- .../profile/service/ProfileService.java | 12 +++++---- .../ranking/controller/RankingController.java | 5 ++-- .../ranking/service/RankingService.java | 3 ++- .../review/controller/ReviewController.java | 9 ++++--- .../domain/review/service/ReviewService.java | 15 +++++------ .../config/security/SecurityConfig.java | 2 -- .../security/SessionAuthenticationFilter.java | 4 +-- .../trainus/global/dto/PageRequestDto.java | 20 ++++++++++++++ 34 files changed, 124 insertions(+), 127 deletions(-) create mode 100644 src/main/java/com/threestar/trainus/global/dto/PageRequestDto.java diff --git a/src/main/java/com/threestar/trainus/domain/comment/controller/CommentController.java b/src/main/java/com/threestar/trainus/domain/comment/controller/CommentController.java index b566e9b..e8e712c 100644 --- a/src/main/java/com/threestar/trainus/domain/comment/controller/CommentController.java +++ b/src/main/java/com/threestar/trainus/domain/comment/controller/CommentController.java @@ -16,11 +16,11 @@ import com.threestar.trainus.domain.comment.dto.CommentPageResponseDto; import com.threestar.trainus.domain.comment.dto.CommentResponseDto; import com.threestar.trainus.domain.comment.service.CommentService; +import com.threestar.trainus.global.annotation.LoginUser; import com.threestar.trainus.global.unit.BaseResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.servlet.http.HttpSession; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -37,8 +37,7 @@ public class CommentController { @PostMapping("/{lessonId}") @Operation(summary = "댓글 작성", description = "레슨 ID에 해당되는 댓글을 작성합니다.") public ResponseEntity> createComment(@PathVariable Long lessonId, - @Valid @RequestBody CommentCreateRequestDto request, HttpSession session) { - Long userId = (Long)session.getAttribute("LOGIN_USER"); + @Valid @RequestBody CommentCreateRequestDto request, @LoginUser Long userId) { CommentResponseDto comment = commentService.createComment(request, lessonId, userId); return BaseResponse.ok("댓글 등록 완료되었습니다", comment, HttpStatus.CREATED); } @@ -56,9 +55,8 @@ public ResponseEntity> readAll(@PathVariabl @DeleteMapping("/{commentId}") @Operation(summary = "댓글 삭제", description = "댓글 ID에 해당되는 댓글을 삭제합니다.") - public ResponseEntity deleteComment(@PathVariable Long commentId, HttpSession session) { - Long userId = (Long)session.getAttribute("LOGIN_USER"); + public ResponseEntity> deleteComment(@PathVariable Long commentId, @LoginUser Long userId) { commentService.delete(commentId, userId); - return ResponseEntity.noContent().build(); + return BaseResponse.okOnlyStatus(HttpStatus.NO_CONTENT); } } diff --git a/src/main/java/com/threestar/trainus/domain/comment/dto/CommentCreateRequestDto.java b/src/main/java/com/threestar/trainus/domain/comment/dto/CommentCreateRequestDto.java index c29b852..aa8bade 100644 --- a/src/main/java/com/threestar/trainus/domain/comment/dto/CommentCreateRequestDto.java +++ b/src/main/java/com/threestar/trainus/domain/comment/dto/CommentCreateRequestDto.java @@ -2,9 +2,9 @@ import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; -import lombok.Data; +import lombok.Getter; -@Data +@Getter public class CommentCreateRequestDto { @NotBlank(message = "댓글 내용은 필수입니다") @Size(max = 255, message = "댓글은 255자 이내여야 합니다.") diff --git a/src/main/java/com/threestar/trainus/domain/comment/service/CommentService.java b/src/main/java/com/threestar/trainus/domain/comment/service/CommentService.java index 170f7c1..48cf9ba 100644 --- a/src/main/java/com/threestar/trainus/domain/comment/service/CommentService.java +++ b/src/main/java/com/threestar/trainus/domain/comment/service/CommentService.java @@ -12,11 +12,9 @@ import com.threestar.trainus.domain.comment.mapper.CommentMapper; import com.threestar.trainus.domain.comment.repository.CommentRepository; import com.threestar.trainus.domain.lesson.admin.entity.Lesson; -import com.threestar.trainus.domain.lesson.admin.repository.LessonRepository; +import com.threestar.trainus.domain.lesson.admin.service.AdminLessonService; import com.threestar.trainus.domain.user.entity.User; -import com.threestar.trainus.domain.user.repository.UserRepository; -import com.threestar.trainus.global.exception.domain.ErrorCode; -import com.threestar.trainus.global.exception.handler.BusinessException; +import com.threestar.trainus.domain.user.service.UserService; import com.threestar.trainus.global.utils.PageLimitCalculator; import lombok.RequiredArgsConstructor; @@ -25,16 +23,14 @@ @RequiredArgsConstructor public class CommentService { - private final UserRepository userRepository; - private final LessonRepository lessonRepository; + private final AdminLessonService adminLessonService; private final CommentRepository commentRepository; + private final UserService userService; @Transactional public CommentResponseDto createComment(CommentCreateRequestDto request, Long lessonId, Long userId) { - Lesson findLesson = lessonRepository.findById(lessonId) - .orElseThrow(() -> new BusinessException(ErrorCode.LESSON_NOT_FOUND)); - User findUser = userRepository.findById(userId) - .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND)); + Lesson findLesson = adminLessonService.findLessonById(lessonId); + User findUser = userService.getUserById(userId); Comment parent = findParent(request); Comment newComment = Comment.builder() diff --git a/src/main/java/com/threestar/trainus/domain/coupon/user/dto/CouponResponseDto.java b/src/main/java/com/threestar/trainus/domain/coupon/user/dto/CouponResponseDto.java index f0d405a..a98cc14 100644 --- a/src/main/java/com/threestar/trainus/domain/coupon/user/dto/CouponResponseDto.java +++ b/src/main/java/com/threestar/trainus/domain/coupon/user/dto/CouponResponseDto.java @@ -20,21 +20,7 @@ public class CouponResponseDto { private LocalDateTime expirationDate; private OwnedStatus ownedStatus; private Integer quantity; - private String category; + private CouponCategory category; private LocalDateTime openTime; - public CouponResponseDto(Long couponId, String couponName, String discountPrice, - Integer minOrderPrice, LocalDateTime expirationDate, - String ownedStatus, Integer quantity, CouponCategory category, - LocalDateTime openTime) { - this.couponId = couponId; - this.couponName = couponName; - this.discountPrice = discountPrice; - this.minOrderPrice = minOrderPrice; - this.expirationDate = expirationDate; - this.ownedStatus = OwnedStatus.valueOf(ownedStatus); - this.quantity = quantity; - this.category = category.name(); - this.openTime = openTime; - } } diff --git a/src/main/java/com/threestar/trainus/domain/coupon/user/dto/CreateUserCouponResponseDto.java b/src/main/java/com/threestar/trainus/domain/coupon/user/dto/CreateUserCouponResponseDto.java index 7de9109..77fc55b 100644 --- a/src/main/java/com/threestar/trainus/domain/coupon/user/dto/CreateUserCouponResponseDto.java +++ b/src/main/java/com/threestar/trainus/domain/coupon/user/dto/CreateUserCouponResponseDto.java @@ -3,6 +3,7 @@ import java.time.LocalDateTime; import com.fasterxml.jackson.annotation.JsonFormat; +import com.threestar.trainus.domain.coupon.user.entity.CouponStatus; import lombok.Builder; import lombok.Getter; @@ -15,6 +16,6 @@ public class CreateUserCouponResponseDto { @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") private LocalDateTime createdAt; private LocalDateTime expirationDate; - private String status; + private CouponStatus status; } diff --git a/src/main/java/com/threestar/trainus/domain/coupon/user/dto/UserCouponResponseDto.java b/src/main/java/com/threestar/trainus/domain/coupon/user/dto/UserCouponResponseDto.java index 4b3e216..85a9501 100644 --- a/src/main/java/com/threestar/trainus/domain/coupon/user/dto/UserCouponResponseDto.java +++ b/src/main/java/com/threestar/trainus/domain/coupon/user/dto/UserCouponResponseDto.java @@ -2,6 +2,8 @@ import java.time.LocalDateTime; +import com.threestar.trainus.domain.coupon.user.entity.CouponStatus; + import lombok.Builder; import lombok.Getter; @@ -13,6 +15,6 @@ public class UserCouponResponseDto { private String discountPrice; private Integer minOrderPrice; private LocalDateTime expirationDate; - private String status; + private CouponStatus status; private LocalDateTime useDate; } diff --git a/src/main/java/com/threestar/trainus/domain/coupon/user/entity/Coupon.java b/src/main/java/com/threestar/trainus/domain/coupon/user/entity/Coupon.java index e649fdd..3b3c8fc 100644 --- a/src/main/java/com/threestar/trainus/domain/coupon/user/entity/Coupon.java +++ b/src/main/java/com/threestar/trainus/domain/coupon/user/entity/Coupon.java @@ -35,6 +35,7 @@ public class Coupon extends BaseDateEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @Builder.Default @OneToMany(mappedBy = "coupon") private List userCoupons = new ArrayList<>(); diff --git a/src/main/java/com/threestar/trainus/domain/coupon/user/entity/UserCoupon.java b/src/main/java/com/threestar/trainus/domain/coupon/user/entity/UserCoupon.java index 2677ba6..9314fac 100644 --- a/src/main/java/com/threestar/trainus/domain/coupon/user/entity/UserCoupon.java +++ b/src/main/java/com/threestar/trainus/domain/coupon/user/entity/UserCoupon.java @@ -17,7 +17,6 @@ import jakarta.persistence.UniqueConstraint; import lombok.AccessLevel; import lombok.AllArgsConstructor; -import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -29,7 +28,6 @@ } ) @Getter -@Builder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class UserCoupon extends BaseDateEntity { diff --git a/src/main/java/com/threestar/trainus/domain/coupon/user/mapper/CouponMapper.java b/src/main/java/com/threestar/trainus/domain/coupon/user/mapper/CouponMapper.java index 212cdae..33dcf26 100644 --- a/src/main/java/com/threestar/trainus/domain/coupon/user/mapper/CouponMapper.java +++ b/src/main/java/com/threestar/trainus/domain/coupon/user/mapper/CouponMapper.java @@ -17,7 +17,7 @@ public static CouponResponseDto toDto(Coupon coupon, boolean owned) { .expirationDate(coupon.getExpirationDate()) .ownedStatus(owned ? OwnedStatus.OWNED : OwnedStatus.NOT_OWNED) .quantity(coupon.getQuantity()) - .category(coupon.getCategory().name()) + .category(coupon.getCategory()) .openTime(coupon.getOpenAt()) .build(); } diff --git a/src/main/java/com/threestar/trainus/domain/coupon/user/mapper/UserCouponMapper.java b/src/main/java/com/threestar/trainus/domain/coupon/user/mapper/UserCouponMapper.java index 9f1c79e..7814e99 100644 --- a/src/main/java/com/threestar/trainus/domain/coupon/user/mapper/UserCouponMapper.java +++ b/src/main/java/com/threestar/trainus/domain/coupon/user/mapper/UserCouponMapper.java @@ -18,7 +18,7 @@ public static CreateUserCouponResponseDto toCreateUserCouponResponseDto(UserCoup .userId(userCoupon.getUser().getId()) .createdAt(userCoupon.getCreatedAt()) .expirationDate(userCoupon.getExpirationDate()) - .status(userCoupon.getStatus().name()) + .status(userCoupon.getStatus()) .build(); } @@ -30,7 +30,7 @@ public static UserCouponResponseDto toUserCouponResponseDto(UserCoupon userCoupo .discountPrice(coupon.getDiscountPrice()) .minOrderPrice(coupon.getMinOrderPrice()) .expirationDate(coupon.getExpirationDate()) - .status(coupon.getStatus().name()) + .status(coupon.getStatus()) .useDate(userCoupon.getUseDate()) .build(); } diff --git a/src/main/java/com/threestar/trainus/domain/coupon/user/repository/CouponRepository.java b/src/main/java/com/threestar/trainus/domain/coupon/user/repository/CouponRepository.java index 0cb8dcb..483baf8 100644 --- a/src/main/java/com/threestar/trainus/domain/coupon/user/repository/CouponRepository.java +++ b/src/main/java/com/threestar/trainus/domain/coupon/user/repository/CouponRepository.java @@ -19,7 +19,8 @@ public interface CouponRepository extends JpaRepository { @Query(""" SELECT new com.threestar.trainus.domain.coupon.user.dto.CouponResponseDto( c.id, c.name, c.discountPrice, c.minOrderPrice, c.expirationDate, - CASE WHEN uc.id IS NOT NULL THEN "OWNED" ELSE "NOT_OWNED" END, + CASE WHEN uc.id IS NOT NULL THEN com.threestar.trainus.domain.coupon.user.entity.OwnedStatus.OWNED + ELSE com.threestar.trainus.domain.coupon.user.entity.OwnedStatus.NOT_OWNED END, c.quantity, c.category, c.openAt ) FROM Coupon c diff --git a/src/main/java/com/threestar/trainus/domain/lesson/admin/controller/AdminLessonController.java b/src/main/java/com/threestar/trainus/domain/lesson/admin/controller/AdminLessonController.java index aca3ff9..35b9d36 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/admin/controller/AdminLessonController.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/admin/controller/AdminLessonController.java @@ -4,6 +4,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -21,6 +22,7 @@ import com.threestar.trainus.domain.lesson.admin.entity.ApplicationAction; import com.threestar.trainus.domain.lesson.admin.service.AdminLessonService; import com.threestar.trainus.global.annotation.LoginUser; +import com.threestar.trainus.global.dto.PageRequestDto; import com.threestar.trainus.global.exception.domain.ErrorCode; import com.threestar.trainus.global.exception.handler.BusinessException; import com.threestar.trainus.global.unit.BaseResponse; @@ -28,8 +30,6 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; -import jakarta.validation.constraints.Max; -import jakarta.validation.constraints.Min; import lombok.RequiredArgsConstructor; /** @@ -71,16 +71,13 @@ public ResponseEntity> deleteLesson( @Operation(summary = "레슨 신청자 목록 조회 api", description = "레슨 신청자의 목록을 조회 가능함.") public ResponseEntity> getLessonApplications( @PathVariable Long lessonId, - @RequestParam(defaultValue = "1") @Min(value = 1, message = "페이지는 1 이상이어야 합니다.") - @Max(value = 1000, message = "페이지는 1000 이하여야 합니다.") int page, - @RequestParam(defaultValue = "5") @Min(value = 1, message = "limit는 1 이상이어야 합니다.") - @Max(value = 100, message = "limit는 100 이하여야 합니다.") int limit, + @Valid @ModelAttribute PageRequestDto pageRequestDto, @RequestParam(defaultValue = "ALL") String status, @LoginUser Long loginUserId) { // 신청자 목록 조회 LessonApplicationListResponseDto responseDto = adminLessonService - .getLessonApplications(lessonId, page, limit, status, loginUserId); + .getLessonApplications(lessonId, pageRequestDto.getPage(), pageRequestDto.getLimit(), status, loginUserId); return BaseResponse.ok("레슨 신청자 목록 조회 완료.", responseDto, HttpStatus.OK); } @@ -106,15 +103,12 @@ public ResponseEntity> processLesson @Operation(summary = "레슨 참가자 목록 조회 api", description = "") public ResponseEntity> getLessonParticipants( @PathVariable Long lessonId, - @RequestParam(defaultValue = "1") @Min(value = 1, message = "페이지는 1 이상이어야 합니다.") - @Max(value = 1000, message = "페이지는 1000 이하여야 합니다.") int page, - @RequestParam(defaultValue = "5") @Min(value = 1, message = "limit는 1 이상이어야 합니다.") - @Max(value = 100, message = "limit는 100 이하여야 합니다.") int limit, + @Valid @ModelAttribute PageRequestDto pageRequestDto, @LoginUser Long loginUserId) { // 참가자 목록 조회 ParticipantListResponseDto responseDto = adminLessonService - .getLessonParticipants(lessonId, page, limit, loginUserId); + .getLessonParticipants(lessonId, pageRequestDto.getPage(), pageRequestDto.getLimit(), loginUserId); return BaseResponse.ok("레슨 참가자 목록 조회 완료.", responseDto, HttpStatus.OK); } @@ -124,10 +118,7 @@ public ResponseEntity> getLessonPartici @Operation(summary = "강사가 개설한 레슨 목록 조회 api", description = "") public ResponseEntity> getCreatedLessons( @PathVariable Long userId, - @RequestParam(defaultValue = "1") @Min(value = 1, message = "페이지는 1 이상이어야 합니다.") - @Max(value = 1000, message = "페이지는 1000 이하여야 합니다.") int page, - @RequestParam(defaultValue = "5") @Min(value = 1, message = "limit는 1 이상이어야 합니다.") - @Max(value = 100, message = "limit는 100 이하여야 합니다.") int limit, + @Valid @ModelAttribute PageRequestDto pageRequestDto, @RequestParam(required = false) String status, @LoginUser Long loginUserId) { @@ -138,7 +129,7 @@ public ResponseEntity> getCreatedLess // 개설한 레슨 목록 조회 CreatedLessonListResponseDto responseDto = adminLessonService - .getCreatedLessons(userId, page, limit, status); + .getCreatedLessons(userId, pageRequestDto.getPage(), pageRequestDto.getLimit(), status); return BaseResponse.ok("개설한 레슨 목록 조회 완료.", responseDto, HttpStatus.OK); } diff --git a/src/main/java/com/threestar/trainus/domain/lesson/admin/dto/CreatedLessonDto.java b/src/main/java/com/threestar/trainus/domain/lesson/admin/dto/CreatedLessonDto.java index 7fa8476..47678ba 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/admin/dto/CreatedLessonDto.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/admin/dto/CreatedLessonDto.java @@ -2,6 +2,8 @@ import java.time.LocalDateTime; +import com.threestar.trainus.domain.lesson.admin.entity.LessonStatus; + import lombok.Builder; /** @@ -14,7 +16,7 @@ public record CreatedLessonDto( Integer maxParticipants, Integer currentParticipants, Integer price, - String status, + LessonStatus status, LocalDateTime startAt, LocalDateTime endAt, Boolean openRun, diff --git a/src/main/java/com/threestar/trainus/domain/lesson/admin/dto/LessonResponseDto.java b/src/main/java/com/threestar/trainus/domain/lesson/admin/dto/LessonResponseDto.java index 2e3e448..8a30795 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/admin/dto/LessonResponseDto.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/admin/dto/LessonResponseDto.java @@ -4,6 +4,7 @@ import java.util.List; import com.threestar.trainus.domain.lesson.admin.entity.Category; +import com.threestar.trainus.domain.lesson.admin.entity.LessonStatus; import lombok.Builder; @@ -24,7 +25,7 @@ public record LessonResponseDto( String district, String dong, String addressDetail, - String status, + LessonStatus status, LocalDateTime createdAt, List lessonImages ) { diff --git a/src/main/java/com/threestar/trainus/domain/lesson/admin/mapper/CreatedLessonMapper.java b/src/main/java/com/threestar/trainus/domain/lesson/admin/mapper/CreatedLessonMapper.java index 59f50ba..692cf7d 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/admin/mapper/CreatedLessonMapper.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/admin/mapper/CreatedLessonMapper.java @@ -16,7 +16,7 @@ public static CreatedLessonDto toCreatedLessonDto(Lesson lesson) { .maxParticipants(lesson.getMaxParticipants()) .currentParticipants(lesson.getParticipantCount()) .price(lesson.getPrice()) - .status(lesson.getStatus().name()) + .status(lesson.getStatus()) .startAt(lesson.getStartAt()) .endAt(lesson.getEndAt()) .openRun(lesson.getOpenRun()) diff --git a/src/main/java/com/threestar/trainus/domain/lesson/admin/mapper/LessonMapper.java b/src/main/java/com/threestar/trainus/domain/lesson/admin/mapper/LessonMapper.java index c682051..5169135 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/admin/mapper/LessonMapper.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/admin/mapper/LessonMapper.java @@ -55,7 +55,7 @@ public static LessonResponseDto toResponseDto(Lesson lesson, List l .district(lesson.getDistrict()) .dong(lesson.getDong()) .addressDetail(lesson.getAddressDetail()) - .status(lesson.getStatus().name()) // enum이름 반환 + .status(lesson.getStatus()) .createdAt(lesson.getCreatedAt()) .lessonImages(imageUrls) // 이미지 URL 목록 .build(); @@ -80,11 +80,11 @@ public static LessonDetailResponseDto toLessonDetailDto( .profileImage(profile.getProfileImage()) .reviewCount(reviewCount) .rating(rating) - .category(lesson.getCategory().name()) + .category(lesson.getCategory()) .price(lesson.getPrice()) .maxParticipants(lesson.getMaxParticipants()) .currentParticipants(lesson.getParticipantCount()) - .status(lesson.getStatus().name()) + .status(lesson.getStatus()) .startAt(lesson.getStartAt()) .endAt(lesson.getEndAt()) .openTime(lesson.getOpenTime()) diff --git a/src/main/java/com/threestar/trainus/domain/lesson/admin/repository/LessonImageRepository.java b/src/main/java/com/threestar/trainus/domain/lesson/admin/repository/LessonImageRepository.java index 0bfd55f..4719b57 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/admin/repository/LessonImageRepository.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/admin/repository/LessonImageRepository.java @@ -10,6 +10,7 @@ public interface LessonImageRepository extends JpaRepository { List findByLesson(Lesson lesson); + List findAllByLessonId(Long id); } diff --git a/src/main/java/com/threestar/trainus/domain/lesson/admin/service/AdminLessonService.java b/src/main/java/com/threestar/trainus/domain/lesson/admin/service/AdminLessonService.java index 7bf82b5..5bc16e6 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/admin/service/AdminLessonService.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/admin/service/AdminLessonService.java @@ -53,9 +53,7 @@ public class AdminLessonService { // 새로운 레슨을 생성하는 메서드 public LessonResponseDto createLesson(LessonCreateRequestDto requestDto, Long userId) { // User 조회 - //TODO: 공통메소드 - User user = userRepository.findById(userId) - .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND)); + User user = userService.getUserById(userId); validateLessonTimes(requestDto.startAt(), requestDto.endAt()); @@ -119,10 +117,7 @@ private List saveLessonImages(Lesson lesson, List imageUrls @Transactional public void deleteLesson(Long lessonId, Long userId) { // User 존재 확인 - //TODO: 공통메소드 - User user = userRepository.findById(userId) - .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND)); - + User user = userService.getUserById(userId); //레슨 조회 Lesson lesson = findLessonById(lessonId); diff --git a/src/main/java/com/threestar/trainus/domain/lesson/student/controller/StudentLessonController.java b/src/main/java/com/threestar/trainus/domain/lesson/student/controller/StudentLessonController.java index 0ca6bf6..85e39db 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/student/controller/StudentLessonController.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/student/controller/StudentLessonController.java @@ -4,12 +4,14 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import com.threestar.trainus.domain.lesson.admin.entity.Category; import com.threestar.trainus.domain.lesson.student.dto.LessonApplicationResponseDto; import com.threestar.trainus.domain.lesson.student.dto.LessonDetailResponseDto; import com.threestar.trainus.domain.lesson.student.dto.LessonSearchListResponseDto; @@ -18,6 +20,8 @@ import com.threestar.trainus.domain.lesson.student.dto.MyLessonApplicationListResponseDto; import com.threestar.trainus.domain.lesson.student.dto.MyLessonApplicationListWrapperDto; import com.threestar.trainus.domain.lesson.student.service.StudentLessonService; +import com.threestar.trainus.global.annotation.LoginUser; +import com.threestar.trainus.global.dto.PageRequestDto; import com.threestar.trainus.global.exception.domain.ErrorCode; import com.threestar.trainus.global.exception.handler.BusinessException; import com.threestar.trainus.global.unit.BaseResponse; @@ -26,6 +30,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpSession; +import jakarta.validation.Valid; import jakarta.validation.constraints.Max; import jakarta.validation.constraints.Min; import lombok.RequiredArgsConstructor; @@ -40,11 +45,8 @@ public class StudentLessonController { @GetMapping @Operation(summary = "레슨 검색 api", description = "category(필수, Default: \"ALL\") / search(선택) / 그외 법정동 선택 필수") public ResponseEntity> searchLessons( - @RequestParam(defaultValue = "1") @Min(value = 1, message = "페이지는 1 이상이어야 합니다.") - @Max(value = 1000, message = "페이지는 1000 이하여야 합니다.") int page, - @RequestParam(defaultValue = "5") @Min(value = 1, message = "limit는 1 이상이어야 합니다.") - @Max(value = 100, message = "limit는 100 이하여야 합니다.") int limit, - @RequestParam String category, + @Valid @ModelAttribute PageRequestDto pageRequestDto, + @RequestParam Category category, @RequestParam(required = false) String search, @RequestParam String city, @RequestParam String district, @@ -52,7 +54,7 @@ public ResponseEntity> searchLessons( ) { LessonSearchListResponseDto serviceResponse = studentLessonService.searchLessons( - page, limit, category, search, city, district, dong + pageRequestDto.getPage(), pageRequestDto.getLimit(), category, search, city, district, dong ); LessonSearchListWrapperDto response = new LessonSearchListWrapperDto(serviceResponse.lessons()); @@ -72,12 +74,8 @@ public ResponseEntity> getLessonDetail( @Operation(summary = "레슨 신청", description = "레슨 ID에 해당되는 레슨을 신청합니다.") public ResponseEntity> createLessonApplication( @PathVariable Long lessonId, - HttpSession session + @LoginUser Long userId ) { - Long userId = (Long)session.getAttribute("LOGIN_USER"); - if (userId == null) { - throw new BusinessException(ErrorCode.AUTHENTICATION_REQUIRED); - } LessonApplicationResponseDto response = studentLessonService.applyToLesson(lessonId, userId); return BaseResponse.ok("레슨 신청 완료", response, HttpStatus.OK); } @@ -86,12 +84,8 @@ public ResponseEntity> createLessonAp @Operation(summary = "레슨 신청 취소", description = "레슨 ID에 해당되는 레슨 신청을 취소합니다.") public ResponseEntity> deleteLessonApplication( @PathVariable Long lessonId, - HttpSession session + @LoginUser Long userId ) { - Long userId = (Long)session.getAttribute("LOGIN_USER"); - if (userId == null) { - throw new BusinessException(ErrorCode.AUTHENTICATION_REQUIRED); - } studentLessonService.cancelLessonApplication(lessonId, userId); return BaseResponse.okOnlyStatus(HttpStatus.NO_CONTENT); } diff --git a/src/main/java/com/threestar/trainus/domain/lesson/student/dto/LessonDetailResponseDto.java b/src/main/java/com/threestar/trainus/domain/lesson/student/dto/LessonDetailResponseDto.java index 5ef7e5a..929e45f 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/student/dto/LessonDetailResponseDto.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/student/dto/LessonDetailResponseDto.java @@ -3,6 +3,9 @@ import java.time.LocalDateTime; import java.util.List; +import com.threestar.trainus.domain.lesson.admin.entity.Category; +import com.threestar.trainus.domain.lesson.admin.entity.LessonStatus; + import lombok.Builder; @Builder @@ -17,11 +20,11 @@ public record LessonDetailResponseDto( int likeCount, int reviewCount, double rating, - String category, + Category category, int price, int maxParticipants, int currentParticipants, - String status, + LessonStatus status, LocalDateTime startAt, LocalDateTime endAt, LocalDateTime openTime, @@ -33,4 +36,5 @@ public record LessonDetailResponseDto( LocalDateTime createdAt, LocalDateTime updatedAt, List lessonImages -) {} \ No newline at end of file +) { +} \ No newline at end of file diff --git a/src/main/java/com/threestar/trainus/domain/lesson/student/dto/LessonSearchResponseDto.java b/src/main/java/com/threestar/trainus/domain/lesson/student/dto/LessonSearchResponseDto.java index ca01b30..52d688d 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/student/dto/LessonSearchResponseDto.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/student/dto/LessonSearchResponseDto.java @@ -4,6 +4,7 @@ import java.util.List; import com.threestar.trainus.domain.lesson.admin.entity.Category; +import com.threestar.trainus.domain.lesson.admin.entity.LessonStatus; public record LessonSearchResponseDto( long id, @@ -16,7 +17,7 @@ public record LessonSearchResponseDto( int price, int maxParticipants, int currentParticipants, - String status, + LessonStatus status, LocalDateTime startAt, LocalDateTime endAt, LocalDateTime openTime, diff --git a/src/main/java/com/threestar/trainus/domain/lesson/student/dto/MyLessonApplicationListWrapperDto.java b/src/main/java/com/threestar/trainus/domain/lesson/student/dto/MyLessonApplicationListWrapperDto.java index e8e0911..c19a605 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/student/dto/MyLessonApplicationListWrapperDto.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/student/dto/MyLessonApplicationListWrapperDto.java @@ -4,5 +4,5 @@ public record MyLessonApplicationListWrapperDto( List lessonApplications -){ +) { } diff --git a/src/main/java/com/threestar/trainus/domain/lesson/student/mapper/LessonApplicationMapper.java b/src/main/java/com/threestar/trainus/domain/lesson/student/mapper/LessonApplicationMapper.java index e3a7348..8c6482c 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/student/mapper/LessonApplicationMapper.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/student/mapper/LessonApplicationMapper.java @@ -1,7 +1,6 @@ package com.threestar.trainus.domain.lesson.student.mapper; import java.util.List; -import java.util.stream.Collectors; import com.threestar.trainus.domain.lesson.admin.entity.LessonApplication; import com.threestar.trainus.domain.lesson.student.dto.LessonSummaryResponseDto; @@ -40,7 +39,8 @@ public static List toDtoList(List applications, int count) { + public static MyLessonApplicationListResponseDto toDtoListWithCount(List applications, + int count) { return new MyLessonApplicationListResponseDto( toDtoList(applications), count diff --git a/src/main/java/com/threestar/trainus/domain/lesson/student/mapper/LessonSearchMapper.java b/src/main/java/com/threestar/trainus/domain/lesson/student/mapper/LessonSearchMapper.java index 99b6999..4c693aa 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/student/mapper/LessonSearchMapper.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/student/mapper/LessonSearchMapper.java @@ -32,7 +32,7 @@ public static LessonSearchResponseDto toLessonSearchResponseDto( lesson.getPrice(), lesson.getMaxParticipants(), lesson.getParticipantCount(), - lesson.getStatus().name(), + lesson.getStatus(), lesson.getStartAt(), lesson.getEndAt(), lesson.getOpenTime(), diff --git a/src/main/java/com/threestar/trainus/domain/lesson/student/service/StudentLessonService.java b/src/main/java/com/threestar/trainus/domain/lesson/student/service/StudentLessonService.java index d0eb886..3ea609b 100644 --- a/src/main/java/com/threestar/trainus/domain/lesson/student/service/StudentLessonService.java +++ b/src/main/java/com/threestar/trainus/domain/lesson/student/service/StudentLessonService.java @@ -58,15 +58,15 @@ public class StudentLessonService { @Transactional public LessonSearchListResponseDto searchLessons( int page, int limit, - String category, String search, + Category category, String search, String city, String district, String dong ) { Pageable pageable = PageRequest.of(page - 1, limit); Category categoryEnum = null; - if (!category.equalsIgnoreCase("ALL")) { + if (!category.name().equalsIgnoreCase("ALL")) { try { - categoryEnum = Category.valueOf(category.toUpperCase()); + categoryEnum = category; } catch (IllegalArgumentException e) { throw new BusinessException(ErrorCode.INVALID_CATEGORY); } @@ -85,7 +85,9 @@ public LessonSearchListResponseDto searchLessons( // 프로필 이미지 Profile profile = profileRepository.findByUserId(leader.getId()) .orElseThrow(() -> new BusinessException(ErrorCode.PROFILE_NOT_FOUND)); - + /* + * TODO: 프로필 공통예외처리 분리 + * */ // 리뷰 개수, 평점 등 메타데이터 ProfileMetadataResponseDto metadata = profileMetadataService.getMetadata(leader.getId()); @@ -113,7 +115,9 @@ public LessonDetailResponseDto getLessonDetail(Long lessonId) { // 유저 프로필 조회 Profile profile = profileRepository.findByUserId(leader.getId()) .orElseThrow(() -> new BusinessException(ErrorCode.PROFILE_NOT_FOUND)); - + /* + * TODO: 프로필 공통 예외처리 분리 + * */ // 프로필 메타데이터 조회 ProfileMetadataResponseDto metadata = profileMetadataService.getMetadata(leader.getId()); diff --git a/src/main/java/com/threestar/trainus/domain/profile/controller/ProfileController.java b/src/main/java/com/threestar/trainus/domain/profile/controller/ProfileController.java index fca1da6..d15a4f5 100644 --- a/src/main/java/com/threestar/trainus/domain/profile/controller/ProfileController.java +++ b/src/main/java/com/threestar/trainus/domain/profile/controller/ProfileController.java @@ -13,11 +13,11 @@ import com.threestar.trainus.domain.profile.dto.ProfileResponseDto; import com.threestar.trainus.domain.profile.dto.ProfileUpdateRequestDto; import com.threestar.trainus.domain.profile.service.ProfileFacadeService; +import com.threestar.trainus.global.annotation.LoginUser; import com.threestar.trainus.global.unit.BaseResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.servlet.http.HttpSession; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -42,9 +42,8 @@ public ResponseEntity> getProfileDetail( @Operation(summary = "유저 프로필 수정 api") public ResponseEntity> updateProfile( @Valid @RequestBody ProfileUpdateRequestDto requestDto, - HttpSession session + @LoginUser Long userId ) { - Long userId = (Long)session.getAttribute("LOGIN_USER"); ProfileResponseDto response = facadeService.updateProfile(userId, requestDto); return BaseResponse.ok("프로필 수정이 완료되었습니다.", response, HttpStatus.OK); } diff --git a/src/main/java/com/threestar/trainus/domain/profile/service/ProfileService.java b/src/main/java/com/threestar/trainus/domain/profile/service/ProfileService.java index e575be4..800fe36 100644 --- a/src/main/java/com/threestar/trainus/domain/profile/service/ProfileService.java +++ b/src/main/java/com/threestar/trainus/domain/profile/service/ProfileService.java @@ -10,7 +10,6 @@ import com.threestar.trainus.domain.profile.repository.ProfileRepository; import com.threestar.trainus.domain.user.entity.User; import com.threestar.trainus.domain.user.repository.UserRepository; -import com.threestar.trainus.domain.user.service.UserService; import com.threestar.trainus.global.exception.domain.ErrorCode; import com.threestar.trainus.global.exception.handler.BusinessException; @@ -34,8 +33,7 @@ public ProfileResponseDto getProfile(Long userId) { User user = userRepository.findById(userId) .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND)); - Profile profile = profileRepository.findByUserId(userId) - .orElseThrow(() -> new BusinessException(ErrorCode.PROFILE_NOT_FOUND)); + Profile profile = findByUserId(userId); return ProfileMapper.toResponseDto(profile, user); } @@ -45,12 +43,16 @@ public ProfileResponseDto updateProfile(Long userId, ProfileUpdateRequestDto req User user = userRepository.findById(userId) .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND)); - Profile profile = profileRepository.findByUserId(userId) - .orElseThrow(() -> new BusinessException(ErrorCode.PROFILE_NOT_FOUND)); + Profile profile = findByUserId(userId); profile.updateProfile(requestDto.profileImage(), requestDto.intro()); return ProfileMapper.toResponseDto(profile, user); } + + public Profile findByUserId(Long userId) { + return profileRepository.findByUserId(userId) + .orElseThrow(() -> new BusinessException(ErrorCode.PROFILE_NOT_FOUND)); + } } diff --git a/src/main/java/com/threestar/trainus/domain/ranking/controller/RankingController.java b/src/main/java/com/threestar/trainus/domain/ranking/controller/RankingController.java index 3579a02..6bc24d4 100644 --- a/src/main/java/com/threestar/trainus/domain/ranking/controller/RankingController.java +++ b/src/main/java/com/threestar/trainus/domain/ranking/controller/RankingController.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.threestar.trainus.domain.lesson.admin.entity.Category; import com.threestar.trainus.domain.ranking.dto.RankingResponseDto; import com.threestar.trainus.domain.ranking.service.RankingService; import com.threestar.trainus.global.unit.BaseResponse; @@ -35,9 +36,9 @@ public ResponseEntity>> getRankings() { @GetMapping("/{category}") @Operation(summary = "특정 카테고리 랭킹 조회 api", description = "지정된 카테고리의 랭킹을 조회") public ResponseEntity>> getRankingsByCategory( - @PathVariable String category + @PathVariable Category category ) { - List rankings = rankingService.getTopRankings(category); + List rankings = rankingService.getTopRankings(category.name()); return BaseResponse.ok(category + "카테고리별 랭킹 조회 성공", rankings, HttpStatus.OK); } diff --git a/src/main/java/com/threestar/trainus/domain/ranking/service/RankingService.java b/src/main/java/com/threestar/trainus/domain/ranking/service/RankingService.java index 58f098a..65ff6ee 100644 --- a/src/main/java/com/threestar/trainus/domain/ranking/service/RankingService.java +++ b/src/main/java/com/threestar/trainus/domain/ranking/service/RankingService.java @@ -112,7 +112,8 @@ public void updateRankings() { //카테고리별 랭킹 업데이트 for (Category category : Category.values()) { List categoryRankings = calculateRankings(category); - String cacheKey = CATEGORY_RANKING_KEY_PREFIX + category.name().toLowerCase() + CATEGORY_RANKING_KEY_SUFFIX; + String cacheKey = + CATEGORY_RANKING_KEY_PREFIX + category.name().toLowerCase() + CATEGORY_RANKING_KEY_SUFFIX; saveToRedis(categoryRankings, cacheKey); categoryCounts.put(category.name(), categoryRankings.size()); } diff --git a/src/main/java/com/threestar/trainus/domain/review/controller/ReviewController.java b/src/main/java/com/threestar/trainus/domain/review/controller/ReviewController.java index 6b335e3..2cd559d 100644 --- a/src/main/java/com/threestar/trainus/domain/review/controller/ReviewController.java +++ b/src/main/java/com/threestar/trainus/domain/review/controller/ReviewController.java @@ -15,11 +15,11 @@ import com.threestar.trainus.domain.review.dto.ReviewCreateResponseDto; import com.threestar.trainus.domain.review.dto.ReviewPageResponseDto; import com.threestar.trainus.domain.review.service.ReviewService; +import com.threestar.trainus.global.annotation.LoginUser; import com.threestar.trainus.global.unit.BaseResponse; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.servlet.http.HttpSession; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -37,8 +37,7 @@ public class ReviewController { @Operation(summary = "리뷰 작성", description = "레슨 ID에 해당되는 리뷰를 작성합니다.") public ResponseEntity> createReview(@PathVariable Long lessonId, @Valid @RequestBody ReviewCreateRequestDto request, - HttpSession session) { - Long userId = (Long)session.getAttribute("LOGIN_USER"); + @LoginUser Long userId) { ReviewCreateResponseDto review = reviewService.createReview(request, lessonId, userId); return BaseResponse.ok("작성이 완료됐습니다.", review, HttpStatus.CREATED); } @@ -54,5 +53,7 @@ public ResponseEntity> readAll(@PathVariable ReviewPageResponseDto reviews = reviewService.readAll(userId, correctPage, correctPageSize); return BaseResponse.ok("조회가 완료됐습니다.", reviews, HttpStatus.OK); } - + /* + * TODO:구조 통일 + * */ } diff --git a/src/main/java/com/threestar/trainus/domain/review/service/ReviewService.java b/src/main/java/com/threestar/trainus/domain/review/service/ReviewService.java index 95c4e65..8c5f64b 100644 --- a/src/main/java/com/threestar/trainus/domain/review/service/ReviewService.java +++ b/src/main/java/com/threestar/trainus/domain/review/service/ReviewService.java @@ -7,7 +7,7 @@ import com.threestar.trainus.domain.lesson.admin.entity.Lesson; import com.threestar.trainus.domain.lesson.admin.repository.LessonParticipantRepository; -import com.threestar.trainus.domain.lesson.admin.repository.LessonRepository; +import com.threestar.trainus.domain.lesson.admin.service.AdminLessonService; import com.threestar.trainus.domain.metadata.service.ProfileMetadataService; import com.threestar.trainus.domain.review.dto.ReviewCreateRequestDto; import com.threestar.trainus.domain.review.dto.ReviewCreateResponseDto; @@ -17,6 +17,7 @@ import com.threestar.trainus.domain.review.repository.ReviewRepository; import com.threestar.trainus.domain.user.entity.User; import com.threestar.trainus.domain.user.repository.UserRepository; +import com.threestar.trainus.domain.user.service.UserService; import com.threestar.trainus.global.exception.domain.ErrorCode; import com.threestar.trainus.global.exception.handler.BusinessException; import com.threestar.trainus.global.utils.PageLimitCalculator; @@ -29,16 +30,16 @@ public class ReviewService { private final ProfileMetadataService profileMetadataService; private final ReviewRepository reviewRepository; - private final LessonRepository lessonRepository; + private final AdminLessonService adminLessonService; private final UserRepository userRepository; private final LessonParticipantRepository lessonParticipantRepository; + private final UserService userService; //참여자 테이블에 있는지도 검증 필요 횟수도 한번으로 제한 @Transactional public ReviewCreateResponseDto createReview(ReviewCreateRequestDto reviewRequestDto, Long lessonId, Long userId) { - Lesson findLesson = lessonRepository.findById(lessonId) - .orElseThrow(() -> new BusinessException(ErrorCode.LESSON_NOT_FOUND)); + Lesson findLesson = adminLessonService.findLessonById(lessonId); LocalDateTime reviewEndDate = findLesson.getEndAt().plusDays(7); @@ -46,10 +47,8 @@ public ReviewCreateResponseDto createReview(ReviewCreateRequestDto reviewRequest throw new BusinessException(ErrorCode.INVALID_REVIEW_DATE); } - User findUser = userRepository.findById(userId) - .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND)); - User lessonLeader = userRepository.findById(findLesson.getLessonLeader()) - .orElseThrow(() -> new BusinessException(ErrorCode.USER_NOT_FOUND)); + User findUser = userService.getUserById(userId); + User lessonLeader = userService.getUserById(findLesson.getLessonLeader()); //참여자 테이블 검증 추후 추가 -> lessonId 와 userId 다 갖고 있는지 if (!lessonParticipantRepository.existsByLessonIdAndUserId(findLesson.getId(), diff --git a/src/main/java/com/threestar/trainus/global/config/security/SecurityConfig.java b/src/main/java/com/threestar/trainus/global/config/security/SecurityConfig.java index 438691f..d55d262 100644 --- a/src/main/java/com/threestar/trainus/global/config/security/SecurityConfig.java +++ b/src/main/java/com/threestar/trainus/global/config/security/SecurityConfig.java @@ -8,8 +8,6 @@ import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; -import com.threestar.trainus.global.security.SessionAuthenticationFilter; - import lombok.RequiredArgsConstructor; @Configuration diff --git a/src/main/java/com/threestar/trainus/global/config/security/SessionAuthenticationFilter.java b/src/main/java/com/threestar/trainus/global/config/security/SessionAuthenticationFilter.java index aac48a5..4dd372d 100644 --- a/src/main/java/com/threestar/trainus/global/config/security/SessionAuthenticationFilter.java +++ b/src/main/java/com/threestar/trainus/global/config/security/SessionAuthenticationFilter.java @@ -1,4 +1,4 @@ -package com.threestar.trainus.global.security; +package com.threestar.trainus.global.config.security; import java.io.IOException; import java.util.Collections; @@ -24,7 +24,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse HttpSession session = request.getSession(false); if (session != null) { - Long userId = (Long) session.getAttribute("LOGIN_USER"); + Long userId = (Long)session.getAttribute("LOGIN_USER"); if (userId != null && SecurityContextHolder.getContext().getAuthentication() == null) { UsernamePasswordAuthenticationToken authToken = diff --git a/src/main/java/com/threestar/trainus/global/dto/PageRequestDto.java b/src/main/java/com/threestar/trainus/global/dto/PageRequestDto.java new file mode 100644 index 0000000..28a715f --- /dev/null +++ b/src/main/java/com/threestar/trainus/global/dto/PageRequestDto.java @@ -0,0 +1,20 @@ +package com.threestar.trainus.global.dto; + +import jakarta.validation.constraints.Max; +import jakarta.validation.constraints.Min; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class PageRequestDto { + + @Min(value = 1, message = "페이지는 1 이상이어야 합니다.") + @Max(value = 1000, message = "페이지는 1000 이하여야 합니다.") + private int page = 1; + + @Min(value = 1, message = "limit는 1 이상이어야 합니다.") + @Max(value = 100, message = "limit는 100 이하여야 합니다.") + private int limit = 5; + +}