public async Task <ActionResult <TPoll> > Update(string id, [FromBody][CustomizeValidator(RuleSet = Strings.UpdateRuleSet + "," + Strings.DefaultRuleSet)] TPoll pollBase) { if (id != pollBase.Id) { return(BadRequest("Id's must match")); } var oldPollBase = await _pollBaseRepository.GetByIdAsync(id); if (oldPollBase == null) { return(NotFound(id)); } if (!SenderPermissions.Contains("CanUpdateAnyPoll")) { if (oldPollBase.CreatorUserId != SenderObjectId) { return(StatusCode(StatusCodes.Status403Forbidden, "Only creator or admin can update")); } } var groups = await _groupManager.GetAllGroups(); var result = new PollBaseValidatorFromData <TQuestion>(_fileRepository, groups.Select(groupModel => groupModel.Name)) .Validate(pollBase, ruleSet: Strings.DefaultRuleSet); result.AddToModelState(ModelState, null); if (!result.IsValid) { return(BadRequest(ModelState)); } PollBase <TQuestion> .GetReplacedPicturesList(oldPollBase, pollBase) .ForEach(pictureId => _fileRepository.DeletePollFromMetadata(pictureId, id)); await _pollBaseRepository.UpdateAsync(pollBase); return(Ok(pollBase)); }
public async Task <ActionResult <TPoll> > Create([CustomizeValidator(RuleSet = Strings.CreateRuleSet + "," + Strings.DefaultRuleSet)] TPoll pollBase) { var groups = await _groupManager.GetAllGroups(); var result = new PollBaseValidatorFromData <TQuestion>(_fileRepository, groups.Select(groupModel => groupModel.Name)) .Validate(pollBase, ruleSet: Strings.DefaultRuleSet); result.AddToModelState(ModelState, null); if (!result.IsValid) { return(BadRequest(ModelState)); } pollBase.CreatorUserId = SenderObjectId; await _pollBaseRepository.AddAsync(pollBase); if (!await _fileRepository.AssociatePicturesWithPoll(pollBase, PicturesAssociateMode.Link)) { return(BadRequest("Unable to associate pictures")); } return(CreatedAtAction(nameof(Get), new { id = pollBase.Id }, pollBase)); }