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; + } +}