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