mirror of https://github.com/abpframework/abp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
141 lines
4.6 KiB
141 lines
4.6 KiB
using System;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Volo.Abp.Application.Dtos;
|
|
using Volo.Abp.Domain.Entities;
|
|
using Volo.Abp.Domain.Repositories;
|
|
using Volo.Abp.Linq;
|
|
|
|
namespace Volo.Abp.Application.Services
|
|
{
|
|
public abstract class AsyncCrudAppService<TEntity, TEntityDto>
|
|
: AsyncCrudAppService<TEntity, TEntityDto, Guid>
|
|
where TEntity : class, IEntity<Guid>
|
|
where TEntityDto : IEntityDto<Guid>
|
|
{
|
|
protected AsyncCrudAppService(IQueryableRepository<TEntity, Guid> repository)
|
|
: base(repository)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public abstract class AsyncCrudAppService<TEntity, TEntityDto, TPrimaryKey>
|
|
: AsyncCrudAppService<TEntity, TEntityDto, TPrimaryKey, PagedAndSortedResultRequestDto>
|
|
where TEntity : class, IEntity<TPrimaryKey>
|
|
where TEntityDto : IEntityDto<TPrimaryKey>
|
|
{
|
|
protected AsyncCrudAppService(IQueryableRepository<TEntity, TPrimaryKey> repository)
|
|
: base(repository)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public abstract class AsyncCrudAppService<TEntity, TEntityDto, TPrimaryKey, TGetAllInput>
|
|
: AsyncCrudAppService<TEntity, TEntityDto, TPrimaryKey, TGetAllInput, TEntityDto, TEntityDto>
|
|
where TEntity : class, IEntity<TPrimaryKey>
|
|
where TEntityDto : IEntityDto<TPrimaryKey>
|
|
{
|
|
protected AsyncCrudAppService(IQueryableRepository<TEntity, TPrimaryKey> repository)
|
|
: base(repository)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public abstract class AsyncCrudAppService<TEntity, TEntityDto, TPrimaryKey, TGetAllInput, TCreateInput>
|
|
: AsyncCrudAppService<TEntity, TEntityDto, TPrimaryKey, TGetAllInput, TCreateInput, TCreateInput>
|
|
where TGetAllInput : IPagedAndSortedResultRequest
|
|
where TEntity : class, IEntity<TPrimaryKey>
|
|
where TEntityDto : IEntityDto<TPrimaryKey>
|
|
where TCreateInput : IEntityDto<TPrimaryKey>
|
|
{
|
|
protected AsyncCrudAppService(IQueryableRepository<TEntity, TPrimaryKey> repository)
|
|
: base(repository)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public abstract class AsyncCrudAppService<TEntity, TEntityDto, TPrimaryKey, TGetAllInput, TCreateInput, TUpdateInput>
|
|
: CrudAppServiceBase<TEntity, TEntityDto, TPrimaryKey, TGetAllInput, TCreateInput, TUpdateInput>,
|
|
IAsyncCrudAppService<TEntityDto, TPrimaryKey, TGetAllInput, TCreateInput, TUpdateInput>
|
|
where TEntity : class, IEntity<TPrimaryKey>
|
|
where TEntityDto : IEntityDto<TPrimaryKey>
|
|
{
|
|
public IAsyncQueryableExecuter AsyncQueryableExecuter { get; set; }
|
|
|
|
protected AsyncCrudAppService(IQueryableRepository<TEntity, TPrimaryKey> repository)
|
|
:base(repository)
|
|
{
|
|
AsyncQueryableExecuter = DefaultAsyncQueryableExecuter.Instance;
|
|
}
|
|
|
|
public virtual async Task<TEntityDto> Get(TPrimaryKey id)
|
|
{
|
|
CheckGetPermission();
|
|
|
|
var entity = await GetEntityByIdAsync(id);
|
|
return MapToEntityDto(entity);
|
|
}
|
|
|
|
public virtual async Task<PagedResultDto<TEntityDto>> GetList(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<TEntityDto>(
|
|
totalCount,
|
|
entities.Select(MapToEntityDto).ToList()
|
|
);
|
|
}
|
|
|
|
public virtual async Task<TEntityDto> Create(TCreateInput input)
|
|
{
|
|
CheckCreatePermission();
|
|
|
|
var entity = MapToEntity(input);
|
|
|
|
await Repository.InsertAsync(entity);
|
|
await CurrentUnitOfWork.SaveChangesAsync();
|
|
|
|
return MapToEntityDto(entity);
|
|
}
|
|
|
|
public virtual async Task<TEntityDto> Update(TPrimaryKey id, TUpdateInput input)
|
|
{
|
|
CheckUpdatePermission();
|
|
|
|
var entity = await GetEntityByIdAsync(id);
|
|
|
|
//TODO: Check if input has id different than given id and normalize if it's default value, throw ex otherwise
|
|
|
|
MapToEntity(input, entity);
|
|
await CurrentUnitOfWork.SaveChangesAsync();
|
|
|
|
return MapToEntityDto(entity);
|
|
}
|
|
|
|
public virtual Task Delete(TPrimaryKey id)
|
|
{
|
|
CheckDeletePermission();
|
|
|
|
return Repository.DeleteAsync(id);
|
|
}
|
|
|
|
protected virtual Task<TEntity> GetEntityByIdAsync(TPrimaryKey id)
|
|
{
|
|
return Repository.GetAsync(id);
|
|
}
|
|
}
|
|
}
|