コード例 #1
0
            public async Task <Result <Contract> > Handle(Contract request, CancellationToken cancellationToken)
            {
                if (request.UserRole == "Secretary" || request.UserRole == "Recruiter")
                {
                    return(Result.Fail <Contract>("Acesso Negado"));
                }

                var mId    = ObjectId.Parse(request.ModuleId);
                var userId = ObjectId.Parse(request.UserId);

                var module = await _db.ModuleDraftCollection.AsQueryable()
                             .Where(x => (
                                        x.DeletedAt == null || x.DeletedAt == DateTimeOffset.MinValue
                                        ) && !x.DraftPublished && (
                                        x.Id == mId || x.ModuleId == mId
                                        )
                                    )
                             .FirstOrDefaultAsync(cancellationToken: cancellationToken);

                if (module == null)
                {
                    return(Result.Fail <Contract>("Módulo não Encontrado"));
                }

                if (request.UserRole == "Student")
                {
                    if (!ModuleDraft.IsInstructor(module, userId).Data)
                    {
                        return(Result.Fail <Contract>("Acesso Negado"));
                    }
                }

                var subject = module.Subjects.FirstOrDefault(x =>
                                                             x.Id == ObjectId.Parse(request.SubjectId)
                                                             );

                if (subject == null)
                {
                    return(Result.Fail <Contract>("Assunto não Encontrado"));
                }

                var answers = request.Answers.Select(x =>
                                                     new Answer(
                                                         x.Description, x.Points,
                                                         x.Concepts.Select(y => new AnswerConcept(y.Concept, y.IsRight)).ToList()
                                                         )
                                                     ).ToList();

                Result <QuestionDraft> newObject;

                if (!String.IsNullOrEmpty(request.QuestionId))
                {
                    var questionId = ObjectId.Parse(request.QuestionId);

                    newObject = QuestionDraft.Create(
                        questionId, module.Id, request.Text, request.Level, request.Duration,
                        request.Concepts, answers, module.ModuleId, ObjectId.Parse(request.SubjectId)
                        );
                }
                else
                {
                    newObject = QuestionDraft.Create(
                        module.Id, request.Text, request.Level, request.Duration,
                        request.Concepts, answers, module.ModuleId, ObjectId.Parse(request.SubjectId)
                        );
                }

                if (newObject.IsFailure)
                {
                    return(Result.Fail <Contract>(newObject.Error));
                }

                var newQuestion     = newObject.Data;
                var newQuestionList = new List <QuestionDraft>
                {
                    newQuestion
                };


                if (string.IsNullOrEmpty(request.Id))
                {
                    await _db.QuestionDraftCollection.InsertOneAsync(
                        newQuestion,
                        cancellationToken : cancellationToken
                        );

                    request.Id = newQuestion.Id.ToString();

                    var creationLog = AuditLog.Create(userId, mId, newQuestionList[0].GetType().ToString(),
                                                      JsonConvert.SerializeObject(newQuestionList), EntityAction.Add);

                    await _db.AuditLogCollection.InsertOneAsync(creationLog);
                }
                else
                {
                    var question = await _db.QuestionDraftCollection
                                   .AsQueryable()
                                   .Where(x => x.Id == ObjectId.Parse(request.Id))
                                   .FirstOrDefaultAsync(cancellationToken: cancellationToken);

                    if (question == null)
                    {
                        return(Result.Fail <Contract>("Questão não Encontrada"));
                    }

                    var oldQuestionList = new List <QuestionDraft>
                    {
                        question
                    };
                    var oldValues = JsonConvert.SerializeObject(oldQuestionList);

                    question.ModuleId  = newQuestion.ModuleId;
                    question.SubjectId = newQuestion.SubjectId;
                    question.Concepts  = newQuestion.Concepts;
                    question.Answers   = newQuestion.Answers;
                    question.Duration  = newQuestion.Duration;
                    question.Level     = newQuestion.Level;
                    question.Text      = newQuestion.Text;
                    question.UpdatedAt = DateTimeOffset.UtcNow;

                    await _db.QuestionDraftCollection.ReplaceOneAsync(t =>
                                                                      t.Id == question.Id, question,
                                                                      cancellationToken : cancellationToken
                                                                      );

                    var changeLog = AuditLog.Create(userId, mId, newQuestionList[0].GetType().ToString(),
                                                    JsonConvert.SerializeObject(newQuestionList), EntityAction.Update, oldValues);

                    await _db.AuditLogCollection.InsertOneAsync(changeLog);
                }

                return(Result.Ok(request));
            }
コード例 #2
0
            public async Task <Result> Handle(Contract request, CancellationToken cancellationToken)
            {
                if (request.UserRole != "Admin" && request.UserRole != "Author")
                {
                    return(Result.Fail("Acesso Negado"));
                }

                var userId  = ObjectId.Parse(request.UserId);
                var draftId = ObjectId.Parse(request.ModuleId);

                var module = await _db.ModuleDraftCollection.AsQueryable()
                             .Where(x => (
                                        x.DeletedAt == null || x.DeletedAt == DateTimeOffset.MinValue
                                        ) && !x.DraftPublished && (
                                        x.Id == draftId || x.ModuleId == draftId
                                        )
                                    )
                             .FirstOrDefaultAsync();

                if (module == null)
                {
                    return(Result.Fail("Rascunho de Módulo não encontrado"));
                }


                if (module.CreatedBy != userId)
                {
                    return(Result.Fail("Você não tem permissão de excluir o módulo selecionado."));
                }

                if (request.UserRole == "Student")
                {
                    if (!ModuleDraft.IsInstructor(module, userId).Data)
                    {
                        return(Result.Fail("Acesso Negado"));
                    }
                }

                module.DeletedBy = ObjectId.Parse(request.UserId);
                module.DeletedAt = DateTimeOffset.Now;

                await _db.ModuleDraftCollection.ReplaceOneAsync(t =>
                                                                t.Id == module.Id, module,
                                                                cancellationToken : cancellationToken
                                                                );

                var oldDraftList = new List <ModuleDraft>
                {
                    module
                };

                var changeLog = AuditLog.Create(userId, draftId, module.GetType().ToString(),
                                                "", EntityAction.Delete, JsonConvert.SerializeObject(oldDraftList));

                await _db.AuditLogCollection.InsertOneAsync(changeLog);

                var questionDrafts = await _db.QuestionDraftCollection.AsQueryable()
                                     .Where(d => d.ModuleId == module.ModuleId && !d.DraftPublished)
                                     .ToListAsync();

                if (questionDrafts.Count > 0)
                {
                    var update = Builders <QuestionDraft> .Update
                                 .Set(d => d.DeletedAt, DateTimeOffset.Now)
                                 .Set(d => d.DeletedBy, ObjectId.Parse(request.UserId));

                    var ids = questionDrafts.Select(x => x.Id).ToArray();

                    await _db.QuestionDraftCollection.UpdateManyAsync(x =>
                                                                      ids.Contains(x.Id), update,
                                                                      cancellationToken : cancellationToken
                                                                      );
                }

                return(Result.Ok());
            }