public void Post_WithValidData_Succeeds()
 {
     using (var controller = ResolveController <SkillController>())
     {
         var skillEntityModel = new UserSkillEntityModel()
         {
             SkillName    = "New Skill",
             UserId       = 1,
             Description  = "some random description",
             DisplayOrder = 1,
             ExternalUrl  = ""
         };
         var response = controller.Post(skillEntityModel);
         Assert.IsTrue(response.GetValue <bool>("Success"));
     }
 }
        public IHttpActionResult Post(UserSkillEntityModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var currentUser = ApplicationContext.Current.CurrentUser;
            //if it's admin, we can safely change the customer id otherwise we'll save skill as logged in user
            var isAdmin = currentUser.IsAdministrator();

            if (!isAdmin && model.UserId > 0)
            {
                model.UserId = currentUser.Id;
            }

            if (model.SystemSkill && isAdmin)
            {
                model.UserId = 0;
            }
            else
            {
                model.UserId = currentUser.Id;
            }

            var mediaIds = model.MediaId?.ToList() ?? new List <int>();
            //get all medias
            var medias = _mediaService.Get(x => mediaIds.Contains(x.Id) && x.UserId == currentUser.Id).ToList();


            //get skill, 1.) by id 2.) by name 3.) create new otherwise
            var skill = _skillService.Get(model.Id) ??
                        (_skillService.FirstOrDefault(x => x.Name == model.SkillName) ?? new Skill()
            {
                DisplayOrder = model.DisplayOrder,
                UserId = currentUser.Id,
                Name = model.SkillName
            });

            //should we add this?
            if (skill.Id == 0)
            {
                _skillService.Insert(skill);
            }
            else
            {
                if (model.SystemSkill && isAdmin)
                {
                    skill.Name = model.SkillName;
                    _skillService.Update(skill);
                }
            }

            //if user id is not 0, attach this skill with user
            if (model.UserId != 0)
            {
                var userSkill = model.UserSkillId > 0 ? _userSkillService.Get(model.UserSkillId) : new UserSkill()
                {
                    UserId       = model.UserId,
                    SkillId      = skill.Id,
                    Description  = model.Description,
                    DisplayOrder = model.DisplayOrder,
                    ExternalUrl  = model.ExternalUrl
                };

                if (userSkill.Id == 0)
                {
                    _userSkillService.Insert(userSkill);
                }
                else
                {
                    _userSkillService.Update(userSkill);
                }

                //attach media if it exists
                foreach (var media in medias)
                {
                    _mediaService.AttachMediaToEntity(userSkill, media);
                }
                return(RespondSuccess(new {
                    Skill = userSkill.ToModel(_mediaService, _mediaSettings, _generalSettings)
                }));
            }
            return(RespondSuccess(new {
                Skill = skill.ToModel()
            }));
        }
Exemple #3
0
        public IHttpActionResult Post(UserSkillEntityModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var currentUser = _workContext.CurrentCustomer;
            //if it's admin, we can safely change the customer id otherwise we'll save skill as logged in user
            var isAdmin = currentUser.IsAdmin();

            if (!isAdmin && model.UserId > 0)
            {
                model.UserId = currentUser.Id;
            }

            if (model.SystemSkill && isAdmin)
            {
                model.UserId = 0;
            }
            else
            {
                model.UserId = currentUser.Id;
            }

            var mediaIds = model.MediaId?.ToList() ?? new List <int>();
            //get all medias
            var medias = _mediaService.Get(x => mediaIds.Contains(x.Id) && x.UserId == currentUser.Id).ToList();


            //get skill, 1.) by id 2.) by name 3.) create new otherwise
            var skill = _skillService.GetById(model.Id) ??
                        (_skillService.FirstOrDefault(x => x.Name == model.SkillName) ?? new Skill()
            {
                DisplayOrder = model.DisplayOrder,
                UserId = currentUser.Id,
                Name = model.SkillName,
                Description = model.Description
            });

            //should we add this?
            if (skill.Id == 0)
            {
                _skillService.Insert(skill);
            }
            else
            {
                if (model.SystemSkill && isAdmin)
                {
                    skill.Name        = model.SkillName;
                    skill.Description = model.Description;
                    _skillService.Update(skill);
                }
            }

            //if user id is not 0, attach this skill with user
            if (model.UserId != 0)
            {
                //but first check if this skill has already been assigned to user or not
                if (model.UserSkillId == 0)
                {
                    var savedSkill = _userSkillService.FirstOrDefault(x => x.SkillId == skill.Id);
                    if (savedSkill != null)
                    {
                        //the skill is already part of user, we won't add it again
                        return(Response(new
                        {
                            Success = false,
                            Message = "The skill has already been added to this profile"
                        }));
                    }
                }
                var userSkill = model.UserSkillId > 0 ? _userSkillService.GetById(model.UserSkillId) : new UserSkill()
                {
                    UserId       = model.UserId,
                    SkillId      = skill.Id,
                    Description  = model.Description,
                    DisplayOrder = model.DisplayOrder,
                    ExternalUrl  = model.ExternalUrl
                };

                if (userSkill.Id == 0)
                {
                    _userSkillService.Insert(userSkill);
                }
                else
                {
                    _userSkillService.Update(userSkill);
                }

                //attach media if it exists
                foreach (var media in medias)
                {
                    _mediaService.AttachMediaToEntity(userSkill, media);
                }
                return(Response(new {
                    Success = true,
                    Skill = userSkill.ToModel(_mediaService, _mediaSettings, _workContext, _storeContext, _userService, _customerProfileViewService, _customerProfileService, _pictureService, Url, _webHelper)
                }));
            }
            return(Response(new {
                Success = true,
                Skill = skill.ToModel(_workContext)
            }));
        }