Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/main/java/umc/codeplay/controller/TaskController.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import umc.codeplay.domain.Task;
import umc.codeplay.dto.MemberRequestDTO;
import umc.codeplay.dto.MemberResponseDTO;
import umc.codeplay.dto.TaskResponseDTO;
import umc.codeplay.repository.MemberRepository;
import umc.codeplay.service.ModelService;
import umc.codeplay.service.MusicService;
import umc.codeplay.service.TaskService;
Expand All @@ -28,6 +30,7 @@ public class TaskController {
private final MusicService musicService;
private final ModelService modelService;
private final TaskService taskService;
private final MemberRepository memberRepository;

@Operation(summary = "화성분석 작업 요청", description = "음악 ID를 받아 화성분석 작업을 요청합니다.")
@PostMapping("/harmony")
Expand Down Expand Up @@ -82,4 +85,17 @@ public ApiResponse<MemberResponseDTO.TaskProgressDTO> waitTask(
Task task = taskService.waitTask(taskId, timeoutMillis);
return ApiResponse.onSuccess(MemberConverter.toTaskProgressDTO(task));
}

@Operation(
summary = "task id로 harmony, track, remix 조회",
description = "task id를 query parameter로 넘기고 그에 맞는 객체를 반환합니다.")
@GetMapping("/search")
public ApiResponse<TaskResponseDTO.GetByTaskIdDTO> getByTaskId(@RequestParam Long taskId) {

System.out.println("테스트중입니다");

TaskResponseDTO.GetByTaskIdDTO responseDTO = taskService.findByTaskId(taskId);

return ApiResponse.onSuccess(responseDTO);
}
}
71 changes: 71 additions & 0 deletions src/main/java/umc/codeplay/converter/TaskConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package umc.codeplay.converter;

import java.util.ArrayList;
import java.util.stream.Collectors;

import org.springframework.stereotype.Component;

import lombok.RequiredArgsConstructor;

import umc.codeplay.domain.Harmony;
import umc.codeplay.domain.Remix;
import umc.codeplay.domain.Track;
import umc.codeplay.dto.TaskResponseDTO;

@Component
@RequiredArgsConstructor
public class TaskConverter {

public TaskResponseDTO.HarmonyDTO toHarmonyDTO(Harmony harmony) {

return TaskResponseDTO.HarmonyDTO.builder()
.harmonyId(harmony.getId())
.musicId(harmony.getMusic().getId())
.musicTitle(harmony.getMusic().getTitle())
.createdAt(harmony.getCreatedAt())
.scale(harmony.getScale())
.genre(harmony.getGenre())
.bpm(harmony.getBpm())
.voiceColor(harmony.getVoiceColor())
.build();
}

public TaskResponseDTO.TrackDTO toTrackDTO(Track track) {

return TaskResponseDTO.TrackDTO.builder()
.trackId(track.getId())
.musicId(track.getMusic().getId())
.musicTitle(track.getMusic().getTitle())
.createdAt(track.getCreatedAt())
.vocalUrl(track.getVocalUrl())
.instrumentalUrl(track.getInstrumentalUrl())
.bassUrl(track.getBassUrl())
.drumsUrl(track.getDrumsUrl())
.build();
}

public TaskResponseDTO.RemixDTO toRemixDTO(Remix remix) {

return TaskResponseDTO.RemixDTO.builder()
.remixId(remix.getId())
.musicId(remix.getMusic().getId())
.musicTitle(remix.getMusic().getTitle())
.createdAt(remix.getCreatedAt())
.scaleModulation(remix.getScaleModulation())
.tempoRatio(remix.getTempoRatio())
.reverbAmount(remix.getReverbAmount())
.isCorusOn(remix.getIsChorusOn())
.resultMusicUrl(remix.getResultMusicUrl())
.parentRemixId(
remix.getParentRemix() != null
? remix.getParentRemix().getId()
: null) // 부모 Remix ID
.childRemixList(
remix.getChildRemixList() != null
? remix.getChildRemixList().stream()
.map(this::toRemixDTO)
.collect(Collectors.toList())
: new ArrayList<>()) // 자식 Remix 리스트
.build();
}
}
3 changes: 3 additions & 0 deletions src/main/java/umc/codeplay/dto/SQSMessageDTO.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ public class SQSMessageDTO {
@AllArgsConstructor
public static class HarmonyMessageDTO {
String key;
Long musicId;
Long taskId;
String jobType;
}
Expand All @@ -24,6 +25,7 @@ public static class HarmonyMessageDTO {
@AllArgsConstructor
public static class TrackMessageDTO {
String key;
Long musicId;
Long taskId;
String jobType;

Expand All @@ -34,6 +36,7 @@ public static class TrackMessageDTO {
@Setter
public static class RemixMessageDTO {
String key;
Long musicId;
Long taskId;
String jobType;

Expand Down
73 changes: 73 additions & 0 deletions src/main/java/umc/codeplay/dto/TaskResponseDTO.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package umc.codeplay.dto;

import java.time.LocalDateTime;
import java.util.List;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

public class TaskResponseDTO {

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class HarmonyDTO {
// 화성분석Id, 음원Id, 음원제목, 생성 날짜, 키, bpm, 평균음압
Long harmonyId;
Long musicId;
String musicTitle;
LocalDateTime createdAt;
String scale;
String genre;
Integer bpm;
String voiceColor;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class TrackDTO {
// 세션 분리 harmonyId, 음원 harmonyId, 음원 제목, 생성일자, 보컬 파일 url, 반주 url, 베이스 파일 url, 드럼 파일 url,
Long trackId;
Long musicId;
String musicTitle;
LocalDateTime createdAt;
String vocalUrl;
String instrumentalUrl;
String bassUrl;
String drumsUrl;
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class RemixDTO {
Long remixId;
Long musicId;
String musicTitle;
LocalDateTime createdAt;
Integer scaleModulation;
Double tempoRatio;
Double reverbAmount;
Boolean isCorusOn;
String resultMusicUrl;
private Long parentRemixId; // 부모 Remix의 ID
private List<RemixDTO> childRemixList; // 자식 Remix 리스트
}

@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
public static class GetByTaskIdDTO {

private List<HarmonyDTO> harmonies;
private List<TrackDTO> tracks;
private List<RemixDTO> remixes;
}
}
5 changes: 4 additions & 1 deletion src/main/java/umc/codeplay/service/ModelService.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ public Task sendTrackMessage(Music music, String config) {
}

switch (config) {
case "vocals", "bass", "drums", "none": // TODO: 6-stems guitar, piano 테스트 후 추가
case "vocals", "bass", "drums", "none", "guitar", "piano":
break;
default:
throw new GeneralException(ErrorStatus.INVALID_CONFIG);
Expand All @@ -86,6 +86,7 @@ public Task sendTrackMessage(Music music, String config) {
queueName,
SQSMessageDTO.TrackMessageDTO.builder()
.key(music.getTitle())
.musicId(music.getId())
.taskId(task.getId())
.jobType(JobType.TRACK.toString())
.twoStemConfig(config)
Expand All @@ -106,6 +107,7 @@ public Task sendHarmonyMessage(Music music) {
queueName,
SQSMessageDTO.HarmonyMessageDTO.builder()
.key(music.getTitle())
.musicId(music.getId())
.taskId(task.getId())
.jobType(JobType.HARMONY.toString())
.build());
Expand Down Expand Up @@ -151,6 +153,7 @@ public Task sendRemixMessage(Music music, MemberRequestDTO.RemixTaskDTO request)
Task task = taskService.addTask(newRemix);

remixPayLoad.setKey(music.getTitle());
remixPayLoad.setMusicId(music.getId());
remixPayLoad.setTaskId(task.getId());
remixPayLoad.setJobType(JobType.REMIX.toString());

Expand Down
46 changes: 46 additions & 0 deletions src/main/java/umc/codeplay/service/TaskService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,20 @@

import java.time.Duration;
import java.time.Instant;
import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;

import lombok.RequiredArgsConstructor;

import umc.codeplay.apiPayLoad.code.status.ErrorStatus;
import umc.codeplay.apiPayLoad.exception.GeneralException;
import umc.codeplay.converter.TaskConverter;
import umc.codeplay.domain.*;
import umc.codeplay.domain.enums.JobType;
import umc.codeplay.domain.enums.ProcessStatus;
import umc.codeplay.dto.TaskResponseDTO;
import umc.codeplay.repository.HarmonyRepository;
import umc.codeplay.repository.RemixRepository;
import umc.codeplay.repository.TaskRepository;
Expand All @@ -25,6 +29,7 @@ public class TaskService {
private final RemixRepository remixRepository;
private final TrackRepository trackRepository;
private final HarmonyRepository harmonyRepository;
private final TaskConverter taskConverter;

public Task findById(Long id) {
return taskRepository
Expand Down Expand Up @@ -99,4 +104,45 @@ public Task waitTask(Long id, long timeoutMillis) {

return findById(id);
}

public TaskResponseDTO.GetByTaskIdDTO findByTaskId(Long taskId) {
// task 객체 찾기
Task task =
taskRepository
.findById(taskId)
.orElseThrow(() -> new RuntimeException("Task를 찾을 수 없습니다."));

List<TaskResponseDTO.HarmonyDTO> harmonyDTOs = new ArrayList<>();
List<TaskResponseDTO.TrackDTO> trackDTOs = new ArrayList<>();
List<TaskResponseDTO.RemixDTO> remixDTOs = new ArrayList<>();

// job_type에 따라 해당 객체 조회 후 DTO 반환
switch (task.getJobType()) {
case HARMONY:
Harmony harmony =
harmonyRepository
.findById(task.getJobId())
.orElseThrow(() -> new RuntimeException("Harmony를 찾을 수 없습니다."));

harmonyDTOs.add(taskConverter.toHarmonyDTO(harmony));
break;
case TRACK:
Track track =
trackRepository
.findById(task.getJobId())
.orElseThrow(() -> new RuntimeException("Track을 찾을 수 없습니다."));
trackDTOs.add(taskConverter.toTrackDTO(track));
break;
case REMIX:
Remix remix =
remixRepository
.findById(task.getJobId())
.orElseThrow(() -> new RuntimeException("Remix를 찾을 수 없습니다."));
remixDTOs.add(taskConverter.toRemixDTO(remix));
break;
}

// DTO를 하나의 객체로 묶어서 반환
return new TaskResponseDTO.GetByTaskIdDTO(harmonyDTOs, trackDTOs, remixDTOs);
}
}
Loading