🎯 Obiettivo
Implementare un servizio di orchestrazione sync che gestisca lo stato di avanzamento delle operazioni di sincronizzazione (export/import), progress reporting, retry automatici e rollback parziali.
📋 Contesto
La sincronizzazione (#52, #53) coinvolge operazioni complesse:
- Export: selezione dati, serializzazione, cifratura, firma HMAC, salvataggio file
- Import: lettura file, verifica HMAC, decifratura, deserializzazione, conflict detection, merge dati
Problemi da risolvere:
- Progress reporting: utente deve vedere avanzamento operazione ("Esportazione 45% completata")
- Retry automatici: se import fallisce per errore transiente (file lock), riprovare
- Rollback parziale: se import di un pacchetto fallisce a metà, annullare modifiche già applicate
- Stato persistente: tracciare quali pacchetti sono stati importati/esportati con successo
📦 Servizio da Implementare
ISyncOrchestrationService + SyncOrchestrationService
Metodi principali (proposta):
public interface ISyncOrchestrationService
{
// Export orchestration
Task<SyncOperationResult> ExportPackageAsync(
ExportRequest request,
IProgress<SyncProgress>? progress = null,
CancellationToken ct = default);
// Import orchestration
Task<SyncOperationResult> ImportPackageAsync(
ImportRequest request,
IProgress<SyncProgress>? progress = null,
CancellationToken ct = default);
// Stato sincronizzazione
Task<IReadOnlyList<SyncHistoryEntry>> GetSyncHistoryAsync(
DateTime? from = null,
DateTime? to = null,
CancellationToken ct = default);
// Retry e rollback
Task<SyncOperationResult> RetryFailedImportAsync(
Guid syncOperationId,
CancellationToken ct = default);
Task RollbackImportAsync(
Guid syncOperationId,
CancellationToken ct = default);
}
public record ExportRequest(
Guid OperatorId,
DateTime FromDate,
DateTime ToDate,
string OutputPath
);
public record ImportRequest(
string PackageFilePath,
ConflictResolutionStrategy DefaultStrategy
);
public record SyncOperationResult(
bool Success,
Guid OperationId,
string? ErrorMessage,
int EntitiesProcessed,
int ConflictsDetected,
TimeSpan Duration
);
public record SyncProgress(
int CurrentStep,
int TotalSteps,
string CurrentStepDescription,
int PercentComplete
);
public record SyncHistoryEntry(
Guid OperationId,
SyncOperationType Type, // Export / Import
DateTime StartedAt,
DateTime? CompletedAt,
SyncOperationStatus Status, // InProgress / Completed / Failed / RolledBack
int EntitiesProcessed,
int ConflictsResolved,
string? ErrorMessage
);
public enum SyncOperationType
{
Export,
Import
}
public enum SyncOperationStatus
{
InProgress,
Completed,
Failed,
RolledBack
}
Modello Dati SyncOperation
public class SyncOperation
{
public Guid Id { get; set; }
public SyncOperationType Type { get; set; }
public SyncOperationStatus Status { get; set; }
public Guid PerformedBy { get; set; }
public DateTime StartedAt { get; set; }
public DateTime? CompletedAt { get; set; }
public string? PackageFilePath { get; set; }
public int EntitiesProcessed { get; set; }
public int ConflictsDetected { get; set; }
public int ConflictsResolved { get; set; }
public string? ErrorMessage { get; set; }
public string? ErrorStackTrace { get; set; }
// Per rollback
public string? SnapshotData { get; set; } // JSON con stato pre-import
}
📋 Tasks
🎯 UI Integration (FASE 3)
✅ Acceptance Criteria
🔗 Riferimenti
CLUSTER: Services & Orchestrazione (gap 5.2)
FASE: 3 - Sync & Advanced
PRIORITÀ: 🟡 ALTA
DIPENDENZE: #52, #2, #3
BLOCKING: UX robusta per sincronizzazione
🎯 Obiettivo
Implementare un servizio di orchestrazione sync che gestisca lo stato di avanzamento delle operazioni di sincronizzazione (export/import), progress reporting, retry automatici e rollback parziali.
📋 Contesto
La sincronizzazione (#52, #53) coinvolge operazioni complesse:
Problemi da risolvere:
📦 Servizio da Implementare
ISyncOrchestrationService+SyncOrchestrationServiceMetodi principali (proposta):
Modello Dati
SyncOperation📋 Tasks
SyncOperationinPTRP.Models/SyncOperationType,SyncOperationStatusinPTRP.Models/Enums/ISyncOrchestrationServiceinPTRP.Services/Interfaces/SyncOrchestrationServiceinPTRP.Services/ISyncOperationRepositoryinPTRP.Data/IProgress<T>🎯 UI Integration (FASE 3)
SyncView(FASE 3 - Sync & Advanced: UI Sincronizzazione (Import/Export Pacchetti) #52) collegata aIProgress<SyncProgress>✅ Acceptance Criteria
🔗 Riferimenti
docs/PROGETTO_PTRP_SYNC.md- protocollo sincronizzazioneCLUSTER: Services & Orchestrazione (gap 5.2)
FASE: 3 - Sync & Advanced
PRIORITÀ: 🟡 ALTA
DIPENDENZE: #52, #2, #3
BLOCKING: UX robusta per sincronizzazione