Skip to content

Commit

Permalink
✨ Feature: 음악 생성 모델 연동 및 audioUrl 필드 추가 (#112)
Browse files Browse the repository at this point in the history
  • Loading branch information
ahnsugyeong authored Jun 8, 2024
1 parent 509a90e commit b326e64
Show file tree
Hide file tree
Showing 9 changed files with 65 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@
import zzangdol.emotion.dao.EmotionRepository;
import zzangdol.emotion.dao.querydsl.EmotionQueryRepository;
import zzangdol.emotion.domain.Emotion;
import zzangdol.feign.model.client.Text2ImageModelClient;
import zzangdol.feign.model.client.TextEmotionAnalysisModelClient;
import zzangdol.feign.model.dto.AudioResponse;
import zzangdol.feign.model.dto.ContentRequest;
import zzangdol.feign.model.dto.EmotionResponse;
import zzangdol.scrap.implement.ScrapQueryService;
Expand All @@ -36,21 +38,32 @@ public class DiaryFacade {
private final EmotionQueryRepository emotionQueryRepository; // TODO 구현 후 제거
private final EmotionRepository emotionRepository;
private final TextEmotionAnalysisModelClient textEmotionAnalysisModelClient;
// private final Text2ImageModelClient text2ImageModelClient;
private final Text2ImageModelClient text2ImageModelClient;
private final ImageColorAnalyzer imageColorAnalyzer;

public Long createDiary(User user, DiaryCreateRequest request) {
EmotionResponse emotionResponse = textEmotionAnalysisModelClient.analyzeEmotion(buildContentRequest(request));
List<String> emotionList = emotionResponse.getResult();
List<Emotion> emotions = emotionList.stream()
.map(emotionRepository::findByName)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
List<Emotion> emotions;
try {
EmotionResponse emotionResponse = textEmotionAnalysisModelClient.analyzeEmotion(buildContentRequest(request));
List<String> emotionList = emotionResponse.getResult();
emotions = emotionList.stream()
.map(emotionRepository::findByName)
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
} catch (Exception e) {
emotions = emotionQueryRepository.findRandomEmotions(3);
}

// List<Emotion> emotions = emotionQueryRepository.findRandomEmotions(3);
String audioUrl;
try {
AudioResponse audioResponse = text2ImageModelClient.generateAudios(buildContentRequest(request));
audioUrl = audioResponse.getResult();
} catch (Exception e) {
audioUrl = "https://moodoodle-diary-image.s3.ap-northeast-2.amazonaws.com/happyday_0.wav";
}
String color = imageColorAnalyzer.analyzeAverageColorAsHex(request.getImageUrl());
return diaryCommandService.createDiary(user, request, color, emotions).getId();
return diaryCommandService.createDiary(user, request, color, emotions, audioUrl).getId();
}

private ContentRequest buildContentRequest(DiaryCreateRequest request) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ public static DiaryResponse toDiaryResponse(Diary diary, boolean isScrapped) {
.date(diary.getDate())
.content(diary.getContent())
.imageUrl(diary.getPainting().getImageUrl())
.audioUrl(diary.getAudioUrl())
.color(diary.getPainting().getColor())
.dayOfWeek(diary.getDate().getDayOfWeek())
.isScrapped(isScrapped)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

public interface DiaryCommandService {

Diary createDiary(User user, DiaryCreateRequest request, String color, List<Emotion> emotions);
Diary createDiary(User user, DiaryCreateRequest request, String color, List<Emotion> emotions, String audioUrl);

Diary updateDiary(User user, Long diaryId, DiaryUpdateRequest request);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ public class DiaryCommandServiceImpl implements DiaryCommandService {

@Override
public Diary createDiary(User user, DiaryCreateRequest request, String color,
List<Emotion> emotions) {
List<Emotion> emotions, String audioUrl) {
validateDiaryDate(request.getDate());
checkDiaryDuplication(user, request.getDate());
Painting painting = buildPainting(request, color);
Diary diary = buildDiary(user, request, painting);
Diary diary = buildDiary(user, request, painting, audioUrl);
diary = diaryRepository.save(diary);
addEmotionsToDiary(diary, emotions);
return diaryRepository.save(diary);
Expand All @@ -51,12 +51,13 @@ private void checkDiaryDuplication(User user, LocalDate date) {
}
}

private Diary buildDiary(User user, DiaryCreateRequest request, Painting painting) {
private Diary buildDiary(User user, DiaryCreateRequest request, Painting painting, String audioUrl) {
return Diary.builder()
.date(request.getDate())
.content(request.getContent())
.user(user)
.painting(painting)
.audioUrl(audioUrl)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public class DiaryResponse {
private LocalDate date;
private String content;
private String imageUrl;
private String audioUrl;
private String color;
private DayOfWeek dayOfWeek;
private Boolean isScrapped;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ public class Diary extends BaseTimeEntity {
@Embedded
private Painting painting;

private String audioUrl;


@OneToMany(mappedBy = "diary", cascade = CascadeType.ALL, orphanRemoval = true)
private List<DiaryEmotion> diaryEmotions = new ArrayList<>();
Expand All @@ -48,11 +50,12 @@ public class Diary extends BaseTimeEntity {
private List<Scrap> scraps = new ArrayList<>();

@Builder
public Diary(LocalDate date, String content, User user, Painting painting) {
public Diary(LocalDate date, String content, User user, Painting painting, String audioUrl) {
this.date = date;
this.content = content;
this.user = user;
this.painting = painting;
this.audioUrl = audioUrl;
}

public void updateDate(LocalDate date) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,19 @@
package zzangdol.feign.model.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import zzangdol.feign.model.dto.AudioResponse;
import zzangdol.feign.model.dto.ContentRequest;
import zzangdol.feign.model.dto.ImageResponse;

@FeignClient(name = "text2ImageModelClient", url = "${outer-api.text-2-image.url}")
public interface Text2ImageModelClient {

@PostMapping("/image")
ImageResponse generateImages(@RequestBody ContentRequest request);

@PostMapping("/audio")
AudioResponse generateAudios(@RequestBody ContentRequest request);

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
@NoArgsConstructor
@AllArgsConstructor
@Data
public class MessageDto {
public class AudioResponse {

private String message;
private String status;
private String result;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package zzangdol.feign.model.dto;

import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class ImageResponse {

private String status;
private List<String> result;

}

0 comments on commit b326e64

Please sign in to comment.