Skip to content

Commit

Permalink
Feat: 로직 수정
Browse files Browse the repository at this point in the history
diaryphoto가 추가됨에 따라 쿼리 로직 수정
레포지 쪽 대폭 수정
엔티티 나중에 머지 필요
  • Loading branch information
Mouon authored and nonaninona committed Jan 29, 2024
1 parent 165a095 commit 16c445d
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 64 deletions.
Original file line number Diff line number Diff line change
@@ -1,37 +1,25 @@
package com.kuit.chatdiary.dto.diary;

import com.kuit.chatdiary.domain.*;
import lombok.*;

import com.kuit.chatdiary.domain.Photo;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

@Getter
@Setter
@NoArgsConstructor
public class TagSearchResponseDTO {

private Long diaryId;
private String title;
private String content;
private Date diaryDate;
private List<TagInfoDTO> tagList;
private List<String> photoList;

@Builder
public TagSearchResponseDTO(Diary diary){
this.diaryId = diary.getDiaryId();
this.title = diary.getTitle();
this.diaryDate = diary.getDiaryDate();
this.tagList = diary.getDiaryTagList().stream()
.map(diaryTag -> {
TagInfoDTO TagInfoDTO = new TagInfoDTO();
TagInfoDTO.setTagId(diaryTag.getTag().getTagId());
TagInfoDTO.setTagName(diaryTag.getTag().getTagName());
return TagInfoDTO;
})
.collect(Collectors.toList());
this.photoList = diary.getPhotoList().stream()
.map(Photo::getImageUrl)
.collect(Collectors.toList());
}
}
private LocalDateTime createAt;
private LocalDateTime updateAt;
private String status;
private List<String> tagList;
private List<String> photoUrls;
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.kuit.chatdiary.repository.diary;

import com.kuit.chatdiary.domain.Diary;
import com.kuit.chatdiary.dto.diary.TagSearchResponseDTO;
import jakarta.persistence.EntityManager;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.stream.Collectors;

@Repository
public class TagSearchRepository {
private final EntityManager em;

public TagSearchRepository(EntityManager em) {
this.em = em;
}


/** 지식 한계로 쿼리문 세개를 나눠서.. */
public List<TagSearchResponseDTO> findByTag(List<String> tagName) {
int tagCount = tagName.size();
List<Diary> diaries = em.createQuery(
"SELECT d FROM diary d " +
"JOIN diarytag dt ON d.diaryId = dt.diary.diaryId " +
"JOIN tag t ON dt.tag.tagId = t.tagId " +
"WHERE t.tagName IN :tagNames " +
"GROUP BY d " +
"HAVING COUNT(DISTINCT t) = :tagCount", Diary.class)
.setParameter("tagNames", tagName)
.setParameter("tagCount", (long) tagCount)
.getResultList();

return diaries.stream().map(diary -> {
TagSearchResponseDTO response = new TagSearchResponseDTO();
response.setDiaryId(diary.getDiaryId());
response.setTitle(diary.getTitle());
response.setContent(diary.getContent());
response.setDiaryDate(diary.getDiaryDate());
response.setCreateAt(diary.getCreateAt());
response.setUpdateAt(diary.getUpdateAt());
response.setStatus(diary.getStatus());

List<String> photoUrls = em.createQuery(
"SELECT dp.photo.imageUrl FROM diaryphoto dp WHERE dp.diary.diaryId = :diaryId", String.class)
.setParameter("diaryId", diary.getDiaryId())
.getResultList();
response.setPhotoUrls(photoUrls);

List<String> tagNames = em.createQuery(
"SELECT t.tagName FROM diarytag dt JOIN dt.tag t WHERE dt.diary.diaryId = :diaryId", String.class)
.setParameter("diaryId", diary.getDiaryId())
.getResultList();
response.setTagList(tagNames);

return response;
}).collect(Collectors.toList());
}


}
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.kuit.chatdiary.service.diary;

import com.kuit.chatdiary.dto.diary.TagSearchResponseDTO;
import com.kuit.chatdiary.repository.TagSearchRepository;
import com.kuit.chatdiary.repository.diary.TagSearchRepository;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TagSearchService {

private final TagSearchRepository tagSearchRepository;
public TagSearchService(TagSearchRepository tagSearchRepository) {
this.tagSearchRepository = tagSearchRepository;
Expand All @@ -17,4 +16,4 @@ public List<TagSearchResponseDTO> findByTag(List<String> tagNames){
return tagSearchRepository.findByTag(tagNames);
}

}
}

0 comments on commit 16c445d

Please sign in to comment.