public static async Task <BaseResult <TDto> > ServiceCreateEntityHelper <TEntity, TDto, TIdPropertyType>( TEntity newEntity, string propertyName, IUnityOfWork_EF uow, string GetById_Command) where TEntity : AuditableEntityBase { var response = new BaseResult <TDto>(); // Actualizar propiedades de la entidad AppHelpers.SetFieldsForEntityUpdate(newEntity); // Guardar la nueva entidad await uow.GetRepository <TEntity>().Add(newEntity); await uow.SaveAsync(); // Devolver la entidad recien guardada desde la BD response.Data = await uow.GetConnection.QuerySingleOrDefaultAsync <TDto>(GetById_Command, new { id1 = AppHelpers.GetPropertyValue(newEntity, propertyName) }); return(response); }
public static async Task <BaseResult <TDto> > ServiceUpdateEntityHelper <TEntity, TDto, TIdPropertyType>( TEntity updatedEntity, TIdPropertyType id, string propertyName, IUnityOfWork_EF uow, string GetById_Command) where TEntity : AuditableEntityBase { var response = new BaseResult <TDto>(); // Detectar inconsistencia entre el Id y la entidad (deben ser iguales en valores) if (!((TIdPropertyType)id).Equals((TIdPropertyType)AppHelpers.GetPropertyValue(updatedEntity, propertyName))) { throw new Exception(AppMessages.UPDATE_ID_ERROR); } // Obtener la entidad desde la BD para comparar con la recibida var entityFromDb = await uow.GetRepository <TEntity>().GetById(id); // Si la entidad ya está eliminada o no existe, no hacer nada y devolver null if (entityFromDb == null || entityFromDb.IsDeleted) { response.Data = default(TDto); return(response); } // Comparar con la entidad de la BD y detectar un cambio no permitido if (AppHelpers.NotAllowedChanges(entityFromDb, updatedEntity)) { throw new Exception(AppMessages.UPDATE_FORBIDDEN_FIELDS); } // Actualizar propiedades de la entidad AppHelpers.SetFieldsForEntityUpdate(updatedEntity); // Guardar la entidad actualizada await uow.GetRepository <TEntity>().Update(updatedEntity); await uow.SaveAsync(); // Devolver la entidad recien guardada desde la BD response.Data = await uow.GetConnection.QuerySingleOrDefaultAsync <TDto>(GetById_Command, new { id1 = id }); return(response); }
public static async Task <ListResult <TDto> > ServiceGetSearchAndPaginated <TDto>( IDbConnection cn, string GetSearchAndPaginated_Command, DynamicParameters queryParams, int page = 1, int pageSize = 5) { var response = new ListResult <TDto>(); // Adding additional parameters for paging (query should have @pageSize and @offset params) queryParams.AddDynamicParams(new { pageSize, offset = pageSize * (page - 1) }); // Obtener los datos var queryMultiple = await cn.QueryMultipleAsync( GetSearchAndPaginated_Command, queryParams); var totalCount = await queryMultiple.ReadSingleAsync <long>(); var data = await queryMultiple.ReadAsync <TDto>(); // Datos de retorno (esto llena el response.data) AppHelpers.SetListResponse <TDto>(response, data, page, pageSize, totalCount); return(response); }