public async Task <IActionResult> Edit(EditDeveloperViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                var developer = await _context.Developers
                                .SingleOrDefaultAsync(m => m.DeveloperId == model.DeveloperId);

                developer.Name = model.Name;
                _context.Update(developer);
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!DeveloperExists(model.DeveloperId))
                {
                    return(View("NotFound"));
                }

                throw;
            }

            return(RedirectToAction(nameof(Index)));
        }
Пример #2
0
        public async Task <IActionResult> Put([FromRoute] string name, [FromBody] EditDeveloperViewModel updateModel)
        {
            if (await _developerRepo.Single(Decode(name)) is Developer original)
            {
                if (!await ValidateModel(updateModel, original))
                {
                    return(BadRequest(ModelState.GetValidationProblemDetails()));
                }
                //updates fields of orginal enitty

                updateModel.Tags = updateModel.Tags.Distinct().ToArray();

                original.FullName = updateModel.FullName;

                original.Nickname = updateModel.Nickname;

                //remove
                foreach (var devTag in original.DeveloperTags.ToArray())
                {
                    if (!updateModel.Tags.Contains(devTag.Tag.Name))
                    {
                        original.DeveloperTags.Remove(devTag);
                    }
                }
                //add new tags
                foreach (var tagName in updateModel.Tags)
                {
                    if (original.DeveloperTags.All(x => x.Tag.Name != tagName))
                    {
                        original.DeveloperTags.Add(
                            new DeveloperTag
                        {
                            Developer = original,
                            Tag       = new Tag {
                                Name = tagName
                            }
                        });
                    }
                }

                await _developerRepo.Update(original);

                // ...
                await _developerRepo.SaveChangesAsync();

                // returns updated entity

                return(Ok(original.GetVM(Encode(original.Nickname))));
            }

            return(NotFound());
        }
Пример #3
0
        public ActionResult Edit(EditDeveloperViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(Edit(model.Id));
            }

            var developer = mapper.Map <EditDeveloperViewModel, Developer>(model);

            developerService.UpdateDeveloper(developer);

            return(RedirectToAction(nameof(Index)));
        }
Пример #4
0
        protected virtual async Task <bool> ValidateModel(EditDeveloperViewModel model, Developer original = null)
        {
            if ((original == null || model.Nickname != original.Nickname) && await _developerRepo.Exist(model.Nickname))
            {
                ModelState.AddModelError(nameof(model.Nickname), String.Format("Developer with nickname {0} already exists", model.Nickname));
            }

            if (Regex.IsMatch(model.Nickname, "-"))
            {
                ModelState.AddModelError(nameof(model.Nickname), String.Format("Developer nickname should not contain \"-\" (dash) character"));
            }

            return(ModelState.IsValid);
        }
Пример #5
0
        public async Task <IActionResult> Post([FromBody] EditDeveloperViewModel model)
        {
            if (!ModelState.IsValid || !await ValidateModel(model))
            {
                return(BadRequest(ModelState.GetValidationProblemDetails()));
            }

            var developer = model.GetInstance();

            await _developerRepo.Add(developer);

            await _developerRepo.SaveChangesAsync();

            return(new JsonResult(developer.GetVM(Encode(developer.Nickname))));
        }
Пример #6
0
        public static Developer GetInstance(this EditDeveloperViewModel model)
        {
            var instance = Mapper.Map <Developer>(model);

            instance.DeveloperTags = model.Tags.
                                     Select(x => new DeveloperTag
            {
                Developer = instance,
                Tag       = new Tag {
                    Name = x
                }
            }).ToList();

            return(instance);
        }