public override async Task <Tuple <Core.Models.Admin.Admin, ApprovalStatus, string> > CreateApprovableAsync(Core.Models.Admin.Admin TEntity) { MethodBase method = MethodBase.GetCurrentMethod(); ApprovalActionAttribute attr = typeof(AdminRepository).GetMethod(GetActualAsyncMethodName()).GetCustomAttribute <ApprovalActionAttribute>(); string actionName = attr.ActionName; var action = ActionByName(actionName); if (await CanSelfApprove(actionName)) { return(new Tuple <Core.Models.Admin.Admin, ApprovalStatus, string>(await CreateAsync(TEntity), ApprovalStatus.Approved, "created successfully")); } else { if (await PreCreateCheckAsync(TEntity)) { await CreateApprovalObject(TEntity, action); return(new Tuple <Core.Models.Admin.Admin, ApprovalStatus, string>(TEntity, ApprovalStatus.Pending, "creation logged for approval")); } else { return(new Tuple <Core.Models.Admin.Admin, ApprovalStatus, string>(null, ApprovalStatus.Declined, "creation failed some prechecks")); } } }
public override async Task <Tuple <bool, ApprovalStatus, string> > DeleteApprovableAsync(long Id) { MethodBase method = MethodBase.GetCurrentMethod(); ApprovalActionAttribute attr = (ApprovalActionAttribute)method.GetCustomAttributes(typeof(ApprovalActionAttribute), true)[0]; string actionName = attr.ActionName; var action = ActionByName(actionName); if (await CanSelfApprove(actionName)) { return(new Tuple <bool, ApprovalStatus, string>((await DeleteAsync(Id)), ApprovalStatus.Approved, "deleted successfully")); } else { if (await PreDeleteCheckAsync(Id)) { await CreateApprovalObject(Id, action); return(new Tuple <bool, ApprovalStatus, string>(true, ApprovalStatus.Pending, "acount creation logged for approval")); } else { return(new Tuple <bool, ApprovalStatus, string>(false, ApprovalStatus.Declined, "acount deletion falied prechecks")); } } }
public override async Task <Tuple <ApprovalStatus, string> > UpdateApprovableAsync(Core.Models.Admin.Admin TEntity) { MethodBase method = MethodBase.GetCurrentMethod(); ApprovalActionAttribute attr = (ApprovalActionAttribute)method.GetCustomAttributes(typeof(ApprovalActionAttribute), true)[0]; string actionName = attr.ActionName; var action = ActionByName(actionName); if (await CanSelfApprove(actionName)) { await UpdateAsync(TEntity); return(new Tuple <ApprovalStatus, string>(ApprovalStatus.Approved, "update successful")); } else { if (await PreUpdateCheckAsync(TEntity)) { await CreateApprovalObject(TEntity, action, true); return(new Tuple <ApprovalStatus, string>(ApprovalStatus.Pending, "update successfully logged for approval")); } else { return(new Tuple <ApprovalStatus, string>(ApprovalStatus.Declined, "The update failed some PreChecks.")); } } }