public Result <bool> UpdateRewardPackage(int?projectId, int?userId, int?rewardPackageId, UpdateRewardPackageOptions updateRewardOptions) { if (projectId == null || userId == null || rewardPackageId == null || updateRewardOptions.Quantity < 0 || updateRewardOptions.MinAmount <= 0) { return(Result <bool> .Failed(StatusCode.BadRequest, "Project Or User Not Specified Or Update Options Not Valid")); } var project = GetProjectById(projectId); if (project == null) { return(Result <bool> .Failed(StatusCode.NotFound, "Project Not Found")); } if (Helpers.UserOwnsProject(_context, userId, projectId) == false) { return(Result <bool> .Failed(StatusCode.BadRequest, "Can Not Access A Project You Don't Own")); } if (project.Data.RewardPackages.Any(r => r.MinAmount == updateRewardOptions.MinAmount)) { return(Result <bool> .Failed(StatusCode.BadRequest, "Can Not Update A Reward Package With The Same Value")); } var rewardPackageToUpdate = project.Data.RewardPackages .FirstOrDefault(rp => rp.RewardPackageId == rewardPackageId); var reward = _rewardService.UpdateRewardPackage(rewardPackageToUpdate, updateRewardOptions); if (reward == null) { return(Result <bool> .Failed(StatusCode.NotFound, "Reward Package Not Found")); } var rows = 0; try { rows = _context.SaveChanges(); } catch (Exception ex) { return(Result <bool> .Failed(StatusCode.InternalServerError, ex.Message)); } return(rows <= 0 ? Result <bool> .Failed(StatusCode.InternalServerError, "Reward Package Could Not Be Updated") : Result <bool> .Succeed(true)); }