网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
namespace Dpz.Core.Service.V4.Implements;

public class AudioService(IRepository<Audio> repository, IMapper mapper) : IAudioService
{
    public async Task<VmAudio> AddAsync(VmAudio audio)
    {
        if (audio == null)
        {
            throw new ArgumentNullException(nameof(audio));
        }

        if (audio.Uploader == null)
        {
            throw new ArgumentNullException(nameof(audio.Uploader));
        }

        if (audio.AccessUrl == null)
        {
            throw new ArgumentNullException(nameof(audio.AccessUrl));
        }

        var entity = mapper.Map<Audio>(audio);
        await repository.InsertAsync(entity);
        return mapper.Map<VmAudio>(entity);
    }

    public async Task<VmAudio?> FindAsync(string id)
    {
        return mapper.Map<VmAudio>(await repository.TryGetAsync(id));
    }

    public async Task<IPagedList<VmAudio>> GetPagesAsync(
        int pageIndex,
        int pageSize,
        VmUserInfo? uploader = null
    )
    {
        var predicate = repository.SearchFor(x => true);
        if (uploader != null)
        {
            predicate = predicate.Where(x => x.Uploader.Id == uploader.Id);
        }

        return await predicate
            .OrderByDescending(x => x.UploadTime)
            .ToPagedListAsync<Audio, VmAudio>(pageIndex, pageSize);
    }

    public async Task DeleteAsync(string id)
    {
        await repository.TryDeleteAsync(id);
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

上述代码定义了一个名为 AudioService 的类,它实现了 IAudioService 接口。这个类主要用于处理与音频相关的服务逻辑,具体功能如下:

  1. 构造函数:

    • AudioService 类的构造函数接受两个参数:IRepository<Audio> repositoryIMapper mapperrepository 用于与数据存储进行交互,而 mapper 用于对象之间的映射(例如,将视图模型转换为实体模型,反之亦然)。
  2. AddAsync 方法:

    • 该方法用于添加新的音频记录。
    • 首先,它检查传入的 audio 对象是否为 null,如果是,则抛出 ArgumentNullException
    • 然后,它检查 audio.Uploaderaudio.AccessUrl 是否为 null,如果是,则抛出相应的异常。
    • 接着,使用 mapperVmAudio(视图模型)映射为 Audio(实体),并通过 repository 将其插入到数据库中。
    • 最后,返回插入的音频记录的视图模型。
  3. FindAsync 方法:

    • 该方法根据给定的 id 查找音频记录。
    • 它调用 repository.TryGetAsync(id) 来获取音频实体,并使用 mapper 将其映射为 VmAudio 视图模型。
    • 如果找不到记录,返回值为 null
  4. GetPagesAsync 方法:

    • 该方法用于分页获取音频记录。
    • 它接受 pageIndexpageSize 参数来控制分页,并可选地接受 VmUserInfo 类型的 uploader 参数。
    • 如果提供了 uploader,则会根据上传者的 ID 过滤音频记录。
    • 最后,按上传时间降序排列,并返回一个分页列表。
  5. DeleteAsync 方法:

    • 该方法用于删除指定 ID 的音频记录。
    • 它调用 repository.TryDeleteAsync(id) 来执行删除操作。

总结

AudioService 类提供了对音频记录的基本 CRUD(创建、读取、更新、删除)操作,支持添加、查找、分页获取和删除音频记录。它通过依赖注入的方式使用了一个通用的仓储模式(IRepository)和一个映射工具(IMapper),使得代码更加模块化和可维护。

loading