BaseRepository takes an ILogger via its constructor and logs the failing file path and exception in Save's catch block before rethrowing. Every concrete repository takes ILogger<ThisRepo> and passes it up so failures are categorised by repository type. Pulls Microsoft.Extensions.Logging.Abstractions into the Db project. TransactionRepositoryTestShould and AccountRepositoryTestShould pass NullLogger<T>.Instance. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
75 lines
No EOL
2.3 KiB
C#
75 lines
No EOL
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Microsoft.Extensions.Logging;
|
|
using Schaad.Accounting.Interfaces;
|
|
using Schaad.Accounting.Models;
|
|
|
|
namespace Schaad.Accounting.Repositories
|
|
{
|
|
public class SubclassRepository : BaseRepository, ISubclassRepository
|
|
{
|
|
private readonly Dictionary<int, string> classes = new Dictionary<int, string>();
|
|
private readonly string SUBCLASSES = "SubClasses.xml";
|
|
|
|
public SubclassRepository(ISettingsService settingsService, RepositoryCache cache, ILogger<SubclassRepository> logger)
|
|
: base(settingsService, cache, logger)
|
|
{
|
|
EnsureFileExists(SUBCLASSES);
|
|
|
|
classes.Add(ClassIds.Activa, "Aktiven");
|
|
classes.Add(ClassIds.Passiva, "Passiven");
|
|
classes.Add(ClassIds.Income, "Einnahmen");
|
|
classes.Add(ClassIds.Expenses, "Ausgaben");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Load subclasses
|
|
/// </summary>
|
|
public List<SubClass> GetSubClassList() => LoadList<SubClass>(SUBCLASSES);
|
|
|
|
/// <summary>
|
|
/// Save a booking text (insert/update)
|
|
/// </summary>
|
|
public void SaveSubClass(SubClass subClass)
|
|
{
|
|
var subclasses = GetSubClassList();
|
|
var existingSubClass = subclasses.FirstOrDefault(a => a.Id == subClass.Id);
|
|
|
|
if (existingSubClass == null)
|
|
{
|
|
existingSubClass = new SubClass();
|
|
subclasses.Add(existingSubClass);
|
|
subClass.Id = Guid.NewGuid().ToString();
|
|
}
|
|
subClass.Copy(existingSubClass);
|
|
Save(subclasses, SUBCLASSES);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get subclass
|
|
/// </summary>
|
|
public SubClass GetSubClass(string id)
|
|
{
|
|
var subclasses = GetSubClassList();
|
|
return subclasses.FirstOrDefault(t => t.Id == id);
|
|
}
|
|
|
|
public void DeleteSubClass(string id)
|
|
{
|
|
var subclasses = GetSubClassList();
|
|
subclasses.RemoveAll(t => t.Id == id);
|
|
Save(subclasses, SUBCLASSES);
|
|
}
|
|
|
|
public Dictionary<int, string> GetClasses()
|
|
{
|
|
return classes;
|
|
}
|
|
|
|
public string GetClass(int classId)
|
|
{
|
|
return classes[classId];
|
|
}
|
|
}
|
|
} |