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