메인 페이지에서 보여줄 최신 게시글 데이터 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;
}
'Spring > [P] 눈치우기 봉사활동 매칭 플랫폼' 카테고리의 다른 글
게시글 댓글 작성하기 (대댓글X) (0) | 2024.02.16 |
---|---|
게시글 작성하기 (0) | 2024.02.15 |
게시글 상세 조회하기 (0) | 2024.02.13 |
게시글 전체 조회하기 (0) | 2024.02.12 |
[Git/Github] Issue - Branch - PR 만들기 (0) | 2024.01.22 |