public IActionResult Create([FromBody] CreateBackedProjectOptions options) { var result = backedProjectsService.CreateBackedProject(options); if (!result.Success) { return(StatusCode((int)result.ErrorCode, result.ErrorText)); } return(Json(result.Data)); }
public Result <BackedProjects> CreateBackedProject( CreateBackedProjectOptions options) { if (options == null) { return(Result <BackedProjects> .ActionFailed( StatusCode.BadRequest, "Null options")); } var user = userService_ .GetById(options.UserId) .Include(x => x.BackedProjectsList) .SingleOrDefault(); if (user == null) { return(Result <BackedProjects> .ActionFailed( StatusCode.BadRequest, "Invalid UserId")); } var project = projectService_ .GetProjectById(options.ProjectId); if (project == null) { return(Result <BackedProjects> .ActionFailed( StatusCode.BadRequest, "Invalid ProjectId")); } var backedProject = new BackedProjects() { Amount = options.Amount, ProjectId = project.ProjectId, Name = project.Name, Category = project.Category, Description = project.Description, Photo = project.Photos.ElementAt(0).Url, NumberOfBackers = project.NumberOfBackers, ProjectCreatorId = project.UserId, ProjectCreatorFirstName = project.User.FirstName, ProjectCreatorLastName = project.User.LastName }; var backedProjectIds = user.BackedProjectsList .Select(s => s.ProjectId).ToList(); if (backedProjectIds.Contains(project.ProjectId)) { project.AmountGathered += options.Amount; context_.SaveChanges(); return(Result <BackedProjects> .ActionFailed( StatusCode.OK, "Reward Package was succesfully purchased")); } project.NumberOfBackers += 1; backedProject.NumberOfBackers += 1; project.AmountGathered += options.Amount; user.BackedProjectsList.Add(backedProject); var rows = 0; try { rows = context_.SaveChanges(); } catch (Exception ex) { return(Result <BackedProjects> .ActionFailed( StatusCode.InternalServerError, ex.ToString())); } if (rows <= 0) { return(Result <BackedProjects> .ActionFailed( StatusCode.InternalServerError, "Backed Project could not be created")); } return(Result <BackedProjects> .ActionSuccessful(backedProject)); }