diff --git a/FileProcessor.BusinessLogic/Services/FileProcessorDomainService.cs b/FileProcessor.BusinessLogic/Services/FileProcessorDomainService.cs index 0d0dbef..1a042d4 100644 --- a/FileProcessor.BusinessLogic/Services/FileProcessorDomainService.cs +++ b/FileProcessor.BusinessLogic/Services/FileProcessorDomainService.cs @@ -145,7 +145,10 @@ public async Task> UploadFile(FileCommands.UploadFileCommand comman if (fileImportLogAggregate.IsCreated == false) { // First file of the day so create - fileImportLogAggregate.CreateImportLog(command.EstateId, importLogDateTime); + Result result = fileImportLogAggregate.CreateImportLog(command.EstateId, importLogDateTime); + if (result.IsFailed) { + return result; + } } // Move the file @@ -192,7 +195,9 @@ public async Task> UploadFile(FileCommands.UploadFileCommand comman file.MoveTo(fileDestination, overwrite: true); // Update Import log aggregate - fileImportLogAggregate.AddImportedFile(fileId, command.MerchantId, command.UserId, command.FileProfileId, originalName, fileDestination, command.FileUploadedDateTime); + var stateResult= fileImportLogAggregate.AddImportedFile(fileId, command.MerchantId, command.UserId, command.FileProfileId, originalName, fileDestination, command.FileUploadedDateTime); + if (stateResult.IsFailed) + return stateResult; return Result.Success(fileId); }, importLogId, cancellationToken, false); diff --git a/FileProcessor.FileImportLogAggregate.Tests/FileImportLogAggregateTests.cs b/FileProcessor.FileImportLogAggregate.Tests/FileImportLogAggregateTests.cs index 8b6c762..1828e8c 100644 --- a/FileProcessor.FileImportLogAggregate.Tests/FileImportLogAggregateTests.cs +++ b/FileProcessor.FileImportLogAggregate.Tests/FileImportLogAggregateTests.cs @@ -1,4 +1,5 @@ using System; +using SimpleResults; using Xunit; namespace FileProcessor.FileImportLogAggregate.Tests @@ -25,7 +26,8 @@ public void FileImportLogAggregate_CanBeCreated_IsCreated() public void FileImportLogAggregate_CreateImportLog_IsCreated() { FileImportLogAggregate fileImportLogAggregate = FileImportLogAggregate.Create(TestData.FileImportLogId); - fileImportLogAggregate.CreateImportLog(TestData.EstateId, TestData.ImportLogDateTime); + Result result = fileImportLogAggregate.CreateImportLog(TestData.EstateId, TestData.ImportLogDateTime); + result.IsSuccess.ShouldBeTrue(); FileImportLog fileImportLog = fileImportLogAggregate.GetFileImportLog(); fileImportLog.ShouldNotBeNull(); @@ -48,10 +50,8 @@ public void FileImportLogAggregate_CreateImportLog_AlreadyCreated_SilentlyHandle fileImportLog.EstateId.ShouldBe(TestData.EstateId); fileImportLog.FileImportLogDateTime.ShouldBe(TestData.ImportLogDateTime); - Should.NotThrow(() => - { - fileImportLogAggregate.CreateImportLog(TestData.EstateId, TestData.ImportLogDateTime); - }); + var result = fileImportLogAggregate.CreateImportLog(TestData.EstateId, TestData.ImportLogDateTime); + result.IsSuccess.ShouldBeTrue(); } [Fact] @@ -70,14 +70,12 @@ public void FileImportLogAggregate_AddImportedFile_FileAdded() } [Fact] - public void FileImportLogAggregate_AddImportedFile_ImportLogNotCreated_ErrorThrown() - { + public void FileImportLogAggregate_AddImportedFile_ImportLogNotCreated_ErrorThrown() { FileImportLogAggregate fileImportLogAggregate = FileImportLogAggregate.Create(TestData.FileImportLogId); - Should.Throw(() => - { - fileImportLogAggregate.AddImportedFile(TestData.FileId, TestData.MerchantId, TestData.UserId, TestData.FileProfileId, TestData.OriginalFileName, TestData.FilePath, TestData.FileUploadedDateTime); - }); + var result = fileImportLogAggregate.AddImportedFile(TestData.FileId, TestData.MerchantId, TestData.UserId, TestData.FileProfileId, TestData.OriginalFileName, TestData.FilePath, TestData.FileUploadedDateTime); + result.IsFailed.ShouldBeTrue(); + result.Status.ShouldBe(ResultStatus.Invalid); } [Fact] @@ -86,10 +84,9 @@ public void FileImportLogAggregate_AddImportedFile_DuplicateFileId_ErrorThrown() FileImportLogAggregate fileImportLogAggregate = FileImportLogAggregate.Create(TestData.FileImportLogId); fileImportLogAggregate.CreateImportLog(TestData.EstateId, TestData.ImportLogDateTime); fileImportLogAggregate.AddImportedFile(TestData.FileId, TestData.MerchantId, TestData.UserId, TestData.FileProfileId, TestData.OriginalFileName, TestData.FilePath, TestData.FileUploadedDateTime); - Should.Throw(() => - { - fileImportLogAggregate.AddImportedFile(TestData.FileId, TestData.MerchantId, TestData.UserId, TestData.FileProfileId, TestData.OriginalFileName, TestData.FilePath, TestData.FileUploadedDateTime); - }); + Result result = fileImportLogAggregate.AddImportedFile(TestData.FileId, TestData.MerchantId, TestData.UserId, TestData.FileProfileId, TestData.OriginalFileName, TestData.FilePath, TestData.FileUploadedDateTime); + result.IsFailed.ShouldBeTrue(); + result.Status.ShouldBe(ResultStatus.Invalid); } } } diff --git a/FileProcessor.FileImportLogAggregate/FileImportLogAggregate.cs b/FileProcessor.FileImportLogAggregate/FileImportLogAggregate.cs index 3414d97..c209446 100644 --- a/FileProcessor.FileImportLogAggregate/FileImportLogAggregate.cs +++ b/FileProcessor.FileImportLogAggregate/FileImportLogAggregate.cs @@ -1,5 +1,6 @@ using System; using FileProcessor.Models; +using SimpleResults; namespace FileProcessor.FileImportLogAggregate { @@ -14,33 +15,36 @@ namespace FileProcessor.FileImportLogAggregate using Shared.General; public static class FileImportLogAggregateExtensions{ - public static void CreateImportLog(this FileImportLogAggregate aggregate, Guid estateId, DateTime importLogDateTime) + public static Result CreateImportLog(this FileImportLogAggregate aggregate, Guid estateId, DateTime importLogDateTime) { // Silently handle a duplicate create if (aggregate.IsCreated) - return; + return Result.Success(); ImportLogCreatedEvent importLogCreatedEvent = new ImportLogCreatedEvent(aggregate.AggregateId, estateId, importLogDateTime); aggregate.ApplyAndAppend(importLogCreatedEvent); + return Result.Success(); } - public static void AddImportedFile(this FileImportLogAggregate aggregate, Guid fileId, Guid merchantId, Guid userId, Guid fileProfileId, String originalFileName, String filePath, DateTime fileUploadedDateTime) + public static Result AddImportedFile(this FileImportLogAggregate aggregate, Guid fileId, Guid merchantId, Guid userId, Guid fileProfileId, String originalFileName, String filePath, DateTime fileUploadedDateTime) { if (aggregate.IsCreated == false) { - throw new InvalidOperationException("Import log has not been created"); + return Result.Invalid("Import log has not been created"); } if (aggregate.Files.Any(f => f.FileId == fileId)) { - throw new InvalidOperationException($"Duplicate file {originalFileName} detected File Id [{fileId}]"); + return Result.Invalid($"Duplicate file {originalFileName} detected File Id [{fileId}]"); } FileAddedToImportLogEvent fileAddedToImportLogEvent = new FileAddedToImportLogEvent(aggregate.AggregateId, fileId, aggregate.EstateId, merchantId, userId, fileProfileId, originalFileName, filePath, fileUploadedDateTime); aggregate.ApplyAndAppend(fileAddedToImportLogEvent); + + return Result.Success(); } public static void PlayEvent(this FileImportLogAggregate aggregate, ImportLogCreatedEvent domainEvent)