using System; using System.Text; using System.Linq; using System.Threading.Tasks; using System.Collections.Generic; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using AyaNova.Models; using AyaNova.Util; namespace AyaNova.Biz { internal static class EventLogProcessor { /// /// Add an entry to the log /// /// /// /// /// internal static void LogEventToDatabase(Event newEvent, AyContext ct) { ct.Event.Add(newEvent); ct.SaveChanges(); } /// /// Handle delete /// remove all prior entries for object, add one deleted entry /// /// /// /// /// /// internal static void DeleteObject(long userId, AyaType ayType, long ayId, string textra, AyContext ct) { ct.Database.ExecuteSqlCommand($"delete from aevent where aytype = {ayType} and ayid={ayId}"); ct.Event.Add(new Event(userId, ayId, ayType, AyaEvent.Deleted, textra)); } /// /// Get the event log for a specified object /// Presentation is the client's responsibility (localization internationalization etc) /// internal static async Task GetLogForObject(AyaNova.Api.Controllers.EventLogController.EventLogOptions opt, AyContext ct) { //This is also an example of conditional where statements //Set up the query var q = ct.Event.Select(m => m); q = q.Where(m => m.AyId == opt.AyId); if (opt.StartDate != null) q = q.Where(m => m.Created > opt.StartDate); if (opt.EndDate != null) q = q.Where(m => m.Created < opt.EndDate); q = q.OrderBy(m => m.Created); //Execute the query var EventItems = await q.ToArrayAsync(); //convert the Event array to the correct return type array var ret = EventItems.Select(m => new AyaNova.Api.Controllers.EventLogController.ObjectEventLogItem() { Date = m.Created, UserId = m.UserId, Event = m.AyEvent, Textra = m.Textra }).ToArray(); return ret; } /// /// Get the event log for a specified User /// Presentation is the client's responsibility (localization internationalization etc) /// internal static async Task GetLogForUser(AyaNova.Api.Controllers.EventLogController.EventLogOptions opt, AyContext ct) { //Set up the query var q = ct.Event.Select(m => m); q = q.Where(m => m.UserId == opt.AyId); if (opt.StartDate != null) q = q.Where(m => m.Created > opt.StartDate); if (opt.EndDate != null) q = q.Where(m => m.Created < opt.EndDate); q = q.OrderBy(m => m.Created); //Execute the query var EventItems = await q.ToArrayAsync(); //convert the Event array to the correct return type array var ret = EventItems.Select(m => new AyaNova.Api.Controllers.EventLogController.UserEventLogItem() { Date = m.Created, ObjectType = m.AyType, ObjectId = m.AyId, Event = m.AyEvent, Textra = m.Textra }).ToArray(); return ret; } ///////////////////////////////////////////////////////////////////// }//eoc }//eons