[프로젝트] 웹 TripRecorder - day12

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

오류 및 문제점

1. Can't get input stream from URL

  • 문제점: 코드를 통해 직접 접근하였기 때문에 요청에 대하여 응답할 수 없다.
  • 해결 방안: 이전 페이지에 대한 정보를 저장한다.
String img = imageObj.get("imageKey").toString();
URL urlInput = new URL(AwsUtil.getImageURL(img));
HttpURLConnection connection = (HttpURLConnection) urlInput.openConnection();
connection.setRequestProperty("Referer", img);
BufferedImage urlImage = ImageIO.read(connection.getInputStream());

2. 403 for aws s3

  • 문제점: 이미지 주소를 전달받아 AWS S3에 접근하니 403 에러가 발생한다.
  • 해결 방안: AWS에 저장될 때는 한글이 인코딩된다. 따라서 front에서 이미지 key를 전달 받은 후 직접 이미지 주소를 불러오는 방법으로 수정한다.

진행 상황

1. 게시글 내 경비 정보

@PostMapping("/sns/{expNo}")
public JSONObject postExpWithSns(@PathVariable Long expNo) {
   	ExpVO tmpExp = erepo.findById(expNo).orElse(null);
    	
   	JSONObject exp = new JSONObject();
   	exp.put("expTitle", tmpExp.getExpTitle());
   	exp.put("expPlace", tmpExp.getExpPlace());
   	exp.put("expMoney", tmpExp.getExpMoney());
    	
   	return exp;
}

2. 닉네임 검색

  • 검색어가 포함되는 닉네임의 사용자 리스트 조회
@PostMapping("/nickname")
public List<UserSimpleDto> postSearchNickname(@RequestBody JSONObject obj) {
	List<UserVO> tmpUserList = urepo.findByUserNickContaining(obj.get("nickname").toString());
	List<UserSimpleDto> userList = new ArrayList<>();
		
	tmpUserList.forEach(user -> {
		UserSimpleDto u = UserSimpleDto.builder()
				.userNo(user.getUserNo())
				.userNick(user.getUserNick())
				.userProfile(AwsUtil.getImageURL(user.getProfile().getProfilePhoto()))
				.build();
			
		userList.add(u);
	});
		
	return userList;
}

3. SnsDto util 생성

  • 게시글 이미지 링크 가져오기
  • 작성자 정보 가져오기
  • 댓글 가져오기
  • 좋아요 여부 가져오기
  • 해시태그 가져오기
public class MakeSnsUtil {
	// 게시글 이미지 주소로 가져오기: JPA를 리스트가 아닌 String으로 설정했기 때문에 구분자로 구분한 문자열을 만들었다.
	public static String getSnsImages(String snsPhoto) {
		String photo = "";
		String[] images = snsPhoto.split("@");
		for (int i = 0; i < images.length; i++) {
			photo += AwsUtil.getImageURL(images[i]);
			if (i != images.length - 1) {
				photo += "@";
			}
		}

		return photo;
	}

	// 작성자 가져오기
	public static UserSimpleDto getAnyUser(Long userNo, UserRepository urepo) {
		UserVO tmpUser = urepo.findById(userNo).orElse(null);

		UserSimpleDto user = UserSimpleDto.builder().userNo(tmpUser.getUserNo()).userNick(tmpUser.getUserNick())
				.userProfile(AwsUtil.getImageURL(tmpUser.getProfile().getProfilePhoto())).build();
		return user;
	}

	// 게시글 댓글 가져오기
	public static List<ReplyDto> getSnsReply(SnsVO sns, ReplyRepository rrepo, UserRepository urepo) {
		List<ReplyVO> tmpReplyList = rrepo.findBySns(sns);

		List<ReplyDto> replyList = new ArrayList<>();
		tmpReplyList.forEach(tmpReply -> {
			ReplyDto reply = ReplyDto.builder().snsNo(sns.getSnsNo()).replyNo(tmpReply.getReplyNo())
					.replyContent(tmpReply.getReplyContent()).replyRegdate(tmpReply.getReplyRegdate())
					.replyUser(getAnyUser(tmpReply.getUser().getUserNo(), urepo)).build();
			replyList.add(reply);
		});

		return replyList;
	}

	// 게시글 좋아요 여부 가져오기
	public static boolean getSnsHeart(SnsVO sns, Long userNo, HeartRepository hrepo) {
		MultiKey key = MultiKey.builder().sns(sns.getSnsNo()).user(userNo).build();
		return hrepo.findById(key).orElse(null) != null;
	}

	// 게시글 해시태그 가져오기
	public static String getSnsHashtag(SnsVO sns, HashtagRepository tagrepo) {
		List<HashtagVO> tagList = tagrepo.findBySns(sns);
		String tag = "";

		for (int i = 0; i < tagList.size(); i++) {
			HashtagVO tmpTag = tagList.get(i);
			tag += "#" + tmpTag.getHtHashtag();
			if (i != tagList.size() - 1) {
				tag += "@";
			}
		}

		return tag;
	}
}

4. 해시태그 검색

  • 로그인 전 완료: 검색어와 일치하는 해시태그를 가진 전체 공개 게시글
List<SnsVO> tmpSnsList = null;
		
if(obj != null) {
	// 로그인 후
} else {
	// 로그인 전
	tmpSnsList = srepo.findByHashtagInAndSnsScope(tagList, 1);
}

참고 자료

profile
어쩌다 풀스택 :3

0개의 댓글