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));
        }