网站首页 网站源码
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);
}
}
上述代码定义了一个名为 AudioService
的类,它实现了 IAudioService
接口。这个类主要用于处理与音频相关的服务逻辑,具体功能如下:
构造函数:
AudioService
类的构造函数接受两个参数:IRepository<Audio> repository
和 IMapper mapper
。repository
用于与数据存储进行交互,而 mapper
用于对象之间的映射(例如,将视图模型转换为实体模型,反之亦然)。AddAsync 方法:
audio
对象是否为 null
,如果是,则抛出 ArgumentNullException
。audio.Uploader
和 audio.AccessUrl
是否为 null
,如果是,则抛出相应的异常。mapper
将 VmAudio
(视图模型)映射为 Audio
(实体),并通过 repository
将其插入到数据库中。FindAsync 方法:
id
查找音频记录。repository.TryGetAsync(id)
来获取音频实体,并使用 mapper
将其映射为 VmAudio
视图模型。null
。GetPagesAsync 方法:
pageIndex
和 pageSize
参数来控制分页,并可选地接受 VmUserInfo
类型的 uploader
参数。uploader
,则会根据上传者的 ID 过滤音频记录。DeleteAsync 方法:
repository.TryDeleteAsync(id)
来执行删除操作。AudioService
类提供了对音频记录的基本 CRUD(创建、读取、更新、删除)操作,支持添加、查找、分页获取和删除音频记录。它通过依赖注入的方式使用了一个通用的仓储模式(IRepository
)和一个映射工具(IMapper
),使得代码更加模块化和可维护。