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

namespace Dpz.Core.Service.RepositoryServiceImpl;

public class AudioService(IRepository<Audio> repository, IMapper mapper) : IAudioService
{
    public async Task<AudioResponse> AddAsync(CreateAudioRequest request)
    {
        ArgumentNullException.ThrowIfNull(request);
        ArgumentNullException.ThrowIfNull(request.Uploader);
        ArgumentNullException.ThrowIfNull(request.AccessUrl);

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

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

    public async Task<IPagedList<AudioResponse>> 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, AudioResponse>(pageIndex, pageSize);
    }

    public async Task DeleteAsync(string id)
    {
        await repository.TryDeleteAsync(id);
    }
}
评论加载中...