Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 격파르타후기
- 프로그래머스
- java기본자료형
- 프로그래머스제일작은수
- java알고리즘문제풀이
- 노베이스부트캠프
- 격파르타합격후기
- 코딩부트캠프후기
- 컴파일
- java최솟값구하기
- 비전공자sqld
- 격파르타장점
- java map 저장
- java list 저장
- javaJVM
- 항해15기
- java map 출력
- java set 출력
- 인터프린터언어
- java참조자료형
- java알고리즘
- java set 저장
- java 자료구조 활용
- sqld자격증합격
- javaJRE
- java list 출력
- 작은수제거하기
- java map
- 격파르타비전공자
- 항해99후기
Archives
- Today
- Total
코딩과 결혼합니다
230810 - 태그를 누르면 해당 태그의 post가 조회되도록 하기 본문
728x90
와이어 프레임
이전에 인기 순위 태그를 불러왔다면 이번에는 그 태그를 클릭하였을 때 해당하는 게시물을 '프론트가 원하는 개수만큼' 조회할 수 있게 할 것이다. 프론트에서 'limit : n' 과 같은 요청을 서버로 보내면 나는 그 n개의 포스트를 response 해주면 된다.
인기 순위 위치태그별 post조회 (limit)
//TagController
@GetMapping("/locationTagName")
public List<LocationPostResponseDto> locationPostResponseDtos(
@RequestParam int limit,
@RequestParam String locationTagName
){
return tagService.locationPostResponseDtos(limit, locationTagName);
}
프론트에서 원하는 post의 개수 limit, 그리고 locationTagNaem을 받아와서 service 단으로 넘긴다.
//TagService
//인기 순위 태그별 post 조회
public List<LocationPostResponseDto> locationPostResponseDtos(int limit, String locationTagName) {
List<LocationPostResponseDto> locationPostResponseDtos = new ArrayList<>();
LocationTag locationTag = locationTagRepository.findByLocationTag(locationTagName).
orElseThrow(()-> new IllegalArgumentException("존재하지 않는 태그 입니다."));
List<Post> postList = postRepository.findAllByLocationTag(Sort.by("createdAt").descending(), locationTag);
for (int i = 0; i < postList.size(); i++) {
if (i >= limit) {
break;
}
locationPostResponseDtos.add(new LocationPostResponseDto(postList.get(i)));
}
return locationPostResponseDtos;
}
List<LocationPostResponseDto> locationPostResponseDtos = new ArrayList<>();
위치 태그별 포스트들을 담을 List를 생성해 준다.
위치 태그별 포스트들을 담을 List를 생성해 준다.
//LocationPostResponseDto
@Getter
public class LocationPostResponseDto {
private String locationTag;
private String nickname;
private String content;
// private String userImg;
public LocationPostResponseDto(Post post){
this.locationTag = post.getLocationTag().getLocationTag();
this.nickname = post.getUser().getNickname();
this.content = post.getContent();
// this.userImg = post.getUser().
}
}
LocationPostResponseDto 는 로케이션태그, 닉네임, 컨텐트(게시물 내용), 사용자이미지 등의 필드를 가지고 있다. 아직
User쪽과 Post의 연관관계가 제대로 되지 않았기 때문에 일단 userImg 부분은 주석처리 해주었다.
User쪽과 Post의 연관관계가 제대로 되지 않았기 때문에 일단 userImg 부분은 주석처리 해주었다.
LocationTag locationTag = locationTagRepository.findByLocationTag(locationTagName).
orElseThrow(()-> new IllegalArgumentException("존재하지 않는 태그 입니다."));
List<Post> postList = postRepository.findAllByLocationTag(Sort.by("createdAt").descending(), locationTag);
다시 service로 넘어와서 LocationTag 형식의 객체를 만들어 locationTagRepository에서 클라이언트에서 받아온 locationTagName과 같은 Tag를 찾아서 넣어준다. 없다면 에러메시지를 반환한다.
다음 postRepository 에서 locationTag 태그가 있는 post들을 모두 찾아내 최신순으로 보여주기 위해 정렬한다. 다음 postList에 담아준다.
//LocationTag
@Entity
@Getter
@NoArgsConstructor
public class LocationTag {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "l_tag_id")
private Long id;
@Column(nullable = true)
private String locationTag;
public LocationTag(String locationTagName) {
this.locationTag = locationTagName;
}
}
for (int i = 0; i < postList.size(); i++) {
if (i >= limit) {
break;
}
locationPostResponseDtos.add(new LocationPostResponseDto(postList.get(i)));
}
return locationPostResponseDtos;
}
postList를 프론트에서 원하는 개수대로 보내줘야 해서 limit을 건다. 그리고 locationPostResponseDto로 반환해주어야 하므로 locationPostResponseDtos.add(new LocationPostResponseDto(postList.get(i)));
이렇게 인기 순위 위치태그별 post조회도 끝!
'코딩과 매일매일♥ > Seoulvival' 카테고리의 다른 글
230817 - 기상청 날씨 API 받아오기 (0) | 2023.08.17 |
---|---|
230815 - 코드 리팩토링 멋진 3중 for문을 하나의 for문으로 (2) | 2023.08.15 |
230809 - 저장된 태그들로 인기 순위 태그 조회하기 (0) | 2023.08.10 |
230806 - DB 정규화 하기 (0) | 2023.08.06 |
230804 - SpringBoot 에서 JPA 환경설정 / 기술 스택 선정 이유 (0) | 2023.08.04 |