Spring/[P] 눈치우기 봉사활동 매칭 플랫폼

최신 게시글 3개 조회하기

alsruds 2024. 2. 14. 22:19

 

메인 페이지에서 보여줄 최신 게시글 데이터 3개 반환

 

☃️ Controller

@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/volunteers")
public class VolunteerController {
    private final VolunteerService volunteerService;
    
    // 봉사활동 구인글 최신 3개 조회
    @GetMapping("/recent")
    public ResponseEntity<List<VolunteerResponse>> getThreeVolunteers(@RequestParam(value = "userId", required = false, defaultValue = "0") Long userId) {
        List<VolunteerResponse> responses = volunteerService.getThreeVolunteers(userId);
        return ResponseEntity.status(HttpStatus.OK).body(responses);
    }
}

 

· RequestParam 으로 사용자 id 받아 해당 게시글 좋아요 여부 판별하기

 

☃️ Service

@Service
@RequiredArgsConstructor
@Slf4j
@Transactional
public class VolunteerService {
    private final VolunteerRepository volunteerRepository;
    private final ImageService imageService;
    private final LikeService likeService;

    // 봉사활동 구인글 최신 3개 조회
    public List<VolunteerResponse> getThreeVolunteers(Long userId) {
        List<Volunteer> volunteers = volunteerRepository.findFirst3ByOrderByIdDesc();
        List<VolunteerResponse> latestVolunteers = volunteers.stream()
                .map(m -> VolunteerResponse.builder()
                        .userNickname(m.getUser().getNickname())
                        .userImage(m.getUser().getProfileImage())
                        .volunteerId(m.getId())
                        .createdDate(m.getCreatedDate().toLocalDate())
                        .title(m.getTitle())
                        .content(m.getContent())
                        .image(imageService.processImage(m.getImage()))
                        .place(m.getPlace())
                        .likeCount(m.getLikeCount())
                        .userLiked(likeService.checkIfUserLikedVolunteer(userId, m.getId()))
                        .build())
                .collect(Collectors.toList());
        return latestVolunteers;
    }
}

 

· 게시글 데이터 리스트 3개만 받아 반환하기

 

☃️ Repository

public interface VolunteerRepository extends JpaRepository<Volunteer, Long> {
    List<Volunteer> findFirst3ByOrderByIdDesc();
}

 

· JpaRepository 기능을 이용하여 최신순 3개 조회

  → 원래는 생성 날짜로 정렬해야 하지만, 게시글 수정 기능이 없어 저장 순으로 구현

   생성일 기준으로 하려면 : findFirst3ByOrderByCreatedAtDesc   

 

☃️ Dto

@Getter
@Builder
public class VolunteerResponse {
    private Long volunteerId;
    private String userNickname;
    private String userImage;
    private String title;
    private String content;
    private String image;
    private String place;
    private LocalDate createdDate;
    private int likeCount;
    private Boolean userLiked;
    private List<CommentResponse> comments;
}