오류 및 문제점
1. Key must not be blank or empty.
- 문제점: 여행 카테고리 썸네일을 가져올 때 AWS S3 사진의 key는 null이 될 수 없다.
- 해결 방안: 빈 문자열을 선언한 후 이미지가 있는 경우 AWS에 접근한다.
String firstImg = "";
if(tmpTripList.size() != 0) {
SnsVO sns = tmpTripList.get(0);
String imgKey = sns.getSnsPhoto().split("@")[0];
firstImg = AwsUtil.getImageURL(firstImg);
}
obj.put("thumbnail", firstImg);
진행 상황
1. 팔로우 및 언팔로우
@PostMapping("/register/{userNo}")
public boolean postRegisterFollow(HttpServletRequest request, @PathVariable Long userNo) {
Long followerNo = EncodingUtil.getUserNo(request);
boolean result = true;
UserVO follower = urepo.findById(followerNo).orElse(null);
UserVO following = urepo.findById(userNo).orElse(null);
FollowVO follow = frepo.findByFollowerAndFollowing(follower, following);
if(follow == null) {
FollowVO f = FollowVO.builder()
.follower(follower)
.following(following)
.build();
frepo.save(f);
} else {
frepo.delete(follow);
result = false;
}
return result;
}
2. 게시글 로그인 전/후 조회
- 로그인 전: 전체 공개 게시글
- 로그인 후: 본인 + 팔로우 게시글
String obj = request.getHeader("Authorization");
List<SnsVO> tmpSnsList = new ArrayList<>();
if(obj != null) {
Long userNo = EncodingUtil.getUserNo(request);
UserVO user = urepo.findById(userNo).orElse(null);
List<FollowVO> following = frepo.findByFollower(user);
List<TripVO> myTrip = trepo.findByUser(user);
List<TripVO> followingTrip = new ArrayList<>();
following.forEach(f -> {
trepo.findByUser(f.getFollowing()).forEach(t -> followingTrip.add(t));
});
tmpSnsList = srepo.findBySnsInAndSnsScopeInOrSnsInOrderBySnsNoDesc(followingTrip, new Integer[] {0, 1}, myTrip);
} else {
tmpSnsList = srepo.findBySnsScopeOrderBySnsNoDesc(1);
}
3. 여행 카테고리 조회 (썸네일)
@GetMapping("/list/{userNo}")
public List<JSONObject> getTripList(@PathVariable Long userNo) {
List<JSONObject> tripList = new ArrayList<>();
UserVO user = urepo.findById(userNo).orElse(null);
trepo.findByUser(user, Sort.by(Direction.DESC, "tripNo")).forEach(trip -> {
JSONObject obj = new JSONObject();
obj.put("tripNo", trip.getTripNo());
obj.put("tripName", trip.getTripName());
List<SnsVO> tmpTripList = srepo.findBySnsOrderBySnsNoDesc(trip);
String firstImg = "sns/default_thumbnail.png";
if(tmpTripList.size() != 0) {
SnsVO sns = tmpTripList.get(0);
String imgKey = sns.getSnsPhoto().split("@")[0];
firstImg = AwsUtil.getImageURL(imgKey);
} else {
firstImg = AwsUtil.getImageURL(firstImg);
}
obj.put("thumbnail", firstImg);
tripList.add(obj);
});
return tripList;
}
4. 게시글 조회 (썸네일)
@GetMapping("/{tripNo}/list")
public List<JSONObject> getTripSnsList(@PathVariable Long tripNo) {
List<JSONObject> snsList = new ArrayList<>();
TripVO trip = trepo.findById(tripNo).orElse(null);
srepo.findBySnsOrderBySnsNoDesc(trip).forEach(sns -> {
Integer heartCnt = hrepo.findBySns(sns).size();
Integer replyCnt = rrepo.findBySns(sns).size();
JSONObject obj = new JSONObject();
obj.put("snsNo", sns.getSnsNo());
obj.put("heartCnt", heartCnt);
obj.put("replyCnt", replyCnt);
String imgKey = sns.getSnsPhoto().split("@")[0];
obj.put("thumbnail", AwsUtil.getImageURL(imgKey));
snsList.add(obj);
});
return snsList;
}
5. 사용자 프로필 정보
- 프로필 사진, 닉네임, 프로필 메시지
- 팔로워 수, 팔로잉 수
@GetMapping("/{userNo}")
public ProfileDto getUserProfile(HttpServletRequest request, @PathVariable Long userNo) {
String obj = request.getHeader("Authorization");
UserVO user = urepo.findById(userNo).orElse(null);
Integer following = frepo.findByFollower(user).size();
Integer follower = frepo.findByFollowing(user).size();
Integer isFollowing = -1;
if(obj != null) {
Long loginNo = EncodingUtil.getUserNo(request);
if(userNo == loginNo) isFollowing = 0;
else if (frepo.findByFollowing(user).size() != 0) isFollowing = 1;
}
ProfileDto profile = ProfileDto.builder()
.userNo(user.getUserNo())
.userNick(user.getUserNick())
.profilePhoto(AwsUtil.getImageURL(user.getProfile().getProfilePhoto()))
.profileMsg(user.getProfile().getProfileMsg())
.userLevel(user.getUserLevel())
.follower(follower)
.following(following)
.isFollowing(isFollowing)
.build();
return profile;
}
참고 자료