diff --git a/.gitignore b/.gitignore
index 31c7257..b299ff1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
.tasks/
.agile/
+**/bin/
+**/obj/
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 0000000..9b50b74
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,10 @@
+
+
+ AgileWebs
+ AgileWebs
+ git
+ http://192.168.68.156:3000/AgileWebs/operations-dal
+ http://192.168.68.156:3000/AgileWebs/operations-dal
+ false
+
+
diff --git a/Operations.DAL.slnx b/Operations.DAL.slnx
new file mode 100644
index 0000000..11b6302
--- /dev/null
+++ b/Operations.DAL.slnx
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/Operations.DAL/Contracts/OperationsConfigRecord.cs b/src/Operations.DAL/Contracts/OperationsConfigRecord.cs
new file mode 100644
index 0000000..9cbcce2
--- /dev/null
+++ b/src/Operations.DAL/Contracts/OperationsConfigRecord.cs
@@ -0,0 +1,7 @@
+namespace Operations.DAL.Contracts;
+
+public sealed record OperationsConfigRecord(
+ string LocationId,
+ string Version,
+ DateTime EffectiveAtUtc,
+ IReadOnlyDictionary FeatureFlags);
diff --git a/src/Operations.DAL/Operations.DAL.csproj b/src/Operations.DAL/Operations.DAL.csproj
new file mode 100644
index 0000000..b760144
--- /dev/null
+++ b/src/Operations.DAL/Operations.DAL.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net10.0
+ enable
+ enable
+
+
+
diff --git a/src/Operations.DAL/Repositories/IOperationsConfigRepository.cs b/src/Operations.DAL/Repositories/IOperationsConfigRepository.cs
new file mode 100644
index 0000000..41d36af
--- /dev/null
+++ b/src/Operations.DAL/Repositories/IOperationsConfigRepository.cs
@@ -0,0 +1,9 @@
+using Operations.DAL.Contracts;
+
+namespace Operations.DAL.Repositories;
+
+public interface IOperationsConfigRepository
+{
+ Task GetEffectiveAsync(string locationId, DateTime effectiveAtUtc, CancellationToken cancellationToken);
+ Task UpsertAsync(OperationsConfigRecord record, CancellationToken cancellationToken);
+}
diff --git a/src/Operations.DAL/Repositories/InMemoryOperationsConfigRepository.cs b/src/Operations.DAL/Repositories/InMemoryOperationsConfigRepository.cs
new file mode 100644
index 0000000..2903d0b
--- /dev/null
+++ b/src/Operations.DAL/Repositories/InMemoryOperationsConfigRepository.cs
@@ -0,0 +1,21 @@
+using System.Collections.Concurrent;
+using Operations.DAL.Contracts;
+
+namespace Operations.DAL.Repositories;
+
+public sealed class InMemoryOperationsConfigRepository : IOperationsConfigRepository
+{
+ private readonly ConcurrentDictionary store = new();
+
+ public Task GetEffectiveAsync(string locationId, DateTime effectiveAtUtc, CancellationToken cancellationToken)
+ {
+ store.TryGetValue(locationId, out var record);
+ return Task.FromResult(record);
+ }
+
+ public Task UpsertAsync(OperationsConfigRecord record, CancellationToken cancellationToken)
+ {
+ store[record.LocationId] = record;
+ return Task.CompletedTask;
+ }
+}