feat(04-01): add Phase 4 models, interfaces, BulkOperationRunner, and test scaffolds
- Install CsvHelper 33.1.0 and Microsoft.Graph 5.74.0 (main + test projects) - Add 14 core model/enum files (BulkOperationResult, BulkMemberRow, BulkSiteRow, TransferJob, FolderStructureRow, SiteTemplate, SiteTemplateOptions, TemplateLibraryInfo, TemplateFolderInfo, TemplatePermissionGroup, ConflictPolicy, TransferMode, CsvValidationRow) - Add 6 service interfaces (IFileTransferService, IBulkMemberService, IBulkSiteService, ITemplateService, IFolderStructureService, ICsvValidationService) - Add BulkOperationRunner with continue-on-error and cancellation support - Add BulkResultCsvExportService stub (compile-ready) - Add test scaffolds: BulkOperationRunnerTests (5 passing), BulkResultCsvExportServiceTests (2 passing), CsvValidationServiceTests (6 skipped), TemplateRepositoryTests (4 skipped)
This commit is contained in:
35
SharepointToolbox/Core/Models/BulkOperationResult.cs
Normal file
35
SharepointToolbox/Core/Models/BulkOperationResult.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
namespace SharepointToolbox.Core.Models;
|
||||
|
||||
public class BulkItemResult<T>
|
||||
{
|
||||
public T Item { get; }
|
||||
public bool IsSuccess { get; }
|
||||
public string? ErrorMessage { get; }
|
||||
public DateTime Timestamp { get; }
|
||||
|
||||
private BulkItemResult(T item, bool success, string? error)
|
||||
{
|
||||
Item = item;
|
||||
IsSuccess = success;
|
||||
ErrorMessage = error;
|
||||
Timestamp = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public static BulkItemResult<T> Success(T item) => new(item, true, null);
|
||||
public static BulkItemResult<T> Failed(T item, string error) => new(item, false, error);
|
||||
}
|
||||
|
||||
public class BulkOperationSummary<T>
|
||||
{
|
||||
public IReadOnlyList<BulkItemResult<T>> Results { get; }
|
||||
public int TotalCount => Results.Count;
|
||||
public int SuccessCount => Results.Count(r => r.IsSuccess);
|
||||
public int FailedCount => Results.Count(r => !r.IsSuccess);
|
||||
public bool HasFailures => FailedCount > 0;
|
||||
public IReadOnlyList<BulkItemResult<T>> FailedItems => Results.Where(r => !r.IsSuccess).ToList();
|
||||
|
||||
public BulkOperationSummary(IReadOnlyList<BulkItemResult<T>> results)
|
||||
{
|
||||
Results = results;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user