Skip to content
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Commit e4d1075

Browse files
committed
wip
1 parent c31318c commit e4d1075

File tree

11 files changed

+48
-29
lines changed

11 files changed

+48
-29
lines changed

src/ServiceLayer.Mesh/Functions/FileExtractFunction.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ public async Task Run([QueueTrigger("%FileExtractQueueName%")] FileExtractQueueM
4848
private async Task<MeshFile?> GetFileAsync(string fileId)
4949
{
5050
var file = await serviceLayerDbContext.MeshFiles
51+
.Include(x => x.Events)
5152
.FirstOrDefaultAsync(f => f.FileId == fileId);
5253

5354
if (file == null)
@@ -78,8 +79,7 @@ private bool IsFileSuitableForExtraction(MeshFile file)
7879

7980
private async Task UpdateFileStatusForExtraction(MeshFile file)
8081
{
81-
file.Status = MeshFileStatus.Extracting;
82-
file.LastUpdatedUtc = DateTime.UtcNow;
82+
file.SetStatus(FileEventSource.ExtractFunction, MeshFileStatus.Extracting);
8383
await serviceLayerDbContext.SaveChangesAsync();
8484
}
8585

@@ -100,8 +100,7 @@ private async Task ProcessFileExtraction(MeshFile file)
100100
}
101101

102102
file.BlobPath = blobPath;
103-
file.Status = MeshFileStatus.Extracted;
104-
file.LastUpdatedUtc = DateTime.UtcNow;
103+
file.SetStatus(FileEventSource.ExtractFunction, MeshFileStatus.Extracted);
105104
await serviceLayerDbContext.SaveChangesAsync();
106105

107106
await fileTransformQueueClient.EnqueueFileTransformAsync(file);
@@ -110,8 +109,7 @@ private async Task ProcessFileExtraction(MeshFile file)
110109
private async Task HandleExtractionError(MeshFile file, FileExtractQueueMessage message, Exception ex)
111110
{
112111
logger.LogError(ex, "An exception occurred during file extraction for fileId: {FileId}", message.FileId);
113-
file.Status = MeshFileStatus.FailedExtract;
114-
file.LastUpdatedUtc = DateTime.UtcNow;
112+
file.SetStatus(FileEventSource.ExtractFunction, MeshFileStatus.FailedExtract);
115113
await serviceLayerDbContext.SaveChangesAsync();
116114
await fileExtractQueueClient.SendToPoisonQueueAsync(message);
117115
}

src/ServiceLayer.Mesh/Functions/FileRetryFunction.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public async Task Run([TimerTrigger("%FileRetryTimerExpression%")] TimerInfo myT
2929
private async Task RetryStaleExtractions(DateTime staleDateTimeUtc)
3030
{
3131
var staleFiles = await serviceLayerDbContext.MeshFiles
32+
.Include(x => x.Events)
3233
.Where(f =>
3334
(f.Status == MeshFileStatus.Discovered || f.Status == MeshFileStatus.Extracting)
3435
&& f.LastUpdatedUtc <= staleDateTimeUtc)
@@ -48,6 +49,7 @@ private async Task RetryStaleExtractions(DateTime staleDateTimeUtc)
4849
private async Task RetryStaleTransformations(DateTime staleDateTimeUtc)
4950
{
5051
var staleFiles = await serviceLayerDbContext.MeshFiles
52+
.Include(x => x.Events)
5153
.Where(f =>
5254
(f.Status == MeshFileStatus.Extracted || f.Status == MeshFileStatus.Transforming)
5355
&& f.LastUpdatedUtc <= staleDateTimeUtc)

src/ServiceLayer.Mesh/Functions/FileTransformFunction.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ public async Task Run([QueueTrigger("%FileTransformQueueName%")] FileTransformQu
5858
private async Task<MeshFile?> GetFileAsync(string fileId)
5959
{
6060
var file = await serviceLayerDbContext.MeshFiles
61+
.Include(x => x.Events)
6162
.FirstOrDefaultAsync(f => f.FileId == fileId);
6263

6364
if (file == null)

src/ServiceLayer.Shared/Data/Models/MeshFile.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,6 @@ namespace ServiceLayer.Data.Models;
55

66
public class MeshFile
77
{
8-
private MeshFile()
9-
{
10-
}
11-
128
[MaxLength(255)]
139
public required string FileId { get; set; }
1410
[MaxLength(50)]

src/ServiceLayer.Shared/Data/Models/MeshFileEvent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ namespace ServiceLayer.Data.Models;
66
[Table("MeshFileEvents")]
77
public class MeshFileEvent
88
{
9-
public Guid EventId { get; } = Guid.NewGuid();
9+
public Guid EventId { get; set; } = Guid.NewGuid();
1010

1111
[MaxLength(255)]
1212
public required string FileId { get; set; }

src/ServiceLayer.Shared/Data/ServiceLayerDbContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public class ServiceLayerDbContext(DbContextOptions<ServiceLayerDbContext> optio
77
{
88
public DbSet<MeshFile> MeshFiles { get; set; }
99
public DbSet<NbssAppointmentEvent> NbssAppointmentEvents { get; set; }
10+
public DbSet<MeshFileEvent> MeshFileEvents { get; set; }
1011

1112
protected override void OnModelCreating(ModelBuilder modelBuilder)
1213
{

tests/ServiceLayer.Mesh.Tests/Functions/FileDiscoveryFunctionTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public async Task Run_AddsNewMessageToDbAndQueue()
4848
await _function.Run(new TimerInfo());
4949

5050
// Assert
51-
var meshFile = AssertFileUpdated(testMessageId, MeshFileStatus.Discovered);
51+
var meshFile = AssertFileUpdated(testMessageId, MeshFileStatus.Discovered, FileEventSource.DiscoveryFunction);
5252
Assert.Equal("test-mailbox", meshFile.MailboxId);
5353

5454
// TODO - replace the It.IsAny with a more specific matcher, or use a callback
@@ -113,7 +113,7 @@ public async Task Run_MultipleMessagesInInbox_AllAreProcessed()
113113
// Assert
114114
foreach (var id in messageIds)
115115
{
116-
var savedFile = AssertFileUpdated(id, MeshFileStatus.Discovered);
116+
var savedFile = AssertFileUpdated(id, MeshFileStatus.Discovered, FileEventSource.DiscoveryFunction);
117117
Assert.Equal("test-mailbox", savedFile.MailboxId);
118118
}
119119

tests/ServiceLayer.Mesh.Tests/Functions/FileExtractFunctionTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ public async Task Run_FileValid_FileUploadedToBlobAndAcknowledgedAndEnqueued(Mes
119119
_meshInboxServiceMock.Verify(m => m.AcknowledgeMessageByIdAsync(file.MailboxId, file.FileId), Times.Once);
120120
_fileTransformQueueClientMock.Verify(q => q.EnqueueFileTransformAsync(file), Times.Once);
121121

122-
var updatedFile = AssertFileUpdated(file.FileId, MeshFileStatus.Extracted);
122+
var updatedFile = AssertFileUpdated(file.FileId, MeshFileStatus.Extracted, FileEventSource.ExtractFunction);
123123
Assert.Equal(blobPath, updatedFile.BlobPath);
124124
}
125125

@@ -156,7 +156,7 @@ public async Task Run_GetMessageFails_ErrorLoggedAndFileSentToPoisonQueue()
156156
_meshInboxServiceMock.Verify(m => m.AcknowledgeMessageByIdAsync(file.MailboxId, file.FileId), Times.Never);
157157
_fileTransformQueueClientMock.Verify(q => q.EnqueueFileTransformAsync(It.IsAny<MeshFile>()), Times.Never);
158158
_fileExtractQueueClientMock.Verify(q => q.SendToPoisonQueueAsync(message), Times.Once);
159-
var updatedFile = AssertFileUpdated(file.FileId, MeshFileStatus.FailedExtract);
159+
var updatedFile = AssertFileUpdated(file.FileId, MeshFileStatus.FailedExtract, FileEventSource.ExtractFunction);
160160
Assert.Null(updatedFile.BlobPath);
161161
}
162162

@@ -204,7 +204,7 @@ public async Task Run_AcknowledgeMessageFails_WarningLoggedAndProcessingContinue
204204
_meshInboxServiceMock.Verify(m => m.AcknowledgeMessageByIdAsync(file.MailboxId, file.FileId), Times.Once);
205205
_fileTransformQueueClientMock.Verify(q => q.EnqueueFileTransformAsync(file), Times.Once);
206206
_fileExtractQueueClientMock.Verify(q => q.SendToPoisonQueueAsync(message), Times.Never);
207-
var updatedFile = AssertFileUpdated(file.FileId, MeshFileStatus.Extracted);
207+
var updatedFile = AssertFileUpdated(file.FileId, MeshFileStatus.Extracted, FileEventSource.ExtractFunction);
208208
Assert.Equal(blobPath, updatedFile.BlobPath);
209209
}
210210
}

tests/ServiceLayer.Mesh.Tests/Functions/FileRetryFunctionTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public async Task Run_EnqueuesDiscoveredOrExtractingFilesOlderThan12Hours(MeshFi
4545
_fileExtractQueueClientMock.Verify(q => q.EnqueueFileExtractAsync(It.Is<MeshFile>(f => f.FileId == file.FileId)), Times.Once);
4646
_fileTransformQueueClientMock.Verify(q => q.EnqueueFileTransformAsync(It.Is<MeshFile>(f => f.FileId == file.FileId)), Times.Never);
4747

48-
AssertFileUpdated(file.FileId, testStatus);
48+
AssertFileUpdated(file.FileId, testStatus, FileEventSource.RetryFunction);
4949
}
5050

5151
[Theory]
@@ -63,7 +63,7 @@ public async Task Run_EnqueuesExtractedOrTransformingFilesOlderThan12Hours(MeshF
6363
_fileTransformQueueClientMock.Verify(q => q.EnqueueFileTransformAsync(It.Is<MeshFile>(f => f.FileId == file.FileId)), Times.Once);
6464
_fileExtractQueueClientMock.Verify(q => q.EnqueueFileExtractAsync(It.Is<MeshFile>(f => f.FileId == file.FileId)), Times.Never);
6565

66-
AssertFileUpdated(file.FileId, testStatus);
66+
AssertFileUpdated(file.FileId, testStatus, FileEventSource.RetryFunction);
6767
}
6868

6969
[Theory]
@@ -130,9 +130,9 @@ public async Task Run_ProcessesMultipleEligibleFiles()
130130
_fileTransformQueueClientMock.Verify(q => q.EnqueueFileTransformAsync(It.Is<MeshFile>(f => f.FileId == file2.FileId)), Times.Once);
131131
_fileTransformQueueClientMock.Verify(q => q.EnqueueFileTransformAsync(It.Is<MeshFile>(f => f.FileId == file3.FileId)), Times.Once);
132132

133-
AssertFileUpdated(file1.FileId, MeshFileStatus.Discovered);
134-
AssertFileUpdated(file2.FileId, MeshFileStatus.Extracted);
135-
AssertFileUpdated(file3.FileId, MeshFileStatus.Transforming);
133+
AssertFileUpdated(file1.FileId, MeshFileStatus.Discovered, FileEventSource.RetryFunction);
134+
AssertFileUpdated(file2.FileId, MeshFileStatus.Extracted, FileEventSource.RetryFunction);
135+
AssertFileUpdated(file3.FileId, MeshFileStatus.Transforming, FileEventSource.RetryFunction);
136136
}
137137
}
138138

tests/ServiceLayer.Mesh.Tests/Functions/FileTransformFunctionTests.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public async Task Run_FileValidNoTransformersExist_ErrorLoggedAndStatusUpdated()
9999
_blobStoreMock.Verify(x => x.DownloadAsync(file), Times.Never);
100100
_fileTransformQueueClientMock.Verify(q => q.SendToPoisonQueueAsync(message), Times.Once);
101101

102-
AssertFileUpdated(file.FileId, MeshFileStatus.FailedTransform);
102+
AssertFileUpdated(file.FileId, MeshFileStatus.FailedTransform, FileEventSource.TransformFunction);
103103
}
104104

105105
[Fact]
@@ -125,7 +125,7 @@ public async Task Run_FileValidMultipleTransformersExist_ErrorLoggedAndStatusUpd
125125
_blobStoreMock.Verify(x => x.DownloadAsync(file), Times.Never);
126126
_fileTransformQueueClientMock.Verify(q => q.SendToPoisonQueueAsync(message), Times.Once);
127127

128-
AssertFileUpdated(file.FileId, MeshFileStatus.FailedTransform);
128+
AssertFileUpdated(file.FileId, MeshFileStatus.FailedTransform, FileEventSource.TransformFunction);
129129
}
130130

131131
[Fact]
@@ -159,7 +159,7 @@ public async Task Run_FileHasValidationErrors_ErrorLoggedAndStatusAndValidationE
159159
_blobStoreMock.Verify(x => x.DownloadAsync(file), Times.Once);
160160
_fileTransformQueueClientMock.Verify(q => q.SendToPoisonQueueAsync(message), Times.Once);
161161

162-
var updatedFile = AssertFileUpdated(file.FileId, MeshFileStatus.FailedTransform);
162+
var updatedFile = AssertFileUpdated(file.FileId, MeshFileStatus.FailedTransform, FileEventSource.TransformFunction);
163163
var savedValidationErrors = DeserializeValidationErrorsFromMeshFile(updatedFile);
164164
Assert.Equal(validationErrors, savedValidationErrors, new ValidationErrorComparer());
165165
}
@@ -187,7 +187,7 @@ public async Task Run_FileValid_FileTransformedAndStatusUpdated(MeshFileStatus v
187187
LoggerMock.VerifyNoLogs(LogLevel.Warning);
188188
_blobStoreMock.Verify(x => x.DownloadAsync(file), Times.Once);
189189
_fileTransformerMock.Verify(x => x.TransformFileAsync(expectedStream, file), Times.Once);
190-
AssertFileUpdated(file.FileId, MeshFileStatus.Transformed);
190+
AssertFileUpdated(file.FileId, MeshFileStatus.Transformed, FileEventSource.TransformFunction);
191191
}
192192

193193
private static readonly JsonSerializerOptions ValidationErrorJsonOptions = new()

0 commit comments

Comments
 (0)