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

게시글 전체 조회하기

alsruds 2024. 2. 12. 20:35

 

게시글 목록 페이지에 필요한 게시글 데이터 리스트 반환

 

☃️ Controller

@RestController
@RequiredArgsConstructor
@Slf4j
@RequestMapping("/volunteers")
public class VolunteerController {
    private final VolunteerService volunteerService;

    // 봉사활동 구인글 전체 조회
    @GetMapping()
    public ResponseEntity<List<VolunteerResponse>> getAllVolunteers(@RequestParam(value = "userId", required = false, defaultValue = "0") Long userId) {
        List<VolunteerResponse> responses = volunteerService.getAllVolunteers(userId);
        return ResponseEntity.status(HttpStatus.OK).body(responses);
    }
}

 

· RequestParam 으로 userId 받아서 해당 사용자 정보 조회하기

 

☃️ Service

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

    // 봉사활동 구인글 전체 조회
    public List<VolunteerResponse> getAllVolunteers(Long userId) {
        List<Volunteer> volunteers = volunteerRepository.findAll();
        return 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());
    }
}

 

· 반환할 데이터를 담은 DTO build 하기

 

☃️ Repository

public interface VolunteerRepository extends JpaRepository<Volunteer, Long> {}

 

💡 JpaRespository 를 상속받으면 @Repository 어노테이션을 생략해도 된다!

 

☃️ 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;
}

 

· comments 는 상세 조회 시 반환할 댓글 리스트