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..86145d3 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,10 @@ + + + AgileWebs + AgileWebs + git + http://192.168.68.156:3000/AgileWebs/kitchen-dal + http://192.168.68.156:3000/AgileWebs/kitchen-dal + false + + diff --git a/Kitchen.DAL.slnx b/Kitchen.DAL.slnx new file mode 100644 index 0000000..679109a --- /dev/null +++ b/Kitchen.DAL.slnx @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Kitchen.DAL/Contracts/KitchenWorkItemRecord.cs b/src/Kitchen.DAL/Contracts/KitchenWorkItemRecord.cs new file mode 100644 index 0000000..c7cac02 --- /dev/null +++ b/src/Kitchen.DAL/Contracts/KitchenWorkItemRecord.cs @@ -0,0 +1,8 @@ +namespace Kitchen.DAL.Contracts; + +public sealed record KitchenWorkItemRecord( + string WorkItemId, + string WorkType, + int Priority, + DateTime RequestedAtUtc, + string State); diff --git a/src/Kitchen.DAL/Kitchen.DAL.csproj b/src/Kitchen.DAL/Kitchen.DAL.csproj new file mode 100644 index 0000000..b760144 --- /dev/null +++ b/src/Kitchen.DAL/Kitchen.DAL.csproj @@ -0,0 +1,9 @@ + + + + net10.0 + enable + enable + + + diff --git a/src/Kitchen.DAL/Repositories/IKitchenWorkItemRepository.cs b/src/Kitchen.DAL/Repositories/IKitchenWorkItemRepository.cs new file mode 100644 index 0000000..8711984 --- /dev/null +++ b/src/Kitchen.DAL/Repositories/IKitchenWorkItemRepository.cs @@ -0,0 +1,9 @@ +using Kitchen.DAL.Contracts; + +namespace Kitchen.DAL.Repositories; + +public interface IKitchenWorkItemRepository +{ + Task> ListQueuedAsync(CancellationToken cancellationToken); + Task UpsertAsync(KitchenWorkItemRecord record, CancellationToken cancellationToken); +} diff --git a/src/Kitchen.DAL/Repositories/InMemoryKitchenWorkItemRepository.cs b/src/Kitchen.DAL/Repositories/InMemoryKitchenWorkItemRepository.cs new file mode 100644 index 0000000..3836043 --- /dev/null +++ b/src/Kitchen.DAL/Repositories/InMemoryKitchenWorkItemRepository.cs @@ -0,0 +1,21 @@ +using System.Collections.Concurrent; +using Kitchen.DAL.Contracts; + +namespace Kitchen.DAL.Repositories; + +public sealed class InMemoryKitchenWorkItemRepository : IKitchenWorkItemRepository +{ + private readonly ConcurrentDictionary store = new(); + + public Task> ListQueuedAsync(CancellationToken cancellationToken) + { + var result = store.Values.Where(x => x.State == "Queued").OrderByDescending(x => x.Priority).ToArray(); + return Task.FromResult>(result); + } + + public Task UpsertAsync(KitchenWorkItemRecord record, CancellationToken cancellationToken) + { + store[record.WorkItemId] = record; + return Task.CompletedTask; + } +}