public async Task <Result <SurveyCoreModel> > Edit(UpdateSurveyModel model)
 => await _surveyBiz.Edit(model);
        public Task <Result <SurveyCoreModel> > Edit(UpdateSurveyModel model)
        => Result <SurveyCoreModel> .TryAsync(async() =>
        {
            var userSurvey =
                await _repository.FirstOrDefaultAsNoTrackingAsync <UserSurvey>(us => us.SurveyId == model.Id);

            var result = await _repository.FirstOrDefaultAsync <Survey>(s => s.Id == model.Id,
                                                                        s => s.Question.Select(
                                                                            q => q.Answer.Select(a => a.Action)));

            if (!result.Success || result.Data == null)
            {
                return(Result <SurveyCoreModel> .Failed(Error.WithData(1000, new[] { "Survey not found " })));
            }

            var survey = result.Data;

            if (survey.Enabled != model.Enabled)
            {
                survey.Enabled     = model.Enabled;
                survey.Name        = model.Name;
                survey.Description = model.Description;
                if (userSurvey.Success && userSurvey.Data != null)
                {
                    await _repository.CommitAsync();
                    return(Result <SurveyCoreModel> .Failed(Error.WithData(1000,
                                                                           new[] { "After a Survey done by user ! you cant edit survey , only enable or disable would work " })));
                }
            }



            _repository.RemoveRange(survey.Question.SelectMany(q => q.Answer.SelectMany(a => a.Action)).ToList());
            _repository.RemoveRange(survey.Question.SelectMany(q => q.Answer.SelectMany(a => a.MustAnswered))
                                    .ToList());
            _repository.RemoveRange(survey.Question.SelectMany(q => q.MustAnswered).ToList());
            _repository.RemoveRange(survey.Question.SelectMany(q => q.Answer).ToList());
            _repository.RemoveRange(survey.Question);
            survey.Question = model.Questions.Select(q =>
            {
                var questionId = Guid.NewGuid();
                return(new Question
                {
                    Id = questionId,
                    Text = q.Text,
                    Number = q.Number,
                    Answer = q.Answers.Select(a => new Answer
                    {
                        Id = Guid.NewGuid(),
                        Number = a.Number,
                        Type = (byte)a.Type,
                        QuestionId = questionId,
                        Text = a.Text,
                        Action = a.Actions.Select(action => new DataAccess.EFModels.Action
                        {
                            Id = Guid.NewGuid(), Type = (byte)action.Type, Value = action.Value
                        })
                                 .ToList(),
                    }).ToList()
                });
            }).ToList();

            survey.Question?.ToList().ForEach(question =>
            {
                var mustAnsweredNumber = model.Questions?.FirstOrDefault(q => q.Number == question.Number)?
                                         .MustAnsweredNumber.Where(a => question.Number - a > 0).ToList();

                question.MustAnswered = survey.Question.SelectMany(q => q.Answer)
                                        .Where(a => mustAnsweredNumber != null && mustAnsweredNumber.Contains(a.Number)).Select(ma =>
                                                                                                                                new MustAnswered
                {
                    Id = Guid.NewGuid(), AnswerId = ma.Id, QuestionId = question.Id
                }).ToList();
            });

            survey.Enabled     = model.Enabled;
            survey.Name        = model.Name;
            survey.Description = model.Description;
            await _repository.CommitAsync();
            return(Result <SurveyCoreModel> .Successful(_autoMapper.Map <SurveyCoreModel>(survey)));
        });