protected async Task <DbRepositoryResult> SafeExecuteAsync(Func <AppDbContext, Task <DbRepositoryResult> > func)
 {
     try
     {
         return(await func(this._dbContext));
     }
     catch (NotAuthorizedException authError)
     {
         return(DbRepositoryResult.Failure(DbRepositoryResultStatus.NotAuthorized, authError.Message, authError));
     }
     catch (Exception error)
     {
         return(DbRepositoryResult.Failure(DbRepositoryResultStatus.Error, error.Message, error));
     }
 }
        protected async Task <DbRepositoryResult <T> > SafeExecuteAsync <T>(Func <AppDbContext, Task <T> > getDataAsync)
        {
            try
            {
                var result = await getDataAsync(this._dbContext);

                return(result == null
                    ? DbRepositoryResult <T> .Failure(DbRepositoryResultStatus.NotFound)
                    : DbRepositoryResult <T> .Success(result));
            }
            catch (Exception error)
            {
                return(DbRepositoryResult <T> .Failure(DbRepositoryResultStatus.Error, error.Message, error));
            }
        }
        protected async Task <DbRepositoryResult> DeleteAsync <T>(int id) where T : BaseModel
        {
            return(await this.SafeExecuteAsync(async dbContext =>
            {
                var entity = await dbContext.Set <T>().FirstOrDefaultAsync(x => x.Id == id);
                if (entity == null)
                {
                    return DbRepositoryResult.Failure(DbRepositoryResultStatus.NotFound);
                }

                dbContext.Entry(entity).State = EntityState.Deleted;
                await dbContext.SaveChangesAsync();

                return DbRepositoryResult.DeletedSuccessful;
            }));
        }
 protected static ActionResult ReportError <T>(DbRepositoryResult <T> result, string returnUrl = null)
 {
     return(BaseDbRepositoryController.ReportError(result.ErrorMessage, result.Error, returnUrl));
 }