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