diff --git a/src/main/java/com/example/letscareer/career/controller/CareerController.java b/src/main/java/com/example/letscareer/career/controller/CareerController.java index 2605ab0..22f370c 100644 --- a/src/main/java/com/example/letscareer/career/controller/CareerController.java +++ b/src/main/java/com/example/letscareer/career/controller/CareerController.java @@ -43,4 +43,15 @@ public ApiResponse getCareerDetail(@RequestHeader("userId") Long userId, return ErrorResponse.error(e.getErrorCode()); } } + + @GetMapping + public ApiResponse getCareers(@RequestHeader("userId") Long userId, + @RequestParam(value = "page", defaultValue = "1") int page, + @RequestParam(value = "size", defaultValue = "15") int size) { + try { + return SuccessResponse.success(SuccessCode.GET_CAREER_DETAIL_SUCCESS, careerService.getCareers(userId, page, size)); + } catch (NotFoundException | BadRequestException e) { + return ErrorResponse.error(e.getErrorCode()); + } + } } diff --git a/src/main/java/com/example/letscareer/career/dto/CareerDTO.java b/src/main/java/com/example/letscareer/career/dto/CareerDTO.java new file mode 100644 index 0000000..0dd6553 --- /dev/null +++ b/src/main/java/com/example/letscareer/career/dto/CareerDTO.java @@ -0,0 +1,13 @@ +package com.example.letscareer.career.dto; + +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; + +public record CareerDTO( + Long careerId, + @Enumerated(EnumType.STRING) + String category, + String title, + String summary +) { +} diff --git a/src/main/java/com/example/letscareer/career/dto/response/GetCareersResponse.java b/src/main/java/com/example/letscareer/career/dto/response/GetCareersResponse.java new file mode 100644 index 0000000..3fb6426 --- /dev/null +++ b/src/main/java/com/example/letscareer/career/dto/response/GetCareersResponse.java @@ -0,0 +1,12 @@ +package com.example.letscareer.career.dto.response; + +import com.example.letscareer.career.dto.CareerDTO; + +import java.util.List; + +public record GetCareersResponse( + int currentPage, + int totalPages, + List careers +) { +} diff --git a/src/main/java/com/example/letscareer/career/repository/CareerRepository.java b/src/main/java/com/example/letscareer/career/repository/CareerRepository.java index c2f1fea..3925b75 100644 --- a/src/main/java/com/example/letscareer/career/repository/CareerRepository.java +++ b/src/main/java/com/example/letscareer/career/repository/CareerRepository.java @@ -2,6 +2,8 @@ import com.example.letscareer.career.domain.Career; import com.example.letscareer.user.domain.User; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -10,4 +12,6 @@ @Repository public interface CareerRepository extends JpaRepository { public Optional findByCareerIdAndUser(Long careerId, User user); + + public Page findByUser(User user, Pageable pageable); } diff --git a/src/main/java/com/example/letscareer/career/service/CareerService.java b/src/main/java/com/example/letscareer/career/service/CareerService.java index 9a919d1..356e20a 100644 --- a/src/main/java/com/example/letscareer/career/service/CareerService.java +++ b/src/main/java/com/example/letscareer/career/service/CareerService.java @@ -1,8 +1,10 @@ package com.example.letscareer.career.service; import com.example.letscareer.career.domain.Career; +import com.example.letscareer.career.dto.CareerDTO; import com.example.letscareer.career.dto.request.SaveCareerRequest; import com.example.letscareer.career.dto.response.GetCareerDetailResponse; +import com.example.letscareer.career.dto.response.GetCareersResponse; import com.example.letscareer.career.repository.CareerRepository; import com.example.letscareer.common.exception.enums.ErrorCode; import com.example.letscareer.common.exception.model.BadRequestException; @@ -12,8 +14,14 @@ import com.example.letscareer.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.stream.Collectors; + @Service @RequiredArgsConstructor public class CareerService { @@ -65,4 +73,31 @@ public GetCareerDetailResponse getCareerDetail(Long userId, Long careerId) { career.getResult() ); } + + public GetCareersResponse getCareers(Long userId, int page, int size) { + User user = userRepository.findByUserId(userId) + .orElseThrow(() -> new NotFoundException(ErrorCode.USER_NOT_FOUND_EXCEPTION)); + + Pageable pageable = PageRequest.of(page - 1, size); + + Page careers = careerRepository.findByUser(user, pageable); + List careerDTOS = careers.getContent().stream() + .map(career -> new CareerDTO( + career.getCareerId(), + career.getCategory().getValue(), + career.getTitle(), + toSummary(career.getSituation()) + )) + .collect(Collectors.toList()); + + return new GetCareersResponse( + careers.getNumber() + 1, + careers.getTotalPages(), + careerDTOS + ); + } + + private String toSummary(String content) { + return content.length() > 25 ? content.substring(0, 25) + "..." : content; + } }