[개발] 해시태그

이진규·2023년 1월 12일
1

시작

해시태그 기능을 구현한 것을 작성

해시태그 구현

  • HashtagService
	private final HashtagRepository hashtagRepository;
	private final KeywordService keywordService;

	// 게시판 정보와 키워드 들을 입력받아 관련 내용 저장 또는 수정
	public void applyHashtag(Post post, String keywordContentsStr) {

		// 기존 해시태그 정보 가져오기
		List<Hashtag> oldHashtagList = getHashtags(post);

		// 입력받은 키워드 문자열 정리('#' 구별 -> 공백 제거 -> 빈 문자열 제거 -> 리스트 변환)
		List<String> keywordContents = Arrays.stream(keywordContentsStr.split("#"))
			.map(String::trim)
			.filter(s -> s.length() > 0)
			.collect(Collectors.toList());

		// 삭제할 키워드 정보를 저장하는 리스트 생성
		List<Hashtag> needToDelete = new ArrayList<>();

		// 새롭게 추가된 키워드 들을 차례대로 저장하는 saveHashtag() 호출
		keywordContents.forEach(keywordContent -> {
			setHashtag(post, keywordContent);
		});

		// 삭제할 키워드 정보들을 삭제
		needToDelete.forEach(hashtag -> {
			hashtagRepository.delete(hashtag);
		});
	}

	// 키워드 저장 후 해시태그 내에 게시판ID와 키워드ID정보가 있다면 바로 리턴, 내용이 없다면 게시판ID와 키워드ID 저장
	private Hashtag setHashtag(Post post, String keywordContent) {

		// 키워드 저장
		Keyword keyword = keywordService.setKeyword(keywordContent);

		// 해시태그 내에 게시판ID와 키워드ID가 존재 한다면 바로 리턴
		Optional<Hashtag> optHashtag = hashtagRepository.findByPostIdAndKeywordId(post.getId(), keyword.getId());

		if (optHashtag.isPresent()) {
			return optHashtag.get();
		}

		// 해시태그 내에 게시판ID와 키워드ID가 존재하지 않으면 관련 내용 저장 후 리턴
		Hashtag hashtag = Hashtag.builder()
			.post(post)
			.keyword(keyword)
			.build();

		hashtagRepository.save(hashtag);

		return hashtag;
	}

	// 해시태그 정보를 불러오기
	public List<Hashtag> getHashtags(Post post) {

		return hashtagRepository.findAllByPostId(post.getId());
	}
  • KeywordtService
	private final KeywordRepository keywordRepository;

	// 키워드를 저장하는데 이미 키워드 목록에 있다면 바로 리턴하고, 키워드 목록에 없다면 저장 후 리턴
	public Keyword setKeyword(String keywordContent) {

		// 이미 있는 키워드는 중복 X, 바로 리턴
		Optional<Keyword> optKeyword = keywordRepository.findByContent(keywordContent);
		if (optKeyword.isPresent()) {
			return optKeyword.get();
		}

		// 키워드가 없다면 키워드 저장 후 리턴
		Keyword keyword = Keyword.builder()
			.content(keywordContent)
			.build();

		keywordRepository.save(keyword);

		return keyword;
	}
profile
항상 궁금해하고 공부하고 기록하자.

0개의 댓글