【代码评审】AI:音乐接入

This commit is contained in:
YunaiV
2024-06-23 12:37:28 +08:00
parent 69b05a30bd
commit 75a91a2c46
10 changed files with 26 additions and 19 deletions

View File

@@ -16,12 +16,13 @@ import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@Tag(name = "管理后台 - AI 音乐生成")
@Tag(name = "管理后台 - AI 音乐")
@RestController
@RequestMapping("/ai/music")
@RequiredArgsConstructor
@RequiredArgsConstructor // TODO @xin通过 @Resource 注入哈
public class AiMusicController {
// TODO @xin变量不用有 ai 前缀
private final AiMusicService aiMusicService;
@PostMapping("/generate")

View File

@@ -6,7 +6,7 @@ import lombok.Data;
import java.util.List;
// TODO @xin1ai 前缀2AiSunoGenerateReqVO要有生成哈。3swaggger 缺少的属性,也最好加下,类似 example类上的 swagger 等
/**
* @author xiaoxin
*/
@@ -19,7 +19,8 @@ public class SunoReqVO {
@Schema(description = "是否纯音乐")
private Boolean makeInstrumental;
@Schema(description = "模型版本 ")
// TODO @xin我们自己是不是用 modelVersion还是什么梗精准减少非必要的缩写
@Schema(description = "模型版本")
private String mv;
@Schema(description = "音乐风格")

View File

@@ -12,6 +12,7 @@ import lombok.Data;
import java.util.List;
// TODO @xin注释完善下
/**
* @Author xiaoxin
* @Date 2024/6/5
@@ -94,7 +95,6 @@ public class AiMusicDO extends BaseDO {
*/
private String errorMessage;
/**
* 音乐风格标签
*/
@@ -106,7 +106,7 @@ public class AiMusicDO extends BaseDO {
*/
private String taskId;
// TODO @xin用 @TableField(typeHandler = JacksonTypeHandler.class) 替代即可
public static class AiMusicTagsHandler extends AbstractJsonTypeHandler<Object> {
@Override

View File

@@ -15,6 +15,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
// TODO @xin不要直接叫这个名字哈要有它的目的
/**
* 处理 Suno Job
* @author xiaoxin
@@ -30,6 +31,7 @@ public class SunoJob implements JobHandler {
@Override
public String execute(String param) {
// TODO @xin可以考虑整个逻辑都下沉到 Service 里,有点类似 AccessLogCleanJob
List<AiMusicDO> unCompletedTask = musicService.getUnCompletedTask();
if (CollUtil.isEmpty(unCompletedTask)) {

View File

@@ -30,8 +30,10 @@ public class AiMusicConvert {
.setTags(StrUtil.isNotBlank(musicData.tags()) ? List.of(musicData.tags().split(StrPool.COMMA)) : null);
}
public static List<AiMusicDO> convertFrom(List<SunoApi.MusicData> musicDataList) {
return musicDataList.stream()
// TODO @xin一般情况下不用 convert直接逻辑里 convert 就好啦。
public static List<AiMusicDO> convertFrom(List<SunoApi.MusicData> list) {
// TODO @xin可以使用 CollectionUtils.convertList 简洁一点
return list.stream()
.map(AiMusicConvert::convertFrom)
.collect(Collectors.toList());
}

View File

@@ -12,7 +12,6 @@ import java.util.List;
*/
public interface AiMusicService {
/**
* 音乐生成
*
@@ -21,7 +20,6 @@ public interface AiMusicService {
*/
List<Long> generateMusic(SunoReqVO reqVO);
/**
* 获取未完成状态的任务
*
@@ -29,8 +27,6 @@ public interface AiMusicService {
*/
List<AiMusicDO> getUnCompletedTask();
Boolean updateBatch(List<AiMusicDO> aiMusicDOList);
}

View File

@@ -21,6 +21,7 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti
/**
* AI 音乐 Service 实现类
*
* @author xiaoxin
*/
@Service
@@ -29,11 +30,13 @@ public class AiMusicServiceImpl implements AiMusicService {
@Resource
private SunoApi sunoApi;
@Resource
private AiMusicMapper musicMapper;
@Override
public List<Long> generateMusic(SunoReqVO reqVO) {
// TODO @xin是不是可以 if else 调用对应的 API然后 insertMusicData 逻辑
AiMusicGenerateEnum generateEnum = AiMusicGenerateEnum.valueOfMode(reqVO.getGenerateMode());
return switch (generateEnum) {
case DESCRIPTION -> descriptionMode(reqVO);