public Result <bool> CreateProject(int?userId, CreateProjectOptions createProjectOptions) { if (createProjectOptions == null) { return(Result <bool> .Failed(StatusCode.BadRequest, "Project Options Cannot Be Null")); } createProjectOptions.MainImageUrl = createProjectOptions.MainImageUrl?.Trim(); createProjectOptions.Title = createProjectOptions.Title?.Trim(); createProjectOptions.Description = createProjectOptions.Description?.Trim(); if (userId == null || string.IsNullOrWhiteSpace(createProjectOptions.MainImageUrl) || !Enum.IsDefined(typeof(Category), createProjectOptions.CategoryId) || createProjectOptions.Goal <= 0 || string.IsNullOrWhiteSpace(createProjectOptions.Title) || createProjectOptions.DueTo == null || createProjectOptions.DueTo <= DateTime.Now) { return(Result <bool> .Failed(StatusCode.BadRequest, "Project Options Not Valid")); } var user = _userService.GetUserById(userId); if (user == null) { return(Result <bool> .Failed(StatusCode.NotFound, "User Not Found")); } var project = new Project { Title = createProjectOptions.Title, Category = (Category)createProjectOptions.CategoryId, Description = createProjectOptions.Description, DueTo = createProjectOptions.DueTo.Value, MainImageUrl = createProjectOptions.MainImageUrl, Goal = createProjectOptions.Goal }; _context.Set <Project>().Add(project); var userProject = new UserProjectReward { IsOwner = true, Project = project }; user.UserProjectReward.Add(userProject); 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, "Project Could Not Be Created") : Result <bool> .Succeed(true)); }
public Result <bool> CreateBacking(int?userId, int?projectId, int rewardPackageId, int?amount) { if (userId == null || projectId == null) { return(Result <bool> .Failed(StatusCode.BadRequest, "Null options")); } var user = _userService.GetUserById(userId); var project = _projectService.GetProjectById(projectId); if (user == null || project == null) { return(Result <bool> .Failed(StatusCode.NotFound, "User or Project Not Found")); } if (amount <= 0 || amount == null) { return(Result <bool> .Failed(StatusCode.BadRequest, "Please enter a valid amount")); } if (Helpers.UserOwnsProject(_context, userId, projectId)) { return(Result <bool> .Failed(StatusCode.BadRequest, "You cannot back your own project")); } var rewardPackage = rewardPackageId != 0 ? project.Data.RewardPackages .FirstOrDefault(rp => amount >= rp.MinAmount && rp.RewardPackageId == rewardPackageId) : null; if (rewardPackage != null && rewardPackageId != 0) { if (rewardPackage.Quantity == 0) { return(Result <bool> .Failed(StatusCode.BadRequest, "Reward Package No Longer Available")); } rewardPackage.Quantity--; } if (rewardPackage == null && rewardPackageId != 0) { return(Result <bool> .Failed(StatusCode.NotFound, "Not eligible for this reward package")); } var userProjectBacking = new UserProjectReward { IsOwner = false, Project = project.Data, RewardPackage = rewardPackageId == 0 ? null : rewardPackage, Amount = amount }; user.UserProjectReward.Add(userProjectBacking); 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, "Backing could not be created") : Result <bool> .Succeed(true)); }