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

Commit 44f4dbb

Browse files
feat: Check if mesh message id exists in db table
1 parent 941066e commit 44f4dbb

File tree

5 files changed

+64
-13
lines changed

5 files changed

+64
-13
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using Microsoft.EntityFrameworkCore;
2+
using ServiceLayer.Mesh.Models;
3+
4+
namespace ServiceLayer.Mesh.Data;
5+
6+
public class ServiceLayerDbContext(DbContextOptions<ServiceLayerDbContext> options) : DbContext(options)
7+
{
8+
public DbSet<MeshFile> MeshFiles { get; set; }
9+
10+
protected override void OnModelCreating(ModelBuilder modelBuilder)
11+
{
12+
// Configure relationships, keys, etc.
13+
modelBuilder.Entity<MeshFile>().HasKey(p => p.FileId);
14+
}
15+
}

src/ServiceLayer.Mesh/Functions/DiscoveryFunction.cs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1-
using System;
21
using Microsoft.Azure.Functions.Worker;
2+
using Microsoft.EntityFrameworkCore;
33
using Microsoft.Extensions.Logging;
4-
using NHS.MESH.Client.Services;
5-
using NHS.MESH.Client.Models;
64
using NHS.MESH.Client.Contracts.Services;
7-
using System.Threading.Tasks;
5+
using ServiceLayer.Mesh.Data;
86

97
namespace ServiceLayer.Mesh.Functions
108
{
@@ -13,20 +11,40 @@ public class DiscoveryFunction
1311
private readonly ILogger _logger;
1412

1513
private readonly IMeshInboxService _meshInboxService;
14+
private readonly ServiceLayerDbContext _serviceLayerDbContext;
1615

17-
public DiscoveryFunction(ILoggerFactory loggerFactory, IMeshInboxService meshInboxService)
16+
public DiscoveryFunction(ILoggerFactory loggerFactory, IMeshInboxService meshInboxService, ServiceLayerDbContext serviceLayerDbContext)
1817
{
1918
_logger = loggerFactory.CreateLogger<DiscoveryFunction>();
2019
_meshInboxService = meshInboxService;
20+
_serviceLayerDbContext = serviceLayerDbContext;
2121
}
2222

2323
[Function("DiscoveryFunction")]
24-
public async Task Run([TimerTrigger("0 */5 * * * *")] TimerInfo myTimer)
24+
public async Task Run([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer)
2525
{
2626
_logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
2727

2828
var response = await _meshInboxService.GetMessagesAsync(Environment.GetEnvironmentVariable("MailboxId"));
2929

30+
if (response.Response.Messages.Count() > 500)
31+
{
32+
// TODO: Get next page
33+
// dotnet-mesh-client needs to be updated to support pagination for when inbox containers more than 500 messages
34+
}
35+
36+
foreach (var message in response.Response.Messages)
37+
{
38+
// Check if message has been seen before
39+
var doesFileIdExist = await _serviceLayerDbContext.MeshFiles.AnyAsync(m => m.FileId == message.ToString());
40+
41+
42+
// If no then insert into db
43+
// Then enqueue message
44+
45+
// If no then do nothing
46+
}
47+
3048
if (myTimer.ScheduleStatus is not null)
3149
{
3250
_logger.LogInformation($"Next timer schedule at: {myTimer.ScheduleStatus.Next}");
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace ServiceLayer.Mesh.Models;
2+
3+
public class MeshFile
4+
{
5+
public string FileId { get; set; }
6+
}

src/ServiceLayer.Mesh/Program.cs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
using Microsoft.Azure.Functions.Worker.Builder;
22
using Microsoft.Extensions.Hosting;
33
using NHS.MESH.Client;
4+
using ServiceLayer.Mesh.Data;
5+
using Microsoft.EntityFrameworkCore;
6+
using Microsoft.Extensions.DependencyInjection;
47

5-
var host = new HostBuilder();
6-
7-
host.ConfigureFunctionsWebApplication();
8-
9-
host.ConfigureServices(services =>
8+
var host = new HostBuilder()
9+
.ConfigureFunctionsWebApplication()
10+
.ConfigureServices(services =>
1011
{
1112
services
1213
.AddMeshClient(_ => _.MeshApiBaseUrl = Environment.GetEnvironmentVariable("MeshApiBaseUrl"))
@@ -15,8 +16,16 @@
1516
Password = Environment.GetEnvironmentVariable("MeshPassword"),
1617
SharedKey = Environment.GetEnvironmentVariable("MeshSharedKey"),
1718
//Cert = cert
18-
})
19-
.Build();
19+
}).Build();
20+
21+
services.AddDbContext<ServiceLayerDbContext>(options =>
22+
{
23+
var databaseConnectionString = Environment.GetEnvironmentVariable("DatabaseConnectionString");
24+
if (string.IsNullOrEmpty(databaseConnectionString))
25+
throw new InvalidOperationException("The connection string has not been initialized.");
26+
27+
options.UseSqlServer(databaseConnectionString);
28+
});
2029
});
2130

2231

src/ServiceLayer.Mesh/ServiceLayer.Mesh.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="2.0.0" />
1616
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Timer" Version="4.3.1" />
1717
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="2.0.0" />
18+
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.1" />
19+
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.1" />
20+
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.1" />
1821
</ItemGroup>
1922
<ItemGroup>
2023
<None Update="host.json">

0 commit comments

Comments
 (0)