using Lactose.Context; using Lactose.Models; namespace Lactose.Repositories; /// public class FolderRepository(LactoseDbContext context) : IFolderRepository, IAsyncDisposable { /// /// Occurs when a folder is added. /// public static event EventHandler? FolderAdded; static void OnFolderAdded(Folder e) => FolderAdded?.Invoke(null, e); /// /// Occurs when a folder is removed. /// public static event EventHandler? FolderRemoved; static void OnFolderRemoved(Folder e) => FolderRemoved?.Invoke(null, e); /// public void Insert(Folder folder) { context.Folders.Add(folder); context.SaveChanges(); if (folder.Active) OnFolderAdded(folder); } /// public void Update(Guid id, Folder folder) { var origFolder = context.Folders.Find(id); if (origFolder == null) { return; } var oldPath = origFolder; var hasChanged = origFolder.BasePath != folder.BasePath; var wasActive = origFolder.Active; origFolder.BasePath = folder.BasePath; origFolder.Active = folder.Active; context.Folders.Update(origFolder); context.SaveChanges(); if (hasChanged && wasActive) OnFolderRemoved(oldPath); if (hasChanged && folder.Active) {} if (folder.Active) OnFolderAdded(origFolder); else OnFolderRemoved(origFolder); } /// public void Remove(Guid id) { var folder = context.Folders.Find(id); if (folder != null) { context.Folders.Remove(folder); OnFolderRemoved(folder); } context.SaveChanges(); } /// public IEnumerable GetAllUntracked() => context.Folders.AsNoTracking(); /// public Folder? Get(Guid id) => context.Folders.Find(id); /// public IEnumerable GetAll() => context.Folders; /// public void Dispose() => context.Dispose(); /// public async ValueTask DisposeAsync() => await context.DisposeAsync(); }