public IActionResult CreateOrUpdateRewardUser([FromBody] CreateRewardUserOptions options) { var rewardUser = rewardUserService_.CreateOrUpdateRewardUser(options); if (rewardUser.Success) { return(Json(rewardUser.Data)); } return(StatusCode((int)rewardUser.ErrorCode, rewardUser.ErrorText)); }
public Result <bool> CreateOrUpdateRewardUser(CreateRewardUserOptions options) { if (options == null) { return(Result <bool> .CreateFailed(StatusCode.BadRequest, "You have to login first")); } var rewardUserTest = GetRewardUserById(options.UserId, options.RewardId); if (rewardUserTest.Success) //update { var rewardUser = rewardUserTest.Data; var project = projectService_.GetProjectByRewardId(options.RewardId).Data; if (rewardUser == null) { return(Result <bool> .CreateFailed(StatusCode.BadRequest, $"Backer with {options.UserId} was not found")); } if (rewardUser.IsValidQuantity(options.Quantity)) { rewardUser.Quantity = options.Quantity + rewardUser.Quantity; } if (!projectService_.UpdateCurrentFund(project).Success) { return(Result <bool> .CreateFailed(StatusCode.InternalServerError, "Reward could not be bought")); } return(Result <bool> .CreateSuccessful(true)); } else //create { var user = userService_.GetUserById(options.UserId).Data; var reward = rewardService_.GetRewardById(options.RewardId).Data; var project = projectService_.GetProjectByRewardId(options.RewardId).Data; if (user == null || reward == null || project == null) { return(Result <bool> .CreateFailed(StatusCode.BadRequest, "User, project or reward could not be found")); } var rewardUser = new RewardUser() { User = user, Reward = reward, Quantity = options.Quantity }; if (!rewardUser.IsValidQuantity(options.Quantity)) { return(Result <bool> .CreateFailed(StatusCode.BadRequest, "Please check the quantity is valid")); } project.RewardUsers.Add(rewardUser); if (!projectService_.UpdateCurrentFund(project).Success) { return(Result <bool> .CreateFailed(StatusCode.InternalServerError, "Reward could not be bought")); } return(Result <bool> .CreateSuccessful(true)); } }