uind-hikvision-attendance-m.../src/HikvisionAttendanceManager.App/Services/DepartmentalUserSyncService.cs

34 lines
1.4 KiB
C#

using HikvisionAttendanceManager.App.Models;
namespace HikvisionAttendanceManager.App.Services;
public sealed class DepartmentalUserSyncService(
UserSyncEngine engine,
OperationHistoryService history)
{
public async Task<(SyncHistoryEntry Entry, IReadOnlyList<EmployeeSyncResult> Results)> SyncAsync(
Device device, IEnumerable<HrmsEmployee> employees, string contextSummary,
IProgress<UserSyncProgress>? progress, CancellationToken cancellationToken)
{
var list = employees.ToList();
var entry = new SyncHistoryEntry
{
Operation = SyncOperationKind.DepartmentalUserSync,
TargetDevice = device.DisplayName,
Context = contextSummary,
Total = list.Count,
Status = "Running"
};
await history.AddAsync(entry, cancellationToken);
var results = await engine.RunAsync(device, list, initialEnrollment: true, progress, cancellationToken);
entry.CompletedAt = DateTime.Now;
entry.Success = results.Count(r => r.OverallResult is "SUCCESS" or "ALREADY_EXISTS");
entry.Failed = results.Count(r => r.OverallResult == "FAILED");
entry.Skipped = results.Count(r => r.OverallResult == "SKIPPED");
entry.Status = entry.Failed > 0 ? "Completed with errors" : "Completed";
await history.UpdateAsync(entry, cancellationToken);
return (entry, results);
}
}