using Dpz.Core.Public.ViewModel.Request;
using Dpz.Core.Public.ViewModel.Response;

namespace Dpz.Core.Service.RepositoryService;

public interface IMusicService
{
    /// <summary>
    /// 保存音乐
    /// </summary>
    /// <param name="uploadActionRequest"></param>
    /// <returns></returns>
    Task<MusicResponse?> SaveAsync(MusicUploadActionRequest uploadActionRequest);

    /// <summary>
    /// 获取所有分组
    /// </summary>
    /// <returns></returns>
    Task<List<string>> GetGroupsAsync();

    /// <summary>
    /// 修改音乐信息
    /// </summary>
    /// <param name="informationRequest"></param>
    /// <returns></returns>
    Task<MusicResponse> EditMusicInformationAsync(EditMusicInformationRequest informationRequest);

    /// <summary>
    /// 分页获取音乐信息
    /// </summary>
    /// <param name="pageIndex"></param>
    /// <param name="pageSize"></param>
    /// <param name="title"></param>
    /// <returns></returns>
    Task<IPagedList<MusicResponse>> GetPagesAsync(
        int pageIndex,
        int pageSize,
        string? title = null
    );

    /// <summary>
    /// 获取单个音乐信息
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<MusicResponse?> GetAsync(string id);

    /// <summary>
    /// 删除音乐
    /// </summary>
    /// <param name="id"></param>
    /// <param name="deleteObjectStorage">从云储存删除</param>
    /// <returns>file name</returns>
    Task DeleteAsync(string id, Func<MusicResponse, Task> deleteObjectStorage);

    /// <summary>
    /// 获取最新上传的音乐
    /// </summary>
    /// <param name="top"></param>
    /// <returns></returns>
    Task<List<MusicResponse>> GetTopMusicsAsync(uint top = 200);

    /// <summary>
    /// 获取随机分组的音乐
    /// </summary>
    /// <param name="top"></param>
    /// <returns></returns>
    Task<List<MusicResponse>> GetRandomGroupMusicAsync(int top = 200);
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这是一个音乐服务的接口定义,定义了音乐管理系统中的核心业务操作。让我详细解释每个方法的功能:

接口概述

IMusicService 是一个音乐服务的契约接口,定义了音乐资源管理的完整 CRUD 操作以及一些特殊查询功能。

方法详解

1. SaveAsync - 音乐保存

Task<MusicResponse?> SaveAsync(MusicUploadActionRequest uploadActionRequest);
  • 功能:保存/上传新的音乐文件
  • 参数MusicUploadActionRequest 包含音乐上传的相关信息
  • 返回:保存成功后的音乐信息,失败时返回 null

2. GetGroupsAsync - 获取分组

Task<List<string>> GetGroupsAsync();
  • 功能:获取系统中所有的音乐分组名称
  • 返回:分组名称列表,用于分类管理

3. EditMusicInformationAsync - 编辑音乐信息

Task<MusicResponse> EditMusicInformationAsync(EditMusicInformationRequest informationRequest);
  • 功能:修改已存在音乐的元信息(如标题、艺术家等)
  • 参数:包含要修改的音乐信息
  • 返回:更新后的音乐信息

4. GetPagesAsync - 分页查询

Task<IPagedList<MusicResponse>> GetPagesAsync(int pageIndex, int pageSize, string? title = null);
  • 功能:分页获取音乐列表,支持按标题搜索
  • 参数
    • pageIndex:页码
    • pageSize:每页数量
    • title:可选的标题搜索条件
  • 返回:分页结果集

5. GetAsync - 获取单个音乐

Task<MusicResponse?> GetAsync(string id);
  • 功能:根据 ID 获取特定音乐的详细信息
  • 返回:音乐信息,不存在时返回 null

6. DeleteAsync - 删除音乐

Task DeleteAsync(string id, Func<MusicResponse, Task> deleteObjectStorage);
  • 功能:删除音乐记录
  • 参数
    • id:音乐 ID
    • deleteObjectStorage:回调函数,用于从云存储中删除文件
  • 设计亮点:通过回调函数实现了存储层的解耦

7. GetTopMusicsAsync - 获取最新音乐

Task<List<MusicResponse>> GetTopMusicsAsync(uint top = 200);
  • 功能:获取最近上传的音乐列表
  • 参数:返回的音乐数量,默认 200 首

8. GetRandomGroupMusicAsync - 随机分组音乐

Task<List<MusicResponse>> GetRandomGroupMusicAsync(int top = 200);
  • 功能:从随机选择的分组中获取音乐
  • 用途:可能用于音乐推荐或发现功能

设计特点

  1. 异步设计:所有方法都返回 Task,支持异步操作
  2. 分层架构:使用 Request/Response 模式,职责分离清晰
  3. 可扩展性:通过接口定义,便于实现不同的存储策略
  4. 灵活删除:删除方法接受回调函数,支持不同的存储后端
  5. 丰富查询:提供分页、搜索、分组等多种查询方式

这个接口设计体现了良好的软件架构原则,为音乐管理系统提供了完整的业务能力抽象。

评论加载中...