public async Task ProcessEventIgnoresAttendanceEventIfNotFoundInCourseCatalog() { var mockSharepointManager = new MockSharepointManager(); var emptyCourseCatalog = new MockSharepointCourseCatalog(); const string listToStoreEvents = "Attendance Events"; mockSharepointManager.CreateList(listToStoreEvents, "", new List <string>()); const string courseIdNotInCatalog = "COMP0101"; var eventAggregator = new EventAggregator(mockSharepointManager, emptyCourseCatalog, new InMemoryLogger <EventAggregator>()); StudentEvent eventToStore = new StudentEvent { CourseID = courseIdNotInCatalog, EventType = EventType.Attendance, ActivityType = "Video", ActivityName = "Introductory Lesson", Timestamp = DateTime.UtcNow, Student = new Student { Email = "*****@*****.**", FirstName = "a", LastName = "b", ID = " 0" } }; await eventAggregator.ProcessEvent(eventToStore); var itemsInSharepointList = await mockSharepointManager.GetItemsFromList(listToStoreEvents); Assert.Empty(itemsInSharepointList); }
public void Update(StudentEvent studentEvent) { var entity = _studentEventRepository.Get(studentEvent.Id); StudentEventMapper.ToEntity(studentEvent, entity); _studentEventRepository.Update(entity); }
public async Task ProcessEvent(StudentEvent studentEvent) { //Check courseId exist in the coursecatalog if (_courseCatalog.CheckCourseIdExist(studentEvent.CourseID)) { if (studentEvent.EventType == EventType.Attendance) { // Check the corresponding list of this course according to Catalog. string targetList = _courseCatalog.GetListNameForCourse(studentEvent.CourseID); _logger.LogInformation("Event aggregator will send event to list {0}.", targetList); SharepointListItem eventItem = new SharepointListItem(); // Event Detailed Information. eventItem["Title"] = "Event by " + studentEvent.Student.Email; eventItem["CourseID"] = studentEvent.CourseID.ToUpper(); eventItem["StudentName"] = studentEvent.Student.FirstName + " (" + studentEvent.Student.LastName + ")"; eventItem["StudentID"] = studentEvent.Student.ID; eventItem["StudentEmail"] = studentEvent.Student.Email; eventItem["EventType"] = studentEvent.EventType.ToString(); eventItem["ActivityType"] = studentEvent.ActivityType; eventItem["ActivityName"] = studentEvent.ActivityName; eventItem["Timestamp"] = studentEvent.Timestamp; // Assign to different list by course ID. await _sharePointManager.AddItemToList(targetList, eventItem); } StoreInDatabase(studentEvent); } else { _logger.LogInformation($"Cannot find the courseId '{studentEvent.CourseID}', event aggregator has cancelled current event."); } }
public async Task <List <EventInfo> > GetEventInfo(StudentEvent e, CancellationToken cancellationToken = default) { var url = OscaUrlBuilder.EventInfoUrl(AccessTokens.SessionId, e.CourseID); var result = await GetParsed <EventInfoMessage>(url, cancellationToken); return(result.EventInfo); }
public async Task ProcessEvents(CaliperEventBatchDto caliperEventBatch) { var filteredCaliperEvents = caliperEventBatch.Data.Where(e => IsAboutStudent(e) && IsAboutCourse(e)); foreach (var caliperEvent in filteredCaliperEvents) { //TODO cleaner way to get firstname/lastname var studentName = caliperEvent.Actor.Name.Split(' ', 2); string caliperActivityType = caliperEvent.Object.ObjectType; string activityTypeWithoutUrl = caliperActivityType.Substring(caliperActivityType.LastIndexOf('/') + 1); var studentEvent = new StudentEvent { CourseID = caliperEvent.Group.Name, //TODO don't have this hardcoded in case of live lecture links EventType = EventType.Engagement, ActivityName = caliperEvent.Object.Name, ActivityType = activityTypeWithoutUrl, Student = new Student { ID = caliperEvent.Actor.Id, FirstName = studentName[0], LastName = studentName[1], Email = caliperEvent.Actor.Extensions.Email }, Timestamp = caliperEvent.EventTime }; await _eventAggregator.ProcessEvent(studentEvent); } }
public async Task <IActionResult> GenerateEvent() { if (!_enabled) { return(NotFound()); } StudentEvent testEvent = new StudentEvent { CourseID = "COMP0199", // Course ID Upper case. Timestamp = DateTime.UtcNow, EventType = EventType.Attendance, ActivityType = "Video", ActivityName = "Weekly Lecture", Student = new Student { Email = "*****@*****.**", FirstName = "Vcdin", LastName = "Zard", ID = "202001955" } }; await _eventAggregator.ProcessEvent(testEvent); return(Ok(testEvent)); }
public async Task ProcessEvents(CaliperEventBatchDto caliperEventBatch) { var filteredCaliperEvents = caliperEventBatch.Data.Where(e => IsAboutStudent(e) && IsAboutCourse(e)); foreach (var caliperEvent in filteredCaliperEvents) { string studentEmail = caliperEvent.Actor.Extensions.Email; string studentId = await _identityResolver.GetUserIdByEmail(studentEmail); if (studentId != null) { //TODO cleaner way to get firstname/lastname var studentName = caliperEvent.Actor.Name.Split(' ', 2); string caliperActivityType = caliperEvent.Object.ObjectType; string activityTypeWithoutUrl = caliperActivityType.Substring(caliperActivityType.LastIndexOf('/') + 1); var studentEvent = new StudentEvent { CourseID = caliperEvent.Group.Name, //TODO don't have this hardcoded in case of live lecture links EventType = activityTypeWithoutUrl == "zoom" || activityTypeWithoutUrl == "teams" ? EventType.Attendance : EventType.Engagement, ActivityName = caliperEvent.Object.Name, ActivityType = activityTypeWithoutUrl, Student = new Student { ID = studentId, FirstName = studentName[0], LastName = studentName[1], Email = studentEmail }, Timestamp = caliperEvent.EventTime }; await _eventAggregator.ProcessEvent(studentEvent); } else { _logger.LogError($"Event for student with email '{studentEmail}' ignored as no student ID could be resolved."); } } }
public async Task ProcessEventForgetToCreateList() { var mockSharepointManager = new MockSharepointManager(); var courseCatalog = new MockSharepointCourseCatalog(); string courseId = "COMP0101"; string listToStoreEvents = "Attendance Events"; courseCatalog.mockCatalog.Add(courseId, new CourseCatalogType { ListName = listToStoreEvents, JoinWebUrl = null }); bool eventListExist = mockSharepointManager.CheckListExists(listToStoreEvents); Assert.False(eventListExist); var eventAggregator = new EventAggregator(mockSharepointManager, courseCatalog, new InMemoryLogger <EventAggregator>()); StudentEvent eventToStore = new StudentEvent { CourseID = courseId, EventType = EventType.Attendance, ActivityType = "Video", ActivityName = "Introductory Lesson", Timestamp = DateTime.UtcNow, Student = new Student { Email = "*****@*****.**", FirstName = "a", LastName = "b", ID = " 0" } }; await eventAggregator.ProcessEvent(eventToStore); bool afterProcessEventListExist = mockSharepointManager.CheckListExists(listToStoreEvents); Assert.True(afterProcessEventListExist); }
public async Task ProcessEventDoesNotStoreEngagementEventOnSharepoint() { var mockSharepointManager = new MockSharepointManager(); var courseCatalog = new MockSharepointCourseCatalog(); string courseId = "COMP0101"; string listToStoreEvents = "Attendance Events"; courseCatalog.mockCatalog.Add(courseId, new CourseCatalogType { ListName = listToStoreEvents, JoinWebUrl = null }); mockSharepointManager.CreateList(listToStoreEvents, "", new List <string>()); var eventAggregator = new EventAggregator(mockSharepointManager, courseCatalog, new InMemoryLogger <EventAggregator>()); StudentEvent engagementEvent = new StudentEvent { CourseID = courseId, EventType = EventType.Engagement, ActivityType = "Video", ActivityName = "Introductory Lesson", Timestamp = DateTime.UtcNow, Student = new Student { Email = "*****@*****.**", FirstName = "a", LastName = "b", ID = " 0" } }; await eventAggregator.ProcessEvent(engagementEvent); var itemsInSharepointList = await mockSharepointManager.GetItemsFromList(listToStoreEvents); Assert.Empty(itemsInSharepointList); }
public ActionResult DeleteConfirmed(int id) { StudentEvent studentEvent = db.StudentEvents.Find(id); db.StudentEvents.Remove(studentEvent); db.SaveChanges(); return(RedirectToAction("Index")); }
private GradePostedIntegrationEvent MapGradePostedIntegrationEvent(StudentEvent studentEvent) => new GradePostedIntegrationEvent(studentEvent.UserId, studentEvent.MessageTypeId, studentEvent.Published ?? DateTime.UtcNow) { Grade = studentEvent.Content.FirstOrDefault(e => e.Key.Equals("Grade", StringComparison.InvariantCultureIgnoreCase))?.Value ?? string.Empty, CoursePrefix = studentEvent.Content.FirstOrDefault(e => e.Key.Equals("CoursePrefix", StringComparison.InvariantCultureIgnoreCase))?.Value ?? string.Empty, GradeType = studentEvent.Content.FirstOrDefault(e => e.Key.Equals("GradeType", StringComparison.InvariantCultureIgnoreCase))?.Value ?? string.Empty, Points = studentEvent.Content.FirstOrDefault(e => e.Key.Equals("Points", StringComparison.InvariantCultureIgnoreCase))?.Value ?? string.Empty, PointsPossible = studentEvent.Content.FirstOrDefault(e => e.Key.Equals("PointsPossible", StringComparison.InvariantCultureIgnoreCase))?.Value ?? string.Empty };
private void StoreInDatabase(StudentEvent studentEvent) { _logger.LogInformation(studentEvent.ToString()); DatabaseConnect connect = new DatabaseConnect(); connect.StoreStudentToDatabase(studentEvent); connect.StoreEventToDatabase(studentEvent); }
public void Create(StudentEvent studentEvent) { var entity = new StudentEventEntity(); StudentEventMapper.ToEntity(studentEvent, entity); _studentEventRepository.Create(entity); studentEvent.Id = entity.Id; }
public static void ToEntity(StudentEvent vm, StudentEventEntity entity) { entity.Name = vm.Name; entity.Description = vm.Description; entity.StartDate = vm.StartDate; entity.EndDate = vm.EndDate; entity.Maximum = vm.Maximum; entity.VenueId = vm.Venue.Id; }
public Task LoadAnnouncementsFor(StudentEvent studentEvent, bool show) { var mapping = new AnnouncementEventMapping { EventId = studentEvent.CourseID, ShowInAnnouncements = show }; return(_connection.InsertOrReplaceAsync(mapping)); }
public void SendSpenl() { Console.WriteLine("准备调用send"); var request = new StudentResgistCommand("sdf"); _executor.Execute(request); var eventinfo = new StudentEvent(); //调用事件 _bus.Puslish(eventinfo); }
private async Task StoreEventInDatabase(StudentEvent studentEvent) { using (var scope = _scope.CreateScope()) { var db = scope.ServiceProvider.GetService <DatabaseConnect>(); await db.StoreStudentToDatabase(studentEvent); await db.StoreEventToDatabase(studentEvent); } }
public IActionResult AddStudentEvent(StudentEvent studentEvent) { var wasSucessful = _studentEventRepository.AddStudentEvent(studentEvent); if (wasSucessful) { return(Ok()); } return(Forbid()); }
public ActionResult Edit([Bind(Include = "ID,studentID,eventID")] StudentEvent studentEvent) { if (ModelState.IsValid) { db.Entry(studentEvent).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } ViewBag.eventID = new SelectList(db.Events, "ID", "eventName", studentEvent.eventID); ViewBag.studentID = new SelectList(db.Students, "ID", "firstName", studentEvent.studentID); return(View(studentEvent)); }
public Task DownloadFile(CourseFile file, StudentEvent studentEvent) { var path = file.ServerRelativeUrl.Replace(Path.GetFileName(file.ServerRelativeUrl), ""); // Path.Combine(,) ist komisch wenn der zweite Pfad mit einem PathSeperator anfängt :/ // siehe dazu https://docs.microsoft.com/de-de/dotnet/api/system.io.path.combine?view=netframework-4.7.2 path = path.Substring(1); path = Path.Combine(studentEvent.CourseName, path); var destination = Path.Combine(GetFileStoragePath(), path); return(_oscaWebService.DowloadFile(file.DownloadUrl, destination, Path.GetFileName(file.ServerRelativeUrl))); }
public void StoreStudentToDatabase(StudentEvent studentEvent) { string sql = "INSERT INTO student(id, first_name, last_name,email) VALUES(@ID, @first_name, @last_name,@studentEmail)"; MySqlParameter[] parameters = { new MySqlParameter("@ID", studentEvent.Student.ID), new MySqlParameter("@first_name", studentEvent.Student.FirstName), new MySqlParameter("@last_name", studentEvent.Student.LastName), new MySqlParameter("@studentEmail", studentEvent.Student.Email) }; AddInfoToDatabase(sql, parameters); Console.WriteLine("student: {0} {1} has been added into database", studentEvent.Student.FirstName, studentEvent.Student.LastName); }
// GET: StudentEvents/Delete/5 public ActionResult Delete(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } StudentEvent studentEvent = db.StudentEvents.Find(id); if (studentEvent == null) { return(HttpNotFound()); } return(View(studentEvent)); }
public async Task StoreStudentToDatabase(StudentEvent studentEvent) { string sql = "INSERT INTO student(id, first_name, last_name,email) VALUES(@ID, @first_name, @last_name,@studentEmail) ON CONFLICT DO NOTHING"; NpgsqlParameter[] parameters = { new NpgsqlParameter("@ID", studentEvent.Student.ID), new NpgsqlParameter("@first_name", studentEvent.Student.FirstName), new NpgsqlParameter("@last_name", studentEvent.Student.LastName), new NpgsqlParameter("@studentEmail", studentEvent.Student.Email) }; await AddInfoToDatabase(sql, parameters); }
static void Main(string[] args) { Console.WriteLine("Hello World!"); var factory = new ConnectionFactory() { HostName = "localhost" }; using (IConnection connection = factory.CreateConnection()) using (IModel channel = connection.CreateModel()) { channel.QueueDeclare(queue: "StudentSave", //Queue kuyrukta hangi isimde tutulacağı bilgisi operasyon istek zamanı gönderilebilir durable: false, // ile in-memory mi yoksa fiziksel olarak mı saklanacağı belirlenir. exclusive: false, // yalnızca bir bağlantı tarafından kullanılır ve bu bağlantı kapandığında sıra silinir - özel olarak işaretlenirse silinmez autoDelete: false, // en son bir abonelik iptal edildiğinde en az bir müşteriye sahip olan kuyruk silinir arguments: null); // isteğe bağlı; eklentiler tarafından kullanılır ve TTL mesajı, kuyruk uzunluğu sınırı, vb. var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; var message = Encoding.UTF8.GetString(body.ToArray()); StudentCommon st = JsonConvert.DeserializeObject <StudentCommon>(message); //Herhangi bir tipte gönderilebilir where koşullaırına uyan Console.WriteLine($" Adı: {st.Name} Soyadı:{st.LastName} Yaş:{st.Age}"); }; channel.BasicConsume(queue: "StudentSave", //Queue kuyrukta hangi isimde tutulacağı bilgisi operasyon istek zamanı gönderilebilir. autoAck: false, /* autoAck: bir mesajı aldıktan sonra bunu anladığına * dair(acknowledgment) kuyruğa bildirimde bulunur ya da timeout gibi vakalar oluştuğunda * mesajı geri çevirmek(Discard) veya yeniden kuyruğa aldırmak(Re-Queue) için dönüşler yapar*/ consumer: consumer); Console.WriteLine(" Kaydınız Yapıldı. Teşekkürler :)"); StudentEvent studentEvent = new StudentEvent() { Result = "Başarılı" }; string message = JsonConvert.SerializeObject(studentEvent); var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish(exchange: "", routingKey: "StudentSaveEvent", basicProperties: null, body: body); Console.ReadLine(); //try catch ile veya farklı algoritmalarınızla loglama yapılabilir } }
// [HttpPost] public async Task <IActionResult> ChooseEventB(EventModel model) { // var Event = from crs in db.Events where crs.EventId == model.EventId select crs; // EventModel crs = Event[0]; var evt = db.Events.SingleOrDefault(e => e.EventId == model.EventId); if (evt.OccupiedSeats >= evt.NumberOfSeats) { TempData["Message"] = "The event is full!"; // return View(); return(RedirectToAction("ChooseEvent", "Event")); } evt.OccupiedSeats += 1; var us = await GetCurrentUserAsync(); var check = db.StudentEvents.SingleOrDefault(l => l.EventId == model.EventId && l.ApplicationUser == us); if (check != null) { TempData["Message"] = "Duplicated Enrollment!"; // return View("ChooseEvent"); return(RedirectToAction("ChooseEvent", "Event")); } StudentEvent scs = new StudentEvent(); scs.EventId = model.EventId; scs.ApplicationUser = us; db.StudentEvents.Add(scs); db.SaveChanges(); ScheduleEmail send = new ScheduleEmail(db); send.getEvent(); // return PartialView("part",_model); return(RedirectToAction("ChooseEvent", "Event")); // return View(db.Events.ToList()); }
// GET: StudentEvents/Edit/5 public ActionResult Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } StudentEvent studentEvent = db.StudentEvents.Find(id); if (studentEvent == null) { return(HttpNotFound()); } ViewBag.eventID = new SelectList(db.Events, "ID", "eventName", studentEvent.eventID); ViewBag.studentID = new SelectList(db.Students, "ID", "firstName", studentEvent.studentID); return(View(studentEvent)); }
private SharepointListItem PackEventItem(StudentEvent studentEvent) { SharepointListItem eventItem = new SharepointListItem(); // Event Detailed Information. eventItem[EVENT_LIST_COURSE_ID] = studentEvent.CourseID.ToUpper(); eventItem[EVENT_LIST_STUDENT_NAME] = studentEvent.Student.LastName + ", " + studentEvent.Student.FirstName; eventItem[EVENT_LIST_STUDENT_EMAIL] = studentEvent.Student.Email; eventItem[EVENT_LIST_STUDENT_ID] = studentEvent.Student.ID; eventItem[EVENT_LIST_ACTIVITY_TYPE] = studentEvent.ActivityType; eventItem[EVENT_LIST_ACTIVITY_NAME] = studentEvent.ActivityName; eventItem[EVENT_LIST_TIMESTAMP] = studentEvent.Timestamp; _logger.LogDebug("Event by {0} has been packed.", studentEvent.Student.FirstName); return(eventItem); }
public void StoreEventToDatabase(StudentEvent studentEvent) { string sql = "INSERT INTO event(student_ID, course_ID, Timestamp, event_type, activity_name, activity_details) VALUES(@student_ID,@course_ID, @Timestamp, @event_type, @activity_name, @activity_details)"; MySqlParameter[] parameters = { new MySqlParameter("@student_ID", studentEvent.Student.ID), new MySqlParameter("@course_ID", studentEvent.CourseID), new MySqlParameter("@Timestamp", studentEvent.Timestamp), new MySqlParameter("@event_type", studentEvent.EventType), new MySqlParameter("@activity_name", studentEvent.ActivityName), new MySqlParameter("@activity_details", studentEvent.ActivityType) }; AddInfoToDatabase(sql, parameters); Console.WriteLine("event of student {0} has been added into database", studentEvent.Student.ID); }
public async Task StoreEventToDatabase(StudentEvent studentEvent) { string sql = "INSERT INTO event(student_ID, course_ID, Timestamp, event_type, activity_name, activity_details) VALUES(@student_ID,@course_ID, @Timestamp, @event_type, @activity_name, @activity_details)"; NpgsqlParameter[] parameters = { new NpgsqlParameter("@student_ID", studentEvent.Student.ID), new NpgsqlParameter("@course_ID", studentEvent.CourseID), new NpgsqlParameter("@Timestamp", studentEvent.Timestamp), new NpgsqlParameter("@event_type", studentEvent.EventType.ToString()), new NpgsqlParameter("@activity_name", studentEvent.ActivityName), new NpgsqlParameter("@activity_details", studentEvent.ActivityType) }; await AddInfoToDatabase(sql, parameters); }
public async Task ProcessEvent(ResourciumEventDto manualAttendanceEvent) { StudentEvent convertedEvent = new StudentEvent { CourseID = MANUAL_ATTENDANCE_COURSE_ID, Student = new Student { ID = manualAttendanceEvent.Student.ID, Email = manualAttendanceEvent.Student.Email, FirstName = manualAttendanceEvent.Student.FirstName, LastName = manualAttendanceEvent.Student.LastName }, Timestamp = manualAttendanceEvent.Timestamp, EventType = EventType.Attendance }; await _eventAggregator.ProcessEvent(convertedEvent); }