Пример #1
0
        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));
        }