[프로젝트] 웹 TripRecorder - 주말2

_bean_·2023년 6월 19일
0
post-thumbnail

오류 및 문제점

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

참고 자료

profile
어쩌다 풀스택 :3

0개의 댓글