using System.Linq; using System.Threading.Tasks; using Abp.Application.Services.Dto; using Abp.Domain.Entities; using Abp.Domain.Repositories; using Abp.Linq; namespace Abp.Application.Services { public abstract class AsyncCrudAppService : AsyncCrudAppService where TEntity : class, IEntity where TEntityDto : IEntityDto { protected AsyncCrudAppService(IRepository repository) : base(repository) { } } public abstract class AsyncCrudAppService : AsyncCrudAppService where TEntity : class, IEntity where TEntityDto : IEntityDto { protected AsyncCrudAppService(IRepository repository) : base(repository) { } } public abstract class AsyncCrudAppService : AsyncCrudAppService where TEntity : class, IEntity where TEntityDto : IEntityDto { protected AsyncCrudAppService(IRepository repository) : base(repository) { } } public abstract class AsyncCrudAppService : AsyncCrudAppService where TGetAllInput : IPagedAndSortedResultRequest where TEntity : class, IEntity where TEntityDto : IEntityDto where TCreateInput : IEntityDto { protected AsyncCrudAppService(IRepository repository) : base(repository) { } } public abstract class AsyncCrudAppService : AsyncCrudAppService> where TEntity : class, IEntity where TEntityDto : IEntityDto where TUpdateInput : IEntityDto { protected AsyncCrudAppService(IRepository repository) : base(repository) { } } public abstract class AsyncCrudAppService : AsyncCrudAppService> where TEntity : class, IEntity where TEntityDto : IEntityDto where TUpdateInput : IEntityDto where TGetInput : IEntityDto { protected AsyncCrudAppService(IRepository repository) : base(repository) { } } public abstract class AsyncCrudAppService : CrudAppServiceBase, IAsyncCrudAppService where TEntity : class, IEntity where TEntityDto : IEntityDto where TUpdateInput : IEntityDto where TGetInput : IEntityDto where TDeleteInput : IEntityDto { public IAsyncQueryableExecuter AsyncQueryableExecuter { get; set; } protected AsyncCrudAppService(IRepository repository) :base(repository) { AsyncQueryableExecuter = NullAsyncQueryableExecuter.Instance; } public virtual async Task Get(TGetInput input) { CheckGetPermission(); var entity = await GetEntityByIdAsync(input.Id); return MapToEntityDto(entity); } public virtual async Task> GetAll(TGetAllInput input) { CheckGetAllPermission(); var query = CreateFilteredQuery(input); var totalCount = await AsyncQueryableExecuter.CountAsync(query); query = ApplySorting(query, input); query = ApplyPaging(query, input); var entities = await AsyncQueryableExecuter.ToListAsync(query); return new PagedResultDto( totalCount, entities.Select(MapToEntityDto).ToList() ); } public virtual async Task Create(TCreateInput input) { CheckCreatePermission(); var entity = MapToEntity(input); await Repository.InsertAsync(entity); await CurrentUnitOfWork.SaveChangesAsync(); return MapToEntityDto(entity); } public virtual async Task Update(TUpdateInput input) { CheckUpdatePermission(); var entity = await GetEntityByIdAsync(input.Id); MapToEntity(input, entity); await CurrentUnitOfWork.SaveChangesAsync(); return MapToEntityDto(entity); } public virtual Task Delete(TDeleteInput input) { CheckDeletePermission(); return Repository.DeleteAsync(input.Id); } protected virtual Task GetEntityByIdAsync(TPrimaryKey id) { return Repository.GetAsync(id); } } }