using System.Collections.ObjectModel;
using AutoMapper;
using CommunityToolkit.Mvvm.ComponentModel;
using DMS.Application.DTOs;
using DMS.Application.Events;
using DMS.Application.Interfaces;
using DMS.Core.Enums;
using DMS.WPF.Interfaces;
using DMS.WPF.ItemViewModel;
namespace DMS.WPF.Services;
///
/// 日志数据服务类,负责管理日志相关的数据和操作。
///
public class LogDataService : ILogDataService
{
private readonly IMapper _mapper;
private readonly IDataStorageService _dataStorageService;
private readonly IAppDataStorageService _appDataStorageService;
///
/// LogDataService类的构造函数。
///
/// AutoMapper 实例。
/// 数据服务中心实例。
public LogDataService(IMapper mapper,IDataStorageService dataStorageService, IAppDataStorageService appDataStorageService)
{
_mapper = mapper;
_dataStorageService = dataStorageService;
_appDataStorageService = appDataStorageService;
}
public void LoadAllLog()
{
// 加载日志数据
_dataStorageService.Nlogs = _mapper.Map>(_appDataStorageService.Nlogs.Values);
}
///
/// 处理日志变更事件。
///
public void OnNlogChanged(object sender, NlogChangedEventArgs e)
{
// 在UI线程上更新日志
App.Current.Dispatcher.BeginInvoke(new Action(() =>
{
switch (e.ChangeType)
{
case DataChangeType.Added:
_dataStorageService.Nlogs.Add(_mapper.Map(e.Nlog));
break;
case DataChangeType.Updated:
var existingLog = _dataStorageService.Nlogs.FirstOrDefault(l => l.Id == e.Nlog.Id);
if (existingLog != null)
{
_mapper.Map(e.Nlog, existingLog);
}
break;
case DataChangeType.Deleted:
var logToRemove = _dataStorageService.Nlogs.FirstOrDefault(l => l.Id == e.Nlog.Id);
if (logToRemove != null)
{
_dataStorageService.Nlogs.Remove(logToRemove);
}
break;
}
}));
}
}