コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }