예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }