Exemple #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"));
                }

                ObjectId instructorId = String.IsNullOrEmpty(request.InstructorId) ? ObjectId.Empty : ObjectId.Parse(request.InstructorId);
                var      tutorsIds    = request.TutorsIds != null?request.TutorsIds.Select(x => ObjectId.Parse(x)).ToList() :
                                            new List <ObjectId>();

                var eventResult = Event.Create(
                    request.Title,
                    request.Excerpt,
                    request.ImageUrl,
                    instructorId,
                    request.Instructor,
                    request.InstructorMiniBio,
                    request.InstructorImageUrl,
                    request.Tags,
                    request.VideoUrl,
                    request.VideoDuration,
                    request.Duration,
                    request.CertificateUrl,
                    tutorsIds,
                    request.StoreUrl,
                    request.ForceProblemStatement
                    );

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

                var newEvent = eventResult.Data;

                newEvent.PrepQuizQuestionList = new List <PrepQuizQuestion>();

                if (request.PrepQuizQuestionList != null && request.PrepQuizQuestionList.Count > 0)
                {
                    var questions = request.PrepQuizQuestionList.Select(x => x.Question).ToArray();

                    for (int i = 0; i < request.PrepQuizQuestionList.Count; i++)
                    {
                        var prepQuizResult = PrepQuizQuestion.Create(request.PrepQuizQuestionList[i].Question, request.PrepQuizQuestionList[i].FileAsAnswer, questions);
                        if (prepQuizResult.IsFailure)
                        {
                            return(Result.Fail <Contract>(prepQuizResult.Error));
                        }
                        newEvent.PrepQuizQuestionList.Add(prepQuizResult.Data);
                    }
                }

                if (string.IsNullOrEmpty(request.Id))
                {
                    if (request.UserRole == "Student")
                    {
                        return(Result.Fail <Contract>("Acesso Negado"));
                    }

                    string config = _configuration[$"EcommerceIntegration:Active"];

                    if (request.CreateInEcommerce.HasValue && request.CreateInEcommerce.Value && config == "True")
                    {
                        var response = await CreateEcommerceProduct(newEvent);

                        string content = await response.Content.ReadAsStringAsync();

                        if (response.StatusCode == HttpStatusCode.Created)
                        {
                            var parsed = JObject.Parse(content);
                            newEvent.EcommerceId = (long)parsed["product"]["id"];
                        }
                        else
                        {
                            var error = ErrorLog.Create(
                                ErrorLogTypeEnum.EcommerceIntegration,
                                "create-track", content
                                ).Data;

                            await _db.ErrorLogCollection.InsertOneAsync(
                                error, cancellationToken : cancellationToken
                                );
                        }
                    }

                    var newEventList = new List <Event>
                    {
                        newEvent
                    };

                    await _db.EventCollection.InsertOneAsync(
                        newEvent,
                        cancellationToken : cancellationToken
                        );

                    var creationLog = AuditLog.Create(ObjectId.Parse(request.UserId), newEvent.Id, newEvent.GetType().ToString(),
                                                      JsonConvert.SerializeObject(newEventList), EntityAction.Add);

                    await _db.AuditLogCollection.InsertOneAsync(creationLog);

                    request.Id          = newEvent.Id.ToString();
                    request.EcommerceId = newEvent.EcommerceId;
                }
                else
                {
                    var evt = await(await _db
                                    .Database
                                    .GetCollection <Event>("Events")
                                    .FindAsync(x => x.Id == ObjectId.Parse(request.Id), cancellationToken: cancellationToken))
                              .FirstOrDefaultAsync(cancellationToken: cancellationToken);

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

                    if (request.UserRole == "Student")
                    {
                        var userId = ObjectId.Parse(request.UserId);

                        if (!evt.InstructorId.HasValue || evt.InstructorId.Value != userId)
                        {
                            return(Result.Fail <Contract>("Acesso Negado"));
                        }
                    }

                    var oldEventList = JsonConvert.SerializeObject(new List <Event>
                    {
                        newEvent
                    });

                    evt.Title              = newEvent.Title;
                    evt.Excerpt            = newEvent.Excerpt;
                    evt.ImageUrl           = newEvent.ImageUrl;
                    evt.InstructorId       = newEvent.InstructorId;
                    evt.Instructor         = newEvent.Instructor;
                    evt.InstructorMiniBio  = newEvent.InstructorMiniBio;
                    evt.InstructorImageUrl = newEvent.InstructorImageUrl;
                    evt.Tags                  = newEvent.Tags;
                    evt.VideoUrl              = newEvent.VideoUrl;
                    evt.VideoDuration         = newEvent.VideoDuration;
                    evt.Duration              = newEvent.Duration;
                    evt.PrepQuiz              = newEvent.PrepQuiz;
                    evt.CertificateUrl        = newEvent.CertificateUrl;
                    evt.TutorsIds             = newEvent.TutorsIds;
                    evt.StoreUrl              = newEvent.StoreUrl;
                    evt.EcommerceId           = request.EcommerceId;
                    evt.PrepQuizQuestionList  = newEvent.PrepQuizQuestionList;
                    evt.ForceProblemStatement = newEvent.ForceProblemStatement;

                    await _db.EventCollection.ReplaceOneAsync(t =>
                                                              t.Id == evt.Id, evt,
                                                              cancellationToken : cancellationToken
                                                              );

                    var newEventList = new List <Event>
                    {
                        evt
                    };

                    var changeLog = AuditLog.Create(ObjectId.Parse(request.UserId), evt.Id, evt.GetType().ToString(),
                                                    JsonConvert.SerializeObject(newEventList), EntityAction.Update, oldEventList);

                    await _db.AuditLogCollection.InsertOneAsync(changeLog);

                    if (evt.EcommerceId.HasValue)
                    {
                        string config = _configuration[$"EcommerceIntegration:Active"];
                        if (config == "True")
                        {
                            await UpdateEcommerceProduct(evt);
                        }
                    }
                }

                return(Result.Ok(request));
            }
Exemple #2
0
            public async Task <Result <Contract> > Handle(Contract request, CancellationToken cancellationToken)
            {
                if (request.UserRole == "Secretary")
                {
                    return(Result.Fail <Contract>("Acesso Negado"));
                }

                var evId = ObjectId.Parse(request.Id);

                var dbEvent = await _db.EventDraftCollection.AsQueryable()
                              .Where(x => (
                                         x.DeletedAt == null || x.DeletedAt == DateTimeOffset.MinValue
                                         ) && !x.DraftPublished && (
                                         x.Id == evId || x.EventId == evId
                                         )
                                     )
                              .FirstOrDefaultAsync(cancellationToken: cancellationToken);

                Duration duration = null;

                if (request.Duration.HasValue)
                {
                    var durationResult = Duration.Create(request.Duration.Value);
                    if (durationResult.IsFailure)
                    {
                        return(Result.Fail <Contract>(durationResult.Error));
                    }

                    duration = durationResult.Data;
                }

                Duration videoDuration = null;

                if (request.VideoDuration.HasValue)
                {
                    var durationResult = Duration.Create(request.VideoDuration.Value);
                    if (durationResult.IsFailure)
                    {
                        return(Result.Fail <Contract>(durationResult.Error));
                    }

                    videoDuration = durationResult.Data;
                }

                ObjectId instructorId = String.IsNullOrEmpty(request.InstructorId) ?
                                        ObjectId.Empty : ObjectId.Parse(request.InstructorId);

                var tutorsIds = request.TutorsIds != null?
                                request.TutorsIds.Select(x => ObjectId.Parse(x)).ToList() :
                                    new List <ObjectId>();

                var eventResult = Event.Create(
                    request.Title,
                    request.Excerpt,
                    request.ImageUrl,
                    instructorId,
                    request.Instructor,
                    request.InstructorMiniBio,
                    request.InstructorImageUrl,
                    request.Tags,
                    request.VideoUrl,
                    request.VideoDuration,
                    request.Duration,
                    request.CertificateUrl,
                    tutorsIds,
                    request.StoreUrl,
                    request.ForceProblemStatement
                    );

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

                var newEvent = eventResult.Data;

                newEvent.PrepQuizQuestionList = new List <PrepQuizQuestion>();

                if (request.PrepQuizQuestionList != null && request.PrepQuizQuestionList.Count > 0)
                {
                    var questions = request.PrepQuizQuestionList.Select(x => x.Question).ToArray();

                    for (int i = 0; i < request.PrepQuizQuestionList.Count; i++)
                    {
                        var prepQuizResult = PrepQuizQuestion.Create(request.PrepQuizQuestionList[i].Question, request.PrepQuizQuestionList[i].FileAsAnswer, questions);
                        if (prepQuizResult.IsFailure)
                        {
                            return(Result.Fail <Contract>(prepQuizResult.Error));
                        }
                        newEvent.PrepQuizQuestionList.Add(prepQuizResult.Data);
                    }
                }

                var oldEventList = JsonConvert.SerializeObject(new List <EventDraft>
                {
                    dbEvent
                });

                if (dbEvent == null)
                {
                    var originalEvent = await GetEvent(request.Id);

                    if (originalEvent == null)
                    {
                        return(Result.Fail <Contract>("Evento não existe"));
                    }

                    dbEvent = await CreateEventDraft(
                        request, originalEvent, duration, videoDuration, cancellationToken
                        );
                }
                else
                {
                    dbEvent.Title              = newEvent.Title;
                    dbEvent.Excerpt            = newEvent.Excerpt;
                    dbEvent.ImageUrl           = newEvent.ImageUrl;
                    dbEvent.InstructorId       = newEvent.InstructorId;
                    dbEvent.Instructor         = newEvent.Instructor;
                    dbEvent.InstructorMiniBio  = newEvent.InstructorMiniBio;
                    dbEvent.InstructorImageUrl = newEvent.InstructorImageUrl;
                    dbEvent.Tags                  = newEvent.Tags;
                    dbEvent.VideoUrl              = newEvent.VideoUrl;
                    dbEvent.VideoDuration         = newEvent.VideoDuration;
                    dbEvent.Duration              = newEvent.Duration;
                    dbEvent.PrepQuiz              = newEvent.PrepQuiz;
                    dbEvent.CertificateUrl        = newEvent.CertificateUrl;
                    dbEvent.TutorsIds             = newEvent.TutorsIds;
                    dbEvent.StoreUrl              = newEvent.StoreUrl;
                    dbEvent.CreateInEcommerce     = request.CreateInEcommerce.HasValue ? request.CreateInEcommerce.Value : false;
                    dbEvent.EcommerceId           = request.EcommerceId;
                    dbEvent.ForceProblemStatement = request.ForceProblemStatement;
                    dbEvent.PrepQuizQuestionList  = newEvent.PrepQuizQuestionList;

                    await _db.EventDraftCollection.ReplaceOneAsync(t =>
                                                                   t.Id == dbEvent.Id, dbEvent,
                                                                   cancellationToken : cancellationToken
                                                                   );

                    var newEventList = new List <EventDraft>
                    {
                        dbEvent
                    };

                    var changeLog = AuditLog.Create(ObjectId.Parse(request.UserId), dbEvent.Id, dbEvent.GetType().ToString(),
                                                    JsonConvert.SerializeObject(newEventList), EntityAction.Update, oldEventList);

                    await _db.AuditLogCollection.InsertOneAsync(changeLog);
                }

                return(Result.Ok(request));
            }
Exemple #3
0
            public async Task <Result <EventItem> > Handle(Contract request, CancellationToken cancellationToken)
            {
                var evtId = ObjectId.Parse(request.Id);
                var qry   = await _db.Database
                            .GetCollection <EventItem>("Events")
                            .FindAsync(x => x.Id == evtId, cancellationToken: cancellationToken);

                var evt = await qry.FirstOrDefaultAsync(cancellationToken : cancellationToken);

                if (evt == null)
                {
                    return(Result.Fail <EventItem>("Evento não existe"));
                }

                if (request.SimpleQuery != null && request.SimpleQuery == "true")
                {
                    return(Result.Ok(evt));
                }

                evt.Requirements = evt.Requirements ?? new List <RequirementItem>();
                foreach (var req in evt.Requirements.ToList())
                {
                    var mod = (await(await _db
                                     .Database
                                     .GetCollection <ModuleNameItem>("Modules")
                                     .FindAsync(x => x.Id == req.ModuleId, cancellationToken: cancellationToken))
                               .FirstOrDefaultAsync(cancellationToken: cancellationToken));
                    if (mod == null)
                    {
                        evt.Requirements.Remove(req);
                        continue;
                    }

                    req.Title            = mod.Title;
                    req.Level            = req.RequirementValue.Level;
                    req.Percentage       = req.RequirementValue.Percentage;
                    req.RequirementValue = null;
                }

                evt.Schedules = evt.Schedules ?? new List <EventScheduleItem>();
                foreach (var sch in evt.Schedules.ToList())
                {
                    var eveapp = _db
                                 .Database
                                 .GetCollection <EventApplication>("EventApplications")
                                 .AsQueryable()
                                 .Where(x => x.EventId == evtId && x.ScheduleId == sch.Id)
                                 .ToList();

                    if (eveapp != null && eveapp.Count > 0)
                    {
                        sch.UsersTotal         = eveapp.Count;
                        sch.ApprovedUsersTotal = eveapp.Where(x => x.ApplicationStatus == ApplicationStatus.Approved).ToList().Count;
                        sch.RejectedUsersTotal = eveapp.Where(x => x.ApplicationStatus == ApplicationStatus.Rejected).ToList().Count;
                    }
                    else
                    {
                        sch.UsersTotal         = 0;
                        sch.ApprovedUsersTotal = 0;
                        sch.RejectedUsersTotal = 0;
                    }
                }

                //if (evt.PrepQuiz != null)
                //{
                //    evt.PrepQuizQuestions = evt.PrepQuiz.Questions.ToArray();
                //    evt.PrepQuiz = null;
                //}

                if (evt.PrepQuiz != null && (evt.PrepQuizQuestionList == null || evt.PrepQuizQuestionList.Count() == 0))
                {
                    evt.PrepQuizQuestionList = new List <PrepQuizQuestion>();
                    evt.PrepQuizQuestions    = evt.PrepQuiz.Questions.ToArray();

                    for (int i = 0; i < evt.PrepQuizQuestions.Length; i++)
                    {
                        var prepQuizResult = PrepQuizQuestion.Create(evt.PrepQuizQuestions[i], false, evt.PrepQuizQuestions);
                        if (prepQuizResult.IsFailure)
                        {
                            return(Result.Fail <EventItem>("Ocorreu um erro ao buscar as perguntas do evento."));
                        }

                        evt.PrepQuizQuestionList.Add(prepQuizResult.Data);
                    }

                    evt.PrepQuiz = null;
                }

                evt = await CheckTutors(evt, cancellationToken);


                return(Result.Ok(evt));
            }