Exemplo n.º 1
0
                public async Task <QuestionDto> Handle(EditQuestionCommand request, CancellationToken cancellationToken)
                {
                    var question = await _context.Questions
                                   .Where(x => x.Id == request.QuestionId)
                                   .FirstOrDefaultAsync();

                    if (question == null)
                    {
                        throw new RestException(HttpStatusCode.NotFound, "Question Not Found");
                    }

                    var inputType = await _context.InputTypes
                                    .Where(x => x.Id == request.InputTypeId)
                                    .FirstOrDefaultAsync();

                    if (inputType == null)
                    {
                        throw new RestException(HttpStatusCode.NotFound, "Input Type Not Found");
                    }

                    await using var transaction = await _context.Database.BeginTransactionAsync();

                    question.Title           = request.Title;
                    question.Required        = request.Required;
                    question.MultipleOptions = request.MultipleOptions;
                    question.InputType       = inputType;

                    var    document    = new Document();
                    string documentUrl = "";

                    ;                    if (request.File != null)
                    {
                        if (request.DocumentId != null && request.DocumentId > 0)
                        {
                            document = await _context.Documents
                                       .Where(x => x.Id == request.DocumentId)
                                       .FirstOrDefaultAsync();

                            if (document == null)
                            {
                                throw new RestException(HttpStatusCode.NotFound, "document Not Found");
                            }

                            await _uploadFiles.RemoveDocuments(document);

                            var newDocument = await _uploadFiles.UploadDocuments(request.File);

                            document.Name = newDocument.Name;
                            document.Url  = newDocument.Url;
                        }
                        else
                        {
                            document = await _uploadFiles.UploadDocuments(request.File);

                            document.Question = question;

                            await _context.Documents.AddAsync(document);
                        }

                        if (await _context.SaveChangesAsync() < 1)
                        {
                            await transaction.RollbackAsync();

                            throw new RestException(HttpStatusCode.BadRequest, "Error savig document changes");
                        }

                        document = await _documentsUrl.GetDocumentUrl(document, "Questions");
                    }

                    var options = new List <OptionDto>();

                    if (request.MultipleOptions && request.Options != null)
                    {
                        foreach (var item in request.Options)
                        {
                            var option = await _context.Options
                                         .Where(x => x.Id == item.Id)
                                         .FirstOrDefaultAsync();

                            if (option == null)
                            {
                                var op = new Option
                                {
                                    Description = item.Description,
                                    Question    = question
                                };

                                await _context.Options.AddAsync(op);
                            }
                            else
                            {
                                option.Description           = item.Description;
                                _context.Entry(option).State = EntityState.Modified;
                            }

                            options.Add(new OptionDto
                            {
                                Id          = option.Id,
                                Description = option.Description,
                                QuestionId  = question.Id
                            });

                            if (await _context.SaveChangesAsync() < 1)
                            {
                                await transaction.RollbackAsync();

                                throw new RestException(HttpStatusCode.BadRequest, "Error savig options changes");
                            }
                        }
                    }

                    await transaction.CommitAsync();

                    return(new QuestionDto
                    {
                        Title = question.Title,
                        Required = question.Required,
                        Document = document,
                        InputType = inputType,
                        MultipleOptions = question.MultipleOptions,
                        Options = options,
                    });
                }
Exemplo n.º 2
0
                public async Task <QuestionDto> Handle(CreateQuestionsCommand request, CancellationToken cancellationToken)
                {
                    var quiz = await _context.Quizzes
                               .Where(x => x.Id == request.QuizId)
                               .FirstOrDefaultAsync();

                    if (quiz == null)
                    {
                        throw new RestException(HttpStatusCode.NotFound, "Quiz Not Found");
                    }

                    await using var transaction = await _context.Database.BeginTransactionAsync();

                    var inputType = await _context.InputTypes
                                    .Where(x => x.Id == request.InputTypeId)
                                    .FirstOrDefaultAsync();

                    if (inputType == null)
                    {
                        await transaction.RollbackAsync();

                        throw new RestException(HttpStatusCode.NotFound, "Input Type Not Found");
                    }

                    var question = new Domain.Question
                    {
                        Title           = request.Title,
                        Required        = request.Required,
                        MultipleOptions = request.MultipleOptions,
                        Quiz            = quiz,
                        InputType       = inputType
                    };

                    await _context.Questions.AddAsync(question);

                    if (await _context.SaveChangesAsync() < 1)
                    {
                        await transaction.RollbackAsync();

                        throw new RestException(HttpStatusCode.BadRequest, "Error savig questions changes");
                    }

                    if (request.MultipleOptions && request.Options != null)
                    {
                        foreach (var option in request.Options)
                        {
                            var op = new Option
                            {
                                Description = option,
                                Question    = question
                            };

                            await _context.Options.AddAsync(op);
                        }

                        if (await _context.SaveChangesAsync() < 1)
                        {
                            await transaction.RollbackAsync();

                            throw new RestException(HttpStatusCode.BadRequest, "Error savig option changes");
                        }
                    }

                    var document = new Document();

                    if (request.File != null)
                    {
                        document = await _uploadFiles.UploadDocuments(request.File);

                        document.Question = question;

                        await _context.Documents.AddAsync(document);

                        if (await _context.SaveChangesAsync() < 1)
                        {
                            await transaction.RollbackAsync();

                            throw new RestException(HttpStatusCode.BadRequest, "Error savig document changes");
                        }
                    }

                    await transaction.CommitAsync();

                    // var mapper = _customMapper.GetMapper();
                    // var questionDto = mapper.Map<QuestionDto>(question);


                    var documentUrl = new Document();

                    if (request.File != null)
                    {
                        documentUrl = await _documentsUrl.GetDocumentUrl(document, "Questions");
                    }

                    var options = await _context.Options
                                  .Where(x => x.Question == question)
                                  .Select(x => new OptionDto
                    {
                        Description = x.Description,
                        QuestionId  = question.Id
                    })
                                  .ToListAsync();

                    return(new QuestionDto
                    {
                        Title = question.Title,
                        Required = question.Required,
                        Document = documentUrl,
                        InputType = inputType,
                        MultipleOptions = question.MultipleOptions,
                        Options = options,
                        QuizId = request.QuizId
                    });
                }
Exemplo n.º 3
0
            public async Task <QuizDto> Handle(GetQuizByTokenQuery request, CancellationToken cancellationToken)
            {
                var quiz = await _context.Quizzes
                           .Where(x => x.QuizToken == request.Token || x.EditToken == request.Token)
                           .Include(x => x.Category)
                           .Select(x => new QuizDto
                {
                    Id                = x.Id,
                    Category          = x.Category.Description,
                    CreatedAt         = x.CreatedAt,
                    UpdatedAt         = x.UpdatedAt,
                    Description       = x.Description,
                    QuizToken         = x.QuizToken,
                    NotificationEmail = x.NotificationEmail,
                    Title             = x.Title,
                    PublicAnswer      = x.PublicAnswer,
                    PublicQuiz        = x.PublicQuiz
                })
                           .FirstOrDefaultAsync();

                if (quiz == null)
                {
                    throw new RestException(HttpStatusCode.NotFound, "Quiz Not Found");
                }

                var questions = await _context.Questions
                                .Where(x => x.Quiz.Id == quiz.Id)
                                .Include(x => x.Documents)
                                .Include(x => x.InputType)
                                .Select(x => new QuestionDto
                {
                    Id              = x.Id,
                    QuizId          = quiz.Id,
                    InputType       = x.InputType,
                    MultipleOptions = x.MultipleOptions,
                    Required        = x.Required,
                    Title           = x.Title
                })
                                .ToListAsync();

                foreach (var question in questions)
                {
                    var document = new Document();
                    document = await _context.Documents
                               .Where(x => x.Question.Id == question.Id)
                               .FirstOrDefaultAsync();

                    if (document != null)
                    {
                        document = await _documentsUrl.GetDocumentUrl(document, "Questions");
                    }

                    question.Document = document;

                    var options = await _context.Options
                                  .Where(x => x.Question.Id == question.Id)
                                  .Select(x => new OptionDto
                    {
                        Id          = x.Id,
                        Description = x.Description,
                    })
                                  .ToListAsync();

                    question.Options = options;
                }

                // var mapper = _customMapper.GetMapper();
                // var quizDto = mapper.Map<QuizDto>(quiz);

                quiz.Questions = questions;

                return(quiz);
            }