AccountingNext/Schaad.Accounting.Db/Repositories/SubclassRepository.cs
Claudio Schaad 3a770af016 PR J: log repository save failures via ILogger
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>
2026-07-02 21:47:55 +02:00

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];
}
}
}