diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index dc9ae24a..00000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,17 +0,0 @@
-# To get started with Dependabot version updates, you'll need to specify which
-# package ecosystems to update and where the package manifests are located.
-# Please see the documentation for all configuration options:
-# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
-
-version: 2
-updates:
- - package-ecosystem: "github-actions"
- directory: "/"
- schedule:
- # Check for updates to GitHub Actions every weekday
- interval: "weekly"
-
- - package-ecosystem: "nuget" # See documentation for possible values
- directory: "/" # Location of package manifests
- schedule:
- interval: "weekly"
diff --git a/.github/workflows/build-test-analyse.yml b/.github/workflows/build-test-analyse.yml
deleted file mode 100644
index 4a150d27..00000000
--- a/.github/workflows/build-test-analyse.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-name: Build, Test, and Analyse
-
-on:
- workflow_call:
-
-jobs:
- build:
- name: Build & Test
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v3
-
- - uses: actions/cache@v3
- with:
- path: |
- ~/.nuget/packages
- !~/.nuget/packages/unwanted
- key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
- restore-keys: |
- ${{ runner.os }}-nuget-
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v3
- with:
- global-json-file: global.json
-
- - name: Install dependencies
- run: dotnet restore --locked-mode
-
- - name: Build
- run: dotnet build -c Release --no-restore
-
- - name: Test
- run: dotnet test -c Release --no-restore --collect:"XPlat Code Coverage" --logger "trx;LogFilePrefix=TestResults" --results-directory TestResults -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
-
- - name: upload TestResults
- uses: actions/upload-artifact@v3
- with:
- name: test-results-${{ github.sha }}
- path: |
- ./TestResults/*.trx
- ./TestResults/**/coverage.opencover.xml
diff --git a/.github/workflows/dependabot-packagelock-update.yml b/.github/workflows/dependabot-packagelock-update.yml
deleted file mode 100644
index 306c008b..00000000
--- a/.github/workflows/dependabot-packagelock-update.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-name: Restore package-lock on Dependabot PR
-
-on:
- pull_request:
-
-jobs:
- restore:
- name: Update packages.lock.json files
- if: contains(github.head_ref, 'dependabot') && contains(github.actor, 'dependabot[bot]')
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v3
- with:
- ref: ${{ github.head_ref }}
- token: ${{ secrets.DEPENDABOT_PAT }}
- - uses: actions/setup-dotnet@v3
- with:
- global-json-file: global.json
-
- - run: dotnet restore --force-evaluate
- - id: diff
- continue-on-error: true
- run: |
- git add -N .
- git diff --name-only --exit-code
- - if: steps.diff.outcome == 'failure'
- run: |
- git config user.email "49699333+dependabot[bot]@users.noreply.github.com"
- git config user.name "dependabot[bot]"
- git add .
- git commit -m "chore(deps): update packages.lock.json"
- git push
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
deleted file mode 100644
index 65ba8654..00000000
--- a/.github/workflows/deploy.yml
+++ /dev/null
@@ -1,80 +0,0 @@
-name: Deploy to Amazon ECS
-
-on:
- push:
- branches: "release-*"
-
-env:
- AWS_REGION: eu-west-2
- ECS_SERVICE: answerking-dotnet-api-ecs-service
- ECS_CLUSTER: answerking-dotnet-api-ecs-cluster
- ECS_TASK_DEFINITION: task-definition.json
- CONTAINER_NAME: answerking-dotnet-api-container
- REGISTRY: ghcr.io
- IMAGE_NAME: ${{ github.repository }}
-
-jobs:
- deploy:
- name: Deploy
- runs-on: ubuntu-latest
- environment: production
-
- steps:
- - name: Checkout
- uses: actions/checkout@v3
-
- - name: Configure AWS credentials
- uses: aws-actions/configure-aws-credentials@v2
- with:
- aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
- aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- aws-region: ${{ env.AWS_REGION }}
-
- - name: Log in to github registry
- uses: docker/login-action@v2
- with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Set version variable
- run: |
- echo "VERSION=$(echo $GITHUB_REF | sed -e 's#refs/heads/release-#v#g')" >> $GITHUB_ENV
-
- - name: Extract metadata (tags, labels) for Docker
- id: meta
- uses: docker/metadata-action@v4
- with:
- images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
- tags: |
- type=raw, value=latest
- type=raw, value=${{ env.VERSION }}
-
- - name: Build image
- id: build-image
- uses: docker/build-push-action@v2
- with:
- context: .
- file: ./dockerfile
- push: true
- tags: ${{ steps.meta.outputs.tags }}
- labels: ${{ steps.meta.outputs.labels }}
-
- - name: Download task definition
- run: aws ecs describe-task-definition --task-definition answerking-dotnet-api-task --query taskDefinition > ${{ env.ECS_TASK_DEFINITION }}
-
- - name: Fill in the new image ID in the Amazon ECS task definition
- id: task-def
- uses: aws-actions/amazon-ecs-render-task-definition@v1
- with:
- task-definition: ${{ env.ECS_TASK_DEFINITION }}
- container-name: ${{ env.CONTAINER_NAME }}
- image: ${{ steps.build-image.outputs.imageid }}
-
- - name: Deploy Amazon ECS task definition
- uses: aws-actions/amazon-ecs-deploy-task-definition@v1
- with:
- task-definition: ${{ env.ECS_TASK_DEFINITION }}
- service: ${{ env.ECS_SERVICE }}
- cluster: ${{ env.ECS_CLUSTER }}
- wait-for-service-stability: true
\ No newline at end of file
diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml
index 41bb9ce1..73e94962 100644
--- a/.github/workflows/pull-request.yml
+++ b/.github/workflows/pull-request.yml
@@ -3,13 +3,32 @@ name: On Pull Request
on:
pull_request:
branches:
- - main
- develop
+ paths:
+ - '**.cs'
+ - '**.csproj'
+
+env:
+ DOTNET_VERSION: '7.0.102' # The .NET SDK version to use
jobs:
- pull-request:
- name: test, report, and analyse
- uses: ./.github/workflows/build-test-analyse.yml
- secrets: inherit
+ build-and-test:
+
+ name: build-and-test
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+ - name: Setup .NET Core
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: ${{ env.DOTNET_VERSION }}
- # job can be expanded to handle seperate pr actions such as close/merge/conflict
+ - name: Install dependencies
+ run: dotnet restore
+
+ - name: Build
+ run: dotnet build --configuration Debug --no-restore
+
+ - name: Run NUnit tests
+ run: dotnet test --no-build --configuration Debug --filter Category=IntegrationTests
diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml
deleted file mode 100644
index 3c854471..00000000
--- a/.github/workflows/push.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-name: On Push
-
-on:
- push
-
-jobs:
- push-develop:
- name: Build, Test & Analyse
- if: github.ref == format('refs/heads/{0}', github.event.repository.default_branch)
- uses: ./.github/workflows/build-test-analyse.yml
- secrets: inherit
-
- build:
- name: Build & Test
- if: github.ref != format('refs/heads/{0}', github.event.repository.default_branch)
- runs-on: ubuntu-latest
-
- steps:
- - uses: actions/checkout@v3
-
- - uses: actions/cache@v3
- with:
- path: |
- ~/.nuget/packages
- !~/.nuget/packages/unwanted
- key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
- restore-keys: |
- ${{ runner.os }}-nuget-
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v3
- with:
- global-json-file: global.json
-
- - name: Install dependencies
- run: dotnet restore --locked-mode
-
- - name: Build
- run: dotnet build -c Release --no-restore
-
- - name: Test
- run: dotnet test -c Release --no-restore
diff --git a/.github/workflows/workflow-dispatch.yaml b/.github/workflows/workflow-dispatch.yaml
new file mode 100644
index 00000000..a4a71584
--- /dev/null
+++ b/.github/workflows/workflow-dispatch.yaml
@@ -0,0 +1,32 @@
+name: Workflow Dispatch
+
+on:
+ push:
+ branches:
+ - develop
+ workflow_dispatch: # Manual Trigger
+
+env:
+ DOTNET_VERSION: '7.0.102' # The .NET SDK version to use
+
+jobs:
+ build-and-test:
+
+ name: build-and-test
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+ - name: Setup .NET Core
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: ${{ env.DOTNET_VERSION }}
+
+ - name: Install dependencies
+ run: dotnet restore
+
+ - name: Build
+ run: dotnet build --configuration Debug --no-restore -nowarn:1591
+
+ - name: Run NUnit tests
+ run: dotnet test --no-build --configuration Debug --filter Category=IntegrationTests
diff --git a/Answer.King.sln b/Answer.King.sln
index 1f902ca4..90b83bb9 100644
--- a/Answer.King.sln
+++ b/Answer.King.sln
@@ -21,13 +21,21 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Answer.King.Api.UnitTests",
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionItems", "{B13B327D-8EF3-4B55-A522-648B46176A62}"
ProjectSection(SolutionItems) = preProject
- global.json = global.json
- README.md = README.md
.editorconfig = .editorconfig
Directory.Build.props = Directory.Build.props
+ global.json = global.json
+ README.md = README.md
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Answer.King.Infrastructure.UnitTests", "tests\Answer.King.Infrastructure.UnitTests\Answer.King.Infrastructure.UnitTests.csproj", "{C1175B84-7518-404B-9DA7-85D0BF051C6B}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Answer.King.Infrastructure.UnitTests", "tests\Answer.King.Infrastructure.UnitTests\Answer.King.Infrastructure.UnitTests.csproj", "{C1175B84-7518-404B-9DA7-85D0BF051C6B}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Answer.King.IntegrationTests", "tests\Answer.King.IntegrationTests\Answer.King.IntegrationTests.csproj", "{E794D3D2-E323-48AB-A507-FA361E060618}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A7366D48-A55F-477D-AC26-8D061A839D37}"
+ ProjectSection(SolutionItems) = preProject
+ .github\workflows\pull-request.yml = .github\workflows\pull-request.yml
+ .github\workflows\workflow-dispatch.yaml = .github\workflows\workflow-dispatch.yaml
+ EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -123,6 +131,18 @@ Global
{C1175B84-7518-404B-9DA7-85D0BF051C6B}.Release|x64.Build.0 = Release|Any CPU
{C1175B84-7518-404B-9DA7-85D0BF051C6B}.Release|x86.ActiveCfg = Release|Any CPU
{C1175B84-7518-404B-9DA7-85D0BF051C6B}.Release|x86.Build.0 = Release|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Debug|x64.Build.0 = Debug|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Debug|x86.Build.0 = Debug|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Release|x64.ActiveCfg = Release|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Release|x64.Build.0 = Release|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Release|x86.ActiveCfg = Release|Any CPU
+ {E794D3D2-E323-48AB-A507-FA361E060618}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -135,6 +155,7 @@ Global
{625E8357-4943-46FB-AB0E-C25CF0A3AB02} = {F3A9A152-CBD9-4004-9745-1478B24AEB9B}
{4C8C0B44-7F02-4F69-A3BA-0AD7E9231BAD} = {F3A9A152-CBD9-4004-9745-1478B24AEB9B}
{C1175B84-7518-404B-9DA7-85D0BF051C6B} = {F3A9A152-CBD9-4004-9745-1478B24AEB9B}
+ {E794D3D2-E323-48AB-A507-FA361E060618} = {F3A9A152-CBD9-4004-9745-1478B24AEB9B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B0807BAF-430C-45E0-89FB-DB6ABAF9D5C4}
diff --git a/src/Answer.King.Api/Answer.King.Api.csproj b/src/Answer.King.Api/Answer.King.Api.csproj
index acb8251d..eb8ec4ba 100644
--- a/src/Answer.King.Api/Answer.King.Api.csproj
+++ b/src/Answer.King.Api/Answer.King.Api.csproj
@@ -53,14 +53,11 @@
+
-
-
-
-
diff --git a/src/Answer.King.Api/Program.cs b/src/Answer.King.Api/Program.cs
index d6035c72..b379a1e5 100644
--- a/src/Answer.King.Api/Program.cs
+++ b/src/Answer.King.Api/Program.cs
@@ -114,3 +114,8 @@
app.MapHealthChecks("/health");
app.Run();
+
+#pragma warning disable SA1601
+public partial class Program
+{
+}
diff --git a/src/Answer.King.Domain/Answer.King.Domain.csproj b/src/Answer.King.Domain/Answer.King.Domain.csproj
index f17dbec5..7097e66d 100644
--- a/src/Answer.King.Domain/Answer.King.Domain.csproj
+++ b/src/Answer.King.Domain/Answer.King.Domain.csproj
@@ -20,7 +20,7 @@
- 1701;1702
+ 1701;1702;1591
diff --git a/tests/Answer.King.IntegrationTests/Answer.King.IntegrationTests.csproj b/tests/Answer.King.IntegrationTests/Answer.King.IntegrationTests.csproj
new file mode 100644
index 00000000..9d469228
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Answer.King.IntegrationTests.csproj
@@ -0,0 +1,47 @@
+
+
+
+ net7.0
+ enable
+
+ false
+
+
+
+ true
+ $(NoWarn);CS1591;CS1573
+ False
+ False
+
+
+
+ CA1707;CS1591;CS1573;CS1591
+ False
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/Answer.King.IntegrationTests/POCO/ErrorResponse.cs b/tests/Answer.King.IntegrationTests/POCO/ErrorResponse.cs
new file mode 100644
index 00000000..0c9d5782
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/POCO/ErrorResponse.cs
@@ -0,0 +1,12 @@
+namespace Answer.King.IntegrationTests.POCO;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+internal class ErrorResponse
+{
+ public required object Errors { get; set; }
+ public required int Status { get; set; }
+}
diff --git a/tests/Answer.King.IntegrationTests/TestData/DataHelper.cs b/tests/Answer.King.IntegrationTests/TestData/DataHelper.cs
new file mode 100644
index 00000000..e8743b17
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/TestData/DataHelper.cs
@@ -0,0 +1,16 @@
+namespace Answer.King.IntegrationTests.TestData;
+
+using System;
+using System.Linq;
+using Answer.King.Api.RequestModels;
+
+internal class DataHelper
+{
+ public static Order GetOrderData(string name)
+ {
+ var orderData = OrdersData.AllOrders.FirstOrDefault(x => x.Name.Contains(name)) ?? throw new Exception("Order data cannot be found");
+ {
+ return orderData.Order;
+ }
+ }
+}
diff --git a/tests/Answer.King.IntegrationTests/TestData/OrderData.cs b/tests/Answer.King.IntegrationTests/TestData/OrderData.cs
new file mode 100644
index 00000000..9a7bf626
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/TestData/OrderData.cs
@@ -0,0 +1,193 @@
+namespace Answer.King.IntegrationTests.TestData;
+using System.Collections.Generic;
+using Answer.King.Api.RequestModels;
+
+public class OrderData
+{
+ public required string Name;
+ public required Order Order;
+}
+
+public static class OrdersData
+{
+ public static List AllOrders = new()
+ {
+ new OrderData()
+ {
+ Name = "Single_Line_Order",
+ Order = new Order()
+ {
+ LineItems = new List()
+ {
+ new LineItem()
+ {
+ ProductId = 1,
+ Quantity = 1,
+ },
+ },
+ },
+ },
+
+ new OrderData()
+ {
+ Name = "Multiple_Products_Order",
+ Order = new Order()
+ {
+ LineItems = new List()
+ {
+ new LineItem()
+ {
+ ProductId = 1,
+ Quantity = 1,
+ },
+ new LineItem()
+ {
+ ProductId = 2,
+ Quantity = 1,
+ },
+ new LineItem()
+ {
+ ProductId = 5,
+ Quantity = 1,
+ },
+ },
+ },
+ },
+
+ new OrderData()
+ {
+ Name = "Multiple_Same_Product_Multiple_Lines_Order",
+ Order = new Order()
+ {
+ LineItems = new List()
+ {
+ new LineItem()
+ {
+ ProductId = 2,
+ Quantity = 1,
+ },
+ new LineItem()
+ {
+ ProductId = 2,
+ Quantity = 1,
+ },
+ new LineItem()
+ {
+ ProductId = 2,
+ Quantity = 1,
+ },
+ },
+ },
+ },
+
+ new OrderData()
+ {
+ Name = "Multiple_Same_Product_Same_Line_Order",
+ Order = new Order()
+ {
+ LineItems = new List()
+ {
+ new LineItem()
+ {
+ ProductId = 5,
+ Quantity = 10,
+ },
+ },
+ },
+ },
+
+ new OrderData()
+ {
+ Name = "Fail_Retired_Product_Order",
+ Order = new Order()
+ {
+ LineItems = new List()
+ {
+ new LineItem()
+ {
+ ProductId = 3,
+ Quantity = 1,
+ },
+ },
+ },
+ },
+
+ new OrderData()
+ {
+ Name = "Fail_Invalid_Product_Id",
+ Order = new Order()
+ {
+ LineItems = new List()
+ {
+ new LineItem()
+ {
+ ProductId = 0,
+ Quantity = 5,
+ },
+ },
+ },
+ },
+
+ new OrderData()
+ {
+ Name = "Fail_No_Product_Line",
+ Order = new Order()
+ {
+ LineItems = new List()
+ {
+ new LineItem()
+ {
+ Quantity = 5,
+ },
+ },
+ },
+ },
+
+ new OrderData()
+ {
+ Name = "Fail_No_Quantity_Line",
+ Order = new Order()
+ {
+ LineItems = new List()
+ {
+ new LineItem()
+ {
+ ProductId = 2,
+ },
+ },
+ },
+ },
+
+ new OrderData()
+ {
+ Name = "Fail_No_Quantity",
+ Order = new Order()
+ {
+ LineItems = new List()
+ {
+ new LineItem()
+ {
+ ProductId = 2,
+ Quantity = 0,
+ },
+ },
+ },
+ },
+
+ new OrderData()
+ {
+ Name = "Fail_Negative_Quantity",
+ Order = new Order()
+ {
+ LineItems = new List()
+ {
+ new LineItem()
+ {
+ ProductId = 2,
+ Quantity = -100,
+ },
+ },
+ },
+ },
+ };
+}
diff --git a/tests/Answer.King.IntegrationTests/TestSettings.json b/tests/Answer.King.IntegrationTests/TestSettings.json
new file mode 100644
index 00000000..35f53b79
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/TestSettings.json
@@ -0,0 +1,3 @@
+{
+ "baseUrl": "https://localhost:44333"
+}
diff --git a/tests/Answer.King.IntegrationTests/Tests/AnswerKingPostOrder.cs b/tests/Answer.King.IntegrationTests/Tests/AnswerKingPostOrder.cs
new file mode 100644
index 00000000..9135d611
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Tests/AnswerKingPostOrder.cs
@@ -0,0 +1,82 @@
+using Answer.King.IntegrationTests.POCO;
+using Answer.King.IntegrationTests.TestData;
+using Answer.King.IntegrationTests.Utilities;
+using FluentAssertions;
+using Newtonsoft.Json.Linq;
+using Snapshooter.NUnit;
+using static RestAssured.Dsl;
+
+namespace Answer.King.IntegrationTests.Tests;
+[TestFixture, Category("IntegrationTests")]
+public class AnswerKingPostOrder : BaseTestClass
+{
+ [Parallelizable(scope: ParallelScope.Self)]
+ [Test]
+ public void GetAllOrders()
+ {
+ Given(this.Client)
+ .When()
+ .Get("https://localhost:44333/api/orders")
+ .Then()
+ .StatusCode(200);
+ }
+
+ [TestCase("Single_Line_Order", "5.99")]
+ [TestCase("Multiple_Products_Order", "18.97")]
+ [TestCase("Multiple_Same_Product_Multiple_Lines_Order", "8.97")]
+ [TestCase("Multiple_Same_Product_Same_Line_Order", "99.9")]
+ public void ProductOrder_Success(string name, string orderTotal)
+ {
+ var orderRequest = DataHelper.GetOrderData(name);
+
+ JObject orderResponse = (JObject)Given(this.Client)
+ .Body(orderRequest)
+ .When()
+ .Post("https://localhost:44333/api/orders")
+ .Then()
+ .StatusCode(201)
+ .DeserializeTo(typeof(JObject));
+
+ Snapshot.Match(orderResponse, matchOptions => matchOptions
+ .IgnoreField("id")
+ .IgnoreField("createdOn")
+ .IgnoreField("lastUpdated"));
+
+ orderResponse?.SelectToken("orderTotal")?.ToString().Should().Be(orderTotal);
+ }
+
+
+ //[TestCase("Fail_Retired_Product_Order")]
+ [TestCase("Fail_Invalid_Product_Id")]
+ [TestCase("Fail_No_Product_Line")]
+ //[TestCase("Fail_No_Quantity_Line")]
+ //[TestCase("Fail_No_Quantity")]
+ [TestCase("Fail_Negative_Quantity")]
+ public void ProductOrder_Fail(string name)
+ {
+ var orderRequest = DataHelper.GetOrderData(name);
+
+ var orderResponse = (ErrorResponse)Given(this.Client)
+ .Body(orderRequest)
+ .When()
+ .Post("https://localhost:44333/api/orders")
+ .Then()
+ .StatusCode(400)
+ .DeserializeTo(typeof(ErrorResponse));
+
+ Snapshot.Match(orderResponse);
+ }
+
+ [Test]
+ public void ProductOrder_Fail_NoBody()
+ {
+ var response = (ErrorResponse)Given(this.Client)
+ .When()
+ .Post("https://localhost:44333/api/orders")
+ .Then()
+ .StatusCode(400)
+ .DeserializeTo(typeof(ErrorResponse));
+
+ Snapshot.Match(response);
+ }
+}
diff --git a/tests/Answer.King.IntegrationTests/Tests/DataBaseTests.cs b/tests/Answer.King.IntegrationTests/Tests/DataBaseTests.cs
new file mode 100644
index 00000000..3a163cc6
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Tests/DataBaseTests.cs
@@ -0,0 +1,96 @@
+namespace Answer.King.IntegrationTests.Tests;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using FluentAssertions;
+using FluentAssertions.Extensions;
+using Npgsql;
+
+//The tests in here are mocked data to practice how I could do DB testing and assertions with a working SQL DB
+
+[TestFixture]
+public class BeeKeeperDBTests
+{
+ [Test]
+ public async Task OrderAssertionsProductId()
+ {
+
+ var connectionString = "Server=localhost;Port=5432;User Id=postgres;Password=penguin;Database=postgres;";
+ await using var dataSource = NpgsqlDataSource.Create(connectionString);
+ await using var command = dataSource.CreateCommand("SELECT product_id from public.orders WHERE order_id = 4");
+ await using var reader = await command.ExecuteReaderAsync();
+
+ List resultList = new List();
+
+ while (await reader.ReadAsync())
+ {
+ var result = reader.GetInt32(0);
+ resultList.Add(result);
+ }
+
+ string resultString = string.Join(", ", resultList);
+
+ //Assertions that can be done on a int list
+ resultList.Count().Should().Be(3);
+
+ //Assertions that can't be done on a list
+ resultString.Should().ContainAll("1", "2", "5");
+ Console.WriteLine(resultString);
+ }
+
+ [Test]
+ public async Task OrderAssertionsProductName()
+ {
+
+ var connectionString = "Server=localhost;Port=5432;User Id=postgres;Password=penguin;Database=postgres;";
+ await using var dataSource = NpgsqlDataSource.Create(connectionString);
+ await using var command = dataSource.CreateCommand("SELECT pro_name from public.orders WHERE order_id = 4");
+ await using var reader = await command.ExecuteReaderAsync();
+
+ List resultList = new List();
+
+ while (await reader.ReadAsync())
+ {
+ var result = reader.GetString(0);
+ resultList.Add(result);
+ }
+
+ string resultString = string.Join(", ", resultList);
+
+ //Assertions that can be done on a list
+ resultList.Should().Contain("Fish", "Chips", "Cheese Burger");
+ resultList.Should().NotContain("Gravy");
+
+ //Assertions that can't be done on a list
+ Console.WriteLine(resultString);
+ }
+
+ [Test]
+ public async Task OrderAssertionsProductQuantity()
+ {
+
+ var connectionString = "Server=localhost;Port=5432;User Id=postgres;Password=penguin;Database=postgres;";
+ await using var dataSource = NpgsqlDataSource.Create(connectionString);
+ await using var command = dataSource.CreateCommand("SELECT quantity from public.orders WHERE order_id = 4");
+ await using var reader = await command.ExecuteReaderAsync();
+
+ List resultList = new List();
+
+ while (await reader.ReadAsync())
+ {
+ var result = reader.GetInt32(0);
+ resultList.Add(result);
+ result.Should().Be(1);
+ }
+
+ string resultString = string.Join(", ", resultList);
+
+ //Assertions that can be done on a list
+ resultList.Count().Should().Be(3);
+
+ //Assertions that can't be done on a list
+ resultString.Should().Contain("1", Exactly.Thrice());
+ Console.WriteLine(resultString);
+ }
+}
diff --git a/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_Fail_Invalid_Product_Id.snap b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_Fail_Invalid_Product_Id.snap
new file mode 100644
index 00000000..8a0c96e6
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_Fail_Invalid_Product_Id.snap
@@ -0,0 +1,8 @@
+{
+ "Errors": {
+ "lineItems[0].productId": [
+ "'product Id' must not be empty."
+ ]
+ },
+ "Status": 400
+}
diff --git a/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_Fail_Negative_Quantity.snap b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_Fail_Negative_Quantity.snap
new file mode 100644
index 00000000..30b6829b
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_Fail_Negative_Quantity.snap
@@ -0,0 +1,8 @@
+{
+ "Errors": {
+ "lineItems[0].quantity": [
+ "'quantity' must be greater than or equal to '0'."
+ ]
+ },
+ "Status": 400
+}
diff --git a/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_Fail_No_Product_Line.snap b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_Fail_No_Product_Line.snap
new file mode 100644
index 00000000..8a0c96e6
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_Fail_No_Product_Line.snap
@@ -0,0 +1,8 @@
+{
+ "Errors": {
+ "lineItems[0].productId": [
+ "'product Id' must not be empty."
+ ]
+ },
+ "Status": 400
+}
diff --git a/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_NoBody.snap b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_NoBody.snap
new file mode 100644
index 00000000..2b3c1924
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Fail_NoBody.snap
@@ -0,0 +1,11 @@
+{
+ "Errors": {
+ "": [
+ "A non-empty request body is required."
+ ],
+ "createOrder": [
+ "The createOrder field is required."
+ ]
+ },
+ "Status": 400
+}
diff --git a/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Multiple_Products_Order_18.97.snap b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Multiple_Products_Order_18.97.snap
new file mode 100644
index 00000000..26bdb2a7
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Multiple_Products_Order_18.97.snap
@@ -0,0 +1,39 @@
+{
+ "id": 4,
+ "createdOn": "2023-12-14T14:42:34.3890478Z",
+ "lastUpdated": "2023-12-14T14:42:34.3892504Z",
+ "orderStatus": "Created",
+ "orderTotal": 18.97,
+ "lineItems": [
+ {
+ "product": {
+ "id": 1,
+ "name": "Fish",
+ "description": "Delicious and satisfying.",
+ "price": 5.99
+ },
+ "quantity": 1,
+ "subTotal": 5.99
+ },
+ {
+ "product": {
+ "id": 2,
+ "name": "Chips",
+ "description": "Nothing more to say.",
+ "price": 2.99
+ },
+ "quantity": 1,
+ "subTotal": 2.99
+ },
+ {
+ "product": {
+ "id": 5,
+ "name": "Cheese Burger",
+ "description": "Plain burger with cheese",
+ "price": 9.99
+ },
+ "quantity": 1,
+ "subTotal": 9.99
+ }
+ ]
+}
diff --git a/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Multiple_Same_Product_Multiple_Lines_Order_8.97.snap b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Multiple_Same_Product_Multiple_Lines_Order_8.97.snap
new file mode 100644
index 00000000..3ce8cbe7
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Multiple_Same_Product_Multiple_Lines_Order_8.97.snap
@@ -0,0 +1,19 @@
+{
+ "id": 4,
+ "createdOn": "2023-12-14T14:42:34.498567Z",
+ "lastUpdated": "2023-12-14T14:42:34.4985818Z",
+ "orderStatus": "Created",
+ "orderTotal": 8.97,
+ "lineItems": [
+ {
+ "product": {
+ "id": 2,
+ "name": "Chips",
+ "description": "Nothing more to say.",
+ "price": 2.99
+ },
+ "quantity": 3,
+ "subTotal": 8.97
+ }
+ ]
+}
diff --git a/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Multiple_Same_Product_Same_Line_Order_99.9.snap b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Multiple_Same_Product_Same_Line_Order_99.9.snap
new file mode 100644
index 00000000..98ee1a65
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Multiple_Same_Product_Same_Line_Order_99.9.snap
@@ -0,0 +1,19 @@
+{
+ "id": 4,
+ "createdOn": "2023-12-14T14:42:34.6058543Z",
+ "lastUpdated": "2023-12-14T14:42:34.6058679Z",
+ "orderStatus": "Created",
+ "orderTotal": 99.9,
+ "lineItems": [
+ {
+ "product": {
+ "id": 5,
+ "name": "Cheese Burger",
+ "description": "Plain burger with cheese",
+ "price": 9.99
+ },
+ "quantity": 10,
+ "subTotal": 99.9
+ }
+ ]
+}
diff --git a/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Single_Line_Order_5.99.snap b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Single_Line_Order_5.99.snap
new file mode 100644
index 00000000..1c2c5cac
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Tests/__snapshots__/AnswerKingPostOrder.ProductOrder_Success_Single_Line_Order_5.99.snap
@@ -0,0 +1,19 @@
+{
+ "id": 4,
+ "createdOn": "2023-12-14T14:42:34.2471198Z",
+ "lastUpdated": "2023-12-14T14:42:34.2471326Z",
+ "orderStatus": "Created",
+ "orderTotal": 5.99,
+ "lineItems": [
+ {
+ "product": {
+ "id": 1,
+ "name": "Fish",
+ "description": "Delicious and satisfying.",
+ "price": 5.99
+ },
+ "quantity": 1,
+ "subTotal": 5.99
+ }
+ ]
+}
diff --git a/tests/Answer.King.IntegrationTests/Usings.cs b/tests/Answer.King.IntegrationTests/Usings.cs
new file mode 100644
index 00000000..32445676
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Usings.cs
@@ -0,0 +1 @@
+global using NUnit.Framework;
diff --git a/tests/Answer.King.IntegrationTests/Utilities/BaseTestClass.cs b/tests/Answer.King.IntegrationTests/Utilities/BaseTestClass.cs
new file mode 100644
index 00000000..e1e1c592
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Utilities/BaseTestClass.cs
@@ -0,0 +1,40 @@
+namespace Answer.King.IntegrationTests.Utilities;
+using System;
+using System.IO;
+using System.Net.Http;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.Mvc.Testing;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+
+public class BaseTestClass : IDisposable
+{
+ public HttpClient Client;
+
+ public string testDb { get; set; } = $"Answer.King.{Guid.NewGuid()}.db";
+
+ [SetUp]
+ public void Setup()
+ {
+ this.Client = new WebApplicationFactory().WithWebHostBuilder(builder =>
+ {
+ builder.UseSetting("ConnectionStrings:AnswerKing", $"filename=db/{this.testDb};Connection=Shared");
+ }).CreateClient();
+ }
+
+ [TearDown]
+ public void TearDown()
+ {
+ if (Directory.Exists(Path.Combine(TestContext.CurrentContext.TestDirectory, "db")))
+ {
+ File.Delete(Path.Combine(TestContext.CurrentContext.TestDirectory, $"db/{testDb}"));
+ File.Delete(Path.Combine(TestContext.CurrentContext.TestDirectory, "db/Answer.King-log.db"));
+ }
+ this.Client.Dispose();
+ }
+
+ public void Dispose()
+ {
+ GC.SuppressFinalize(this);
+ }
+}
diff --git a/tests/Answer.King.IntegrationTests/Utilities/ResponseFormatter.cs b/tests/Answer.King.IntegrationTests/Utilities/ResponseFormatter.cs
new file mode 100644
index 00000000..03e811f1
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/Utilities/ResponseFormatter.cs
@@ -0,0 +1,12 @@
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Answer.King.IntegrationTests.Utilities;
+
+internal static class ResponseFormatter
+{
+ public static string FormatResponse(string response)
+ {
+ return JToken.Parse(response).ToString(Formatting.Indented);
+ }
+}
diff --git a/tests/Answer.King.IntegrationTests/packages.lock.json b/tests/Answer.King.IntegrationTests/packages.lock.json
new file mode 100644
index 00000000..bd866937
--- /dev/null
+++ b/tests/Answer.King.IntegrationTests/packages.lock.json
@@ -0,0 +1,1230 @@
+{
+ "version": 1,
+ "dependencies": {
+ "net7.0": {
+ "coverlet.collector": {
+ "type": "Direct",
+ "requested": "[3.1.2, )",
+ "resolved": "3.1.2",
+ "contentHash": "wuLDIDKD5XMt0A7lE31JPenT7QQwZPFkP5rRpdJeblyXZ9MGLI8rYjvm5fvAKln+2/X+4IxxQDxBtwdrqKNLZw=="
+ },
+ "Dapper": {
+ "type": "Direct",
+ "requested": "[2.1.24, )",
+ "resolved": "2.1.24",
+ "contentHash": "/2t2vsdJyZRsk13AsWigZpsuFvEwK+o3v862cEULXoww905gyKhJFSuwmZI/4Ui9COX9ZCFCI09UHyH4wVYl3A=="
+ },
+ "FluentAssertions": {
+ "type": "Direct",
+ "requested": "[6.12.0, )",
+ "resolved": "6.12.0",
+ "contentHash": "ZXhHT2YwP9lajrwSKbLlFqsmCCvFJMoRSK9t7sImfnCyd0OB3MhgxdoMcVqxbq1iyxD6mD2fiackWmBb7ayiXQ==",
+ "dependencies": {
+ "System.Configuration.ConfigurationManager": "4.4.0"
+ }
+ },
+ "LiteDB": {
+ "type": "Direct",
+ "requested": "[5.0.15, )",
+ "resolved": "5.0.15",
+ "contentHash": "nucyfCOGSATH553BxplxExP3BOqEwmHt0B57426EIaQjD3CC1Odb52VVCGgTxyYaD2oe3B/cJk8jDo6XiBJqPg=="
+ },
+ "Microsoft.AspNetCore.Mvc.Testing": {
+ "type": "Direct",
+ "requested": "[7.0.14, )",
+ "resolved": "7.0.14",
+ "contentHash": "N92DFBdGQE/Uqdl4DrptnnoS2go4poPgM1BFy/oSuKfJOJWUc2wJBOwBmAlGhKvuq4gc2/Wm5Ggt1ivsDdSydQ==",
+ "dependencies": {
+ "Microsoft.AspNetCore.TestHost": "7.0.14",
+ "Microsoft.Extensions.DependencyModel": "7.0.0",
+ "Microsoft.Extensions.Hosting": "7.0.1"
+ }
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[17.3.2, )",
+ "resolved": "17.3.2",
+ "contentHash": "apR0ha1T8FujBwq1P8i/DOZjbI5XhcP/i8As4NnVztVSpZG8GtWRPCstcmgkUkBpvEfcrrDPlJWbuZY+Hl1hSg==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "17.3.2",
+ "Microsoft.TestPlatform.TestHost": "17.3.2"
+ }
+ },
+ "Npgsql.EntityFrameworkCore.PostgreSQL": {
+ "type": "Direct",
+ "requested": "[7.0.11, )",
+ "resolved": "7.0.11",
+ "contentHash": "cHEgEz0ldXc9wVANs8sJqC+3eilqefrkasCBgaVT0tyj8tb1p3/pwy2ngjboNkDG3M0z+xJsJ4jC5p8wySAM3w==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "[7.0.11, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Abstractions": "[7.0.11, 8.0.0)",
+ "Microsoft.EntityFrameworkCore.Relational": "[7.0.11, 8.0.0)",
+ "Npgsql": "7.0.6"
+ }
+ },
+ "NUnit": {
+ "type": "Direct",
+ "requested": "[3.13.3, )",
+ "resolved": "3.13.3",
+ "contentHash": "KNPDpls6EfHwC3+nnA67fh5wpxeLb3VLFAfLxrug6JMYDLHH6InaQIWR7Sc3y75d/9IKzMksH/gi08W7XWbmnQ==",
+ "dependencies": {
+ "NETStandard.Library": "2.0.0"
+ }
+ },
+ "NUnit.Analyzers": {
+ "type": "Direct",
+ "requested": "[3.3.0, )",
+ "resolved": "3.3.0",
+ "contentHash": "gyRc0qmXUIjHaTcHTWZDHK5ccOF6cLEOGQJ6Fj5JWKh8/W1XzPFC6zGXRu5sDNSxfKaNeQRmkdz3M73ArQkY1A=="
+ },
+ "NUnit3TestAdapter": {
+ "type": "Direct",
+ "requested": "[4.2.1, )",
+ "resolved": "4.2.1",
+ "contentHash": "kgH8VKsrcZZgNGQXRpVCrM7TnNz9li3b/snH+YmnXUNqsaWa1Xw9EQWHpbzq4Li2FbTjTE/E5N5HdLNXzZ8BpQ=="
+ },
+ "RestAssured.Net": {
+ "type": "Direct",
+ "requested": "[4.2.0, )",
+ "resolved": "4.2.0",
+ "contentHash": "+Jpw19OUkGbbWQ5rn3CM4cWsKnTEFnM4FXhBsy4EOe77c2mxdL73xTOR8QsSo4zTC7k8XGJslgMehkD/bUTWAw==",
+ "dependencies": {
+ "HtmlAgilityPack": "1.11.54",
+ "Microsoft.AspNetCore.StaticFiles": "2.2.0",
+ "Microsoft.AspNetCore.WebUtilities": "2.2.0",
+ "NHamcrest": "3.4.0",
+ "NJsonSchema": "10.9.0",
+ "Newtonsoft.Json": "13.0.3",
+ "Stubble.Core": "1.10.8",
+ "System.Text.Encodings.Web": "6.0.0"
+ }
+ },
+ "Snapshooter.NUnit": {
+ "type": "Direct",
+ "requested": "[0.13.0, )",
+ "resolved": "0.13.0",
+ "contentHash": "V5cvmiwunt6sNgA96elmwhhUBf0/Z7nla5lXQKv9GzIMhyQbq2rhM8k50CXWi0pbyL4ZgatCWUqSbRK/ifq/FQ==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.7.0",
+ "NUnit": "3.13.3",
+ "Snapshooter": "0.13.0"
+ }
+ },
+ "StyleCop.Analyzers": {
+ "type": "Direct",
+ "requested": "[1.2.0-beta.435, )",
+ "resolved": "1.2.0-beta.435",
+ "contentHash": "TADk7vdGXtfTnYCV7GyleaaRTQjfoSfZXprQrVMm7cSJtJbFc1QIbWPyLvrgrfGdfHbGmUPvaN4ODKNxg2jgPQ==",
+ "dependencies": {
+ "StyleCop.Analyzers.Unstable": "1.2.0.435"
+ }
+ },
+ "AWS.Logger.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "3.3.0",
+ "contentHash": "iOvXAfPfmZZ/WdOasrZVznDp76PskEd9JyVswe1c01PwkuNj2qm7EueHJmEOwdgqc3bj5jW1TIIqXnthRryGwA==",
+ "dependencies": {
+ "AWS.Logger.Core": "3.1.0",
+ "Microsoft.Extensions.Configuration": "2.1.0",
+ "Microsoft.Extensions.DependencyInjection": "2.1.0",
+ "Microsoft.Extensions.Logging": "2.1.0"
+ }
+ },
+ "AWS.Logger.Core": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "ruKBNASE/IBnVZhyeUy0ueuxq1CuMtDHNpU2cqGUg12SxvClkqqY/PVXyM6I4ltsMh/1tF8WdpTBj9k3Fw/PgA==",
+ "dependencies": {
+ "AWSSDK.CloudWatchLogs": "3.7.0.5"
+ }
+ },
+ "AWS.Logger.SeriLog": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "zslsNobQR3j2o+NrlcuVmrWLNyoyeZKIs5n0tO4+Hz6Z2Wcr9FqqgMxzXpKzkYBzQzfYCB/SlovOGvuWEqnnew==",
+ "dependencies": {
+ "AWS.Logger.Core": "3.1.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "1.0.0",
+ "Serilog": "2.6.0"
+ }
+ },
+ "AWSSDK.CloudWatchLogs": {
+ "type": "Transitive",
+ "resolved": "3.7.104.40",
+ "contentHash": "KDl4kHFiTkjGwtU31dgUbhS/ouYRHk/qftZZs+SR3rnR4lQFduvRYN/zWUUppti6MC1XT6uA7JTbE7UzEqjrkQ==",
+ "dependencies": {
+ "AWSSDK.Core": "[3.7.106.4, 4.0.0)"
+ }
+ },
+ "AWSSDK.Core": {
+ "type": "Transitive",
+ "resolved": "3.7.106.4",
+ "contentHash": "U+U7j0k5NxXXjjD9yxsVN5MjRpYlTSMyaDjLqwJaaeoFhycdkJ81t3Baret6VBwIGMmYpjAerk79vLAhvwU5Wg=="
+ },
+ "AWSSDK.Extensions.NETCore.Setup": {
+ "type": "Transitive",
+ "resolved": "3.7.5",
+ "contentHash": "T+JpP2dFbyAFgm5htiwx9oaGZ9+IVGz5xpBCzCbLWW4lwmVWn3o1Wzi4xUpAo+TULWlzf4CBhuJ9chO0YtAGVw==",
+ "dependencies": {
+ "AWSSDK.Core": "3.7.6",
+ "Microsoft.Extensions.Configuration.Abstractions": "2.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "2.0.0"
+ }
+ },
+ "FluentValidation": {
+ "type": "Transitive",
+ "resolved": "11.2.1",
+ "contentHash": "ZrQD0TGd0mHqf/zErZOEaba8cBeInaJj02nqinO+0La3uE08sJ5ScTYqsCbdx9fLHsX8rh+5KH5RtL2eOUS+OA=="
+ },
+ "FluentValidation.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "11.2.2",
+ "contentHash": "jU/MHXqg9cnOU18dY75vorP2c2WDKMan4zegOPsoc34xZVjzTEtXP0fKvkDEdeaChUVooNWuRr27u9w3sYbEFA==",
+ "dependencies": {
+ "FluentValidation": "11.2.1",
+ "FluentValidation.DependencyInjectionExtensions": "11.2.1"
+ }
+ },
+ "FluentValidation.DependencyInjectionExtensions": {
+ "type": "Transitive",
+ "resolved": "11.2.1",
+ "contentHash": "WqR2kt0OidUCg9xS+YOoiDmdCu7EnYLLgQb/bX+5fTTVor+90dWmr1OdJaWlLZvg2nbwV9EfxA9FZp91+JmQtg==",
+ "dependencies": {
+ "FluentValidation": "11.2.1",
+ "Microsoft.Extensions.Dependencyinjection.Abstractions": "2.1.0"
+ }
+ },
+ "HtmlAgilityPack": {
+ "type": "Transitive",
+ "resolved": "1.11.54",
+ "contentHash": "bgB79N4urc4D7hrD4R+Qk6CjPiYOfs6vfXNsmw3nCcfQEQvBQGjfAcl5k/tB1ZP1hA0d7xXs0jK8xAXV36IVUg=="
+ },
+ "Microsoft.AspNetCore.Hosting.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "ubycklv+ZY7Kutdwuy1W4upWcZ6VFR8WUXU7l7B2+mvbDBBPAcfpi+E+Y5GFe+Q157YfA3C49D2GCjAZc7Mobw==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Hosting.Server.Abstractions": "2.2.0",
+ "Microsoft.AspNetCore.Http.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "2.2.0"
+ }
+ },
+ "Microsoft.AspNetCore.Hosting.Server.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "1PMijw8RMtuQF60SsD/JlKtVfvh4NORAhF4wjysdABhlhTrYmtgssqyncR0Stq5vqtjplZcj6kbT4LRTglt9IQ==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http.Features": "2.2.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
+ }
+ },
+ "Microsoft.AspNetCore.Http.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "Nxs7Z1q3f1STfLYKJSVXCs1iBl+Ya6E8o4Oy1bCxJ/rNI44E/0f6tbsrVqAWfB7jlnJfyaAtIalBVxPKUPQb4Q==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http.Features": "2.2.0",
+ "System.Text.Encodings.Web": "4.5.0"
+ }
+ },
+ "Microsoft.AspNetCore.Http.Extensions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "2DgZ9rWrJtuR7RYiew01nGRzuQBDaGHGmK56Rk54vsLLsCdzuFUPqbDTJCS1qJQWTbmbIQ9wGIOjpxA1t0l7/w==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Http.Abstractions": "2.2.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0",
+ "Microsoft.Net.Http.Headers": "2.2.0",
+ "System.Buffers": "4.5.0"
+ }
+ },
+ "Microsoft.AspNetCore.Http.Features": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "ziFz5zH8f33En4dX81LW84I6XrYXKf9jg6aM39cM+LffN9KJahViKZ61dGMSO2gd3e+qe5yBRwsesvyqlZaSMg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "2.2.0"
+ }
+ },
+ "Microsoft.AspNetCore.StaticFiles": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "byZDrjir6Co5EoWbraQyG0qbPCUG6XgGYQstipMF9lucOAjq/mqnIyt8B8iMWnin/ghZoOln9Y01af4rUAwOhA==",
+ "dependencies": {
+ "Microsoft.AspNetCore.Hosting.Abstractions": "2.2.0",
+ "Microsoft.AspNetCore.Http.Extensions": "2.2.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
+ "Microsoft.Extensions.WebEncoders": "2.2.0"
+ }
+ },
+ "Microsoft.AspNetCore.TestHost": {
+ "type": "Transitive",
+ "resolved": "7.0.14",
+ "contentHash": "E069WhxLYu28AMo2Sa8eWUDJHP7Yt9PG5wy42WVaDaswcoTwPo0kbGXf29sNI7ftR8fro7MwDq90C2IZzqdfEA==",
+ "dependencies": {
+ "System.IO.Pipelines": "7.0.0"
+ }
+ },
+ "Microsoft.AspNetCore.WebUtilities": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "9ErxAAKaDzxXASB/b5uLEkLgUWv1QbeVxyJYEHQwMaxXOeFFVkQxiq8RyfVcifLU7NR0QY0p3acqx4ZpYfhHDg==",
+ "dependencies": {
+ "Microsoft.Net.Http.Headers": "2.2.0",
+ "System.Text.Encodings.Web": "4.5.0"
+ }
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "17.3.2",
+ "contentHash": "+CeYNY9hYNRgv1wAID5koeDVob1ZOrOYfRRTLxU9Zm5ZMDMkMZ8wzXgakxVv+jtk8tPdE8Ze9vVE+czMKapv/Q=="
+ },
+ "Microsoft.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.EntityFrameworkCore": {
+ "type": "Transitive",
+ "resolved": "7.0.11",
+ "contentHash": "r7YGITjQ7v1hYtUXIavjSx+T1itKVPUFAIBN7HaKNjbR8x+gep8w9H3NEchglJOh1woZR4b2MhbSo2YFRZwZDg==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore.Abstractions": "7.0.11",
+ "Microsoft.EntityFrameworkCore.Analyzers": "7.0.11",
+ "Microsoft.Extensions.Caching.Memory": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0"
+ }
+ },
+ "Microsoft.EntityFrameworkCore.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.11",
+ "contentHash": "IoOnhycZ0/VtLowf0HgB0cujxwksokzkS3/5108AHOcbntHUTqwxtCjG4E4FCly/45G+mxb+4PxBdFZhA49lwQ=="
+ },
+ "Microsoft.EntityFrameworkCore.Analyzers": {
+ "type": "Transitive",
+ "resolved": "7.0.11",
+ "contentHash": "Qexum5safSSfijx6P1QSq5bVJPPTM/uf7lQmpL/shkiozEC/0FzqNaVUfFpbNN8zsO1jMFYbeDMF4cxJMlTT9w=="
+ },
+ "Microsoft.EntityFrameworkCore.Relational": {
+ "type": "Transitive",
+ "resolved": "7.0.11",
+ "contentHash": "yHEEyah1XARStV1SJOsdKj8ieoMCZ0MkNuQaLfWONMWmbqwuDohfGQZk/FuzdT4aO/lJrUYiXbBSFv0ACzphEw==",
+ "dependencies": {
+ "Microsoft.EntityFrameworkCore": "7.0.11",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.ApiDescription.Server": {
+ "type": "Transitive",
+ "resolved": "6.0.5",
+ "contentHash": "Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw=="
+ },
+ "Microsoft.Extensions.Caching.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "IeimUd0TNbhB4ded3AbgBLQv2SnsiVugDyGV1MvspQFVlA07nDC7Zul7kcwH5jWN3JiTcp/ySE83AIJo8yfKjg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Caching.Memory": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xpidBs2KCE2gw1JrD0quHE72kvCaI3xFql5/Peb2GRtUuZX+dYPoK/NTdVMiM67Svym0M0Df9A3xyU0FbMQhHw==",
+ "dependencies": {
+ "Microsoft.Extensions.Caching.Abstractions": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Transitive",
+ "resolved": "7.0.3",
+ "contentHash": "1eRFwJBrkkncTpvh6mivB8zg4uBVm6+Y6stEJERrVEqZZc8Hvf+N1iIgj2ySYDUQko4J1Gw1rLf1M8bG83F0eA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.CommandLine": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "a8Iq8SCw5m8W5pZJcPCgBpBO4E89+NaObPng+ApIhrGSv9X4JPrcFAaGM4sDgR0X83uhLgsNJq8VnGP/wqhr8A==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.EnvironmentVariables": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "RIkfqCkvrAogirjsqSrG1E1FxgrLsOZU2nhRbl07lrajnxzSU2isj2lwQah0CtCbLWo/pOIukQzM1GfneBUnxA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.FileExtensions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Json": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.UserSecrets": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "33HPW1PmB2RS0ietBQyvOxjp4O3wlt+4tIs8KPyMn1kqp04goiZGa7+3mc69NRLv6bphkLDy0YR7Uw3aZyf8Zw==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.Json": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ },
+ "Microsoft.Extensions.DependencyModel": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "oONNYd71J3LzkWc4fUHl3SvMfiQMYUCo/mDHDEu76hYYxdhdrPYv6fvGv9nnKVyhE9P0h20AU8RZB5OOWQcAXg==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileProviders.Physical": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
+ "dependencies": {
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.FileSystemGlobbing": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w=="
+ },
+ "Microsoft.Extensions.Hosting": {
+ "type": "Transitive",
+ "resolved": "7.0.1",
+ "contentHash": "aoeMou6XSW84wiqd895OdaGyO9PfH6nohQJ0XBcshRDafbdIU6PQIVl8TpOCssPYq3ciRseP5064hbFyCR9J9w==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "7.0.3",
+ "Microsoft.Extensions.Configuration.CommandLine": "7.0.0",
+ "Microsoft.Extensions.Configuration.EnvironmentVariables": "7.0.0",
+ "Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
+ "Microsoft.Extensions.Configuration.Json": "7.0.0",
+ "Microsoft.Extensions.Configuration.UserSecrets": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Physical": "7.0.0",
+ "Microsoft.Extensions.Hosting.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Configuration": "7.0.0",
+ "Microsoft.Extensions.Logging.Console": "7.0.0",
+ "Microsoft.Extensions.Logging.Debug": "7.0.0",
+ "Microsoft.Extensions.Logging.EventLog": "7.0.0",
+ "Microsoft.Extensions.Logging.EventSource": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.1",
+ "System.Diagnostics.DiagnosticSource": "7.0.1"
+ }
+ },
+ "Microsoft.Extensions.Hosting.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "43n9Je09z0p/7ViPxfRqs5BUItRLNVh5b6JH40F2Agkh2NBsY/jpNYTtbCcxrHCsA3oRmbR6RJBzUutB4VZvNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.FileProviders.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ },
+ "Microsoft.Extensions.Logging.Configuration": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "FLDA0HcffKA8ycoDQLJuCNGIE42cLWPxgdQGRBaSzZrYTkMBjnf9zrr8pGT06psLq9Q+RKWmmZczQ9bCrXEBcA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "7.0.0",
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Options.ConfigurationExtensions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Console": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "qt5n8bHLZPUfuRnFxJKW5q9ZwOTncdh96rtWzWpX3Y/064MlxzCSw2ELF5Jlwdo+Y4wK3I47NmUTFsV7Sg8rqg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Configuration": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.Debug": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "tFGGyPDpJ8ZdQdeckCArP7nZuoY3am9zJWuvp4OD1bHq65S0epW9BNHzAWeaIO4eYwWnGm1jRNt3vRciH8H6MA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.EventLog": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "Rp7cYL9xQRVTgjMl77H5YDxszAaO+mlA+KT0BnLSVhuCoKQQOOs1sSK2/x8BK2dZ/lKeAC/CVF+20Ef2dpKXwg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "System.Diagnostics.EventLog": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging.EventSource": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "MxQXndQFviIyOPqyMeLNshXnmqcfzEHE2wWcr7BF1unSisJgouZ3tItnq+aJLGPojrW8OZSC/ZdRoR6wAq+c7w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0",
+ "System.Text.Json": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "7.0.1",
+ "contentHash": "pZRDYdN1FpepOIfHU62QoBQ6zdAoTvnjxFfqAzEd9Jhb2dfhA5i6jeTdgGgcgTWFRC7oT0+3XrbQu4LjvgX1Nw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options.ConfigurationExtensions": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "95UnxZkkFdXxF6vSrtJsMHCzkDeSMuUWGs2hDT54cX+U5eVajrCJ3qLyQRW+CtpTt5OJ8bmTvpQVHu1DLhH+cA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
+ },
+ "Microsoft.Extensions.WebEncoders": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "V8XcqYcpcdBAxUhLeyYcuKmxu4CtNQA9IphTnARpQGhkop4A93v2XgM3AtaVVJo3H2cDWxWM6aeO8HxkifREqw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Options": "2.2.0",
+ "System.Text.Encodings.Web": "4.5.0"
+ }
+ },
+ "Microsoft.Net.Http.Headers": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "iZNkjYqlo8sIOI0bQfpsSoMTmB/kyvmV2h225ihyZT33aTp48ZpF6qYnXxzSXmHt8DpBAwBTX+1s1UFLbYfZKg==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "2.2.0",
+ "System.Buffers": "4.5.0"
+ }
+ },
+ "Microsoft.NETCore.Platforms": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
+ },
+ "Microsoft.NETCore.Targets": {
+ "type": "Transitive",
+ "resolved": "1.0.1",
+ "contentHash": "rkn+fKobF/cbWfnnfBOQHKVKIOpxMZBvlSHkqDWgBpwGDcLRduvs3D9OLGeV6GWGvVwNlVi2CBbTjuPmtHvyNw=="
+ },
+ "Microsoft.OpenApi": {
+ "type": "Transitive",
+ "resolved": "1.2.3",
+ "contentHash": "Nug3rO+7Kl5/SBAadzSMAVgqDlfGjJZ0GenQrLywJ84XGKO0uRqkunz5Wyl0SDwcR71bAATXvSdbdzPrYRYKGw=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "17.3.2",
+ "contentHash": "DJEIfSA2GDC+2m42vKGNR2hm+Uhta4SpCsLZVVvYIiYMjxtk7GzNnv82qvE4SCW3kIYllMg2D0rr8juuj/f7AA==",
+ "dependencies": {
+ "NuGet.Frameworks": "5.11.0",
+ "System.Reflection.Metadata": "1.6.0"
+ }
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "17.3.2",
+ "contentHash": "113J19v31pIx+PzmdEw67cWTZWh/YApnprbclFeat6szNbnpKOKG7Ap4PX5LT6E5Da+xONyilxvx2HZPpEaXPQ==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "17.3.2",
+ "Newtonsoft.Json": "9.0.1"
+ }
+ },
+ "Namotion.Reflection": {
+ "type": "Transitive",
+ "resolved": "2.1.2",
+ "contentHash": "7tSHAzX8GWKy0qrW6OgQWD7kAZiqzhq+m1503qczuwuK6ZYhOGCQUxw+F3F4KkRM70aB6RMslsRVSCFeouIehw==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.3.0"
+ }
+ },
+ "NETStandard.Library": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "7jnbRU+L08FXKMxqUflxEXtVymWvNOrS8yHgu9s6EM8Anr6T/wIX4nZ08j/u3Asz+tCufp3YVwFSEvFTPYmBPA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "NHamcrest": {
+ "type": "Transitive",
+ "resolved": "3.4.0",
+ "contentHash": "N6apzNQXrGW5PJQjpRSSK4QD5poMaVmBRpteDaSEaUUTUK6fwcQeMKZ+oOrv+LZgs481TWKMTGsQTvz5ipgGzQ=="
+ },
+ "NJsonSchema": {
+ "type": "Transitive",
+ "resolved": "10.9.0",
+ "contentHash": "IBPo6Srxn2MEcIFM3HdM4QImrJbsIeujENQyzHL2Pv6wLsKSYAyAEilecRqaLOhoy3snEiPLx7hhv7opbhOxKQ==",
+ "dependencies": {
+ "Namotion.Reflection": "2.1.2",
+ "Newtonsoft.Json": "9.0.1"
+ }
+ },
+ "Npgsql": {
+ "type": "Transitive",
+ "resolved": "7.0.6",
+ "contentHash": "TAqvwRnm3NJ0QvN7cvu6geJkbI0XPzGVRElVY5hF4gsgA+BnE12x6GM1TLhdeq+7ZKvvo3BD8jXKnXmr3tvdEw==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging.Abstractions": "6.0.0"
+ }
+ },
+ "NuGet.Frameworks": {
+ "type": "Transitive",
+ "resolved": "5.11.0",
+ "contentHash": "eaiXkUjC4NPcquGWzAGMXjuxvLwc6XGKMptSyOGQeT0X70BUZObuybJFZLA0OfTdueLd3US23NBPTBb6iF3V1Q=="
+ },
+ "Serilog": {
+ "type": "Transitive",
+ "resolved": "2.12.0",
+ "contentHash": "xaiJLIdu6rYMKfQMYUZgTy8YK7SMZjB4Yk50C/u//Z4OsvxkUfSPJy4nknfvwAC34yr13q7kcyh4grbwhSxyZg=="
+ },
+ "Serilog.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "iMwFUJDN+/yWIPz4TKCliagJ1Yn//SceCYCzgdPwe/ECYUwb5/WUL8cTzRKV+tFwxGjLEV/xpm0GupS5RwbhSQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "5.0.0",
+ "Microsoft.Extensions.Logging": "5.0.0",
+ "Serilog": "2.10.0",
+ "Serilog.Extensions.Hosting": "5.0.1",
+ "Serilog.Formatting.Compact": "1.1.0",
+ "Serilog.Settings.Configuration": "3.3.0",
+ "Serilog.Sinks.Console": "4.0.1",
+ "Serilog.Sinks.Debug": "2.0.0",
+ "Serilog.Sinks.File": "5.0.0"
+ }
+ },
+ "Serilog.Enrichers.Process": {
+ "type": "Transitive",
+ "resolved": "2.0.2",
+ "contentHash": "T9EjKKLsL6qC/3eOLUAKEPBLEqPDmt5BLXaQdPMaxJzuex+MeXA8DuAiPboUaftp3kbnCN4ZgZpDvs+Fa7OHuw==",
+ "dependencies": {
+ "Serilog": "2.3.0"
+ }
+ },
+ "Serilog.Enrichers.Thread": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "85lWsGRJpRxvKT6j/H67no55SUBsBIvp556TKuBTGhjtoPeq+L7j/sDWbgAtvT0p7u7/phJyX6j35PQ4Vtqw0g==",
+ "dependencies": {
+ "Serilog": "2.3.0"
+ }
+ },
+ "Serilog.Extensions.Hosting": {
+ "type": "Transitive",
+ "resolved": "5.0.1",
+ "contentHash": "o0VUyt3npAqOJaZ6CiWLFeLYs3CYJwfcAqaUqprzsmj7qYIvorcn8cZLVR8AQX6vzX7gee2bD0sQeA17iO2/Aw==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "3.1.8",
+ "Microsoft.Extensions.Hosting.Abstractions": "3.1.8",
+ "Microsoft.Extensions.Logging.Abstractions": "3.1.8",
+ "Serilog": "2.10.0",
+ "Serilog.Extensions.Logging": "3.1.0"
+ }
+ },
+ "Serilog.Extensions.Logging": {
+ "type": "Transitive",
+ "resolved": "3.1.0",
+ "contentHash": "IWfem7wfrFbB3iw1OikqPFNPEzfayvDuN4WP7Ue1AVFskalMByeWk3QbtUXQR34SBkv1EbZ3AySHda/ErDgpcg==",
+ "dependencies": {
+ "Microsoft.Extensions.Logging": "2.0.0",
+ "Serilog": "2.9.0"
+ }
+ },
+ "Serilog.Extensions.Logging.File": {
+ "type": "Transitive",
+ "resolved": "3.0.0",
+ "contentHash": "bUYjMHn7NhpK+/8HDftG7+G5hpWzD49XTSvLoUFZGgappDa6FoseqFOsLrjLRjwe1zM+igH5mySFJv3ntb+qcg==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "6.0.0",
+ "Microsoft.Extensions.Configuration.Binder": "6.0.0",
+ "Serilog": "2.10.0",
+ "Serilog.Extensions.Logging": "3.1.0",
+ "Serilog.Formatting.Compact": "1.1.0",
+ "Serilog.Sinks.Async": "1.5.0",
+ "Serilog.Sinks.RollingFile": "3.3.0"
+ }
+ },
+ "Serilog.Formatting.Compact": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "pNroKVjo+rDqlxNG5PXkRLpfSCuDOBY0ri6jp9PLe505ljqwhwZz8ospy2vWhQlFu5GkIesh3FcDs4n7sWZODA==",
+ "dependencies": {
+ "Serilog": "2.8.0"
+ }
+ },
+ "Serilog.Settings.Configuration": {
+ "type": "Transitive",
+ "resolved": "3.4.0",
+ "contentHash": "ULloXSiapTb3zOWodC0G4WRDQzA5RjMEfZNZzOZpH8kC3t/lrISLblklIpKC44CX0sMDF40MnJwTIQ3pFQFs4g==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Binder": "2.0.0",
+ "Microsoft.Extensions.DependencyModel": "3.0.0",
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.Async": {
+ "type": "Transitive",
+ "resolved": "1.5.0",
+ "contentHash": "csHYIqAwI4Gy9oAhXYRwxGrQEAtBg3Ep7WaCzsnA1cZuBZjVAU0n7hWaJhItjO7hbLHh/9gRVxALCUB4Dv+gZw==",
+ "dependencies": {
+ "Serilog": "2.9.0"
+ }
+ },
+ "Serilog.Sinks.AwsCloudWatch": {
+ "type": "Transitive",
+ "resolved": "4.0.171",
+ "contentHash": "eJ0ZKLWbrOQ38u3/+vLZwTrBt6KtWthdvR6s0SmvbuupO3kr5x93UL3klzhp0Ewe/CwfYcYZ88hygJQ+Xe89Mg==",
+ "dependencies": {
+ "AWSSDK.CloudWatchLogs": "3.7.0.13",
+ "Serilog": "2.10.0",
+ "Serilog.Sinks.PeriodicBatching": "2.3.0"
+ }
+ },
+ "Serilog.Sinks.Console": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "K6N5q+5fetjnJPvCmkWOpJ/V8IEIoMIB1s86OzBrbxwTyHxdx3pmz4H+8+O/Dc/ftUX12DM1aynx/dDowkwzqg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.Debug": {
+ "type": "Transitive",
+ "resolved": "2.0.0",
+ "contentHash": "Y6g3OBJ4JzTyyw16fDqtFcQ41qQAydnEvEqmXjhwhgjsnG/FaJ8GUqF5ldsC/bVkK8KYmqrPhDO+tm4dF6xx4A==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.File": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "uwV5hdhWPwUH1szhO8PJpFiahqXmzPzJT/sOijH/kFgUx+cyoDTMM8MHD0adw9+Iem6itoibbUXHYslzXsLEAg==",
+ "dependencies": {
+ "Serilog": "2.10.0"
+ }
+ },
+ "Serilog.Sinks.PeriodicBatching": {
+ "type": "Transitive",
+ "resolved": "2.3.0",
+ "contentHash": "UYKSjTMTlUY9T3OgzMmLDLD+z0qPfgvq/RvG0rKfyz+O+Zrjw3X/Xpv14J4WMcGVsOjUaR+k8n2MdmqVpJtI6A==",
+ "dependencies": {
+ "Serilog": "2.0.0",
+ "System.Collections.Concurrent": "4.0.12",
+ "System.Threading.Timer": "4.0.1"
+ }
+ },
+ "Serilog.Sinks.RollingFile": {
+ "type": "Transitive",
+ "resolved": "3.3.0",
+ "contentHash": "2lT5X1r3GH4P0bRWJfhA7etGl8Q2Ipw9AACvtAHWRUSpYZ42NGVyHoVs2ALBZ/cAkkS+tA4jl80Zie144eLQPg==",
+ "dependencies": {
+ "Serilog.Sinks.File": "3.2.0",
+ "System.IO": "4.1.0",
+ "System.IO.FileSystem.Primitives": "4.0.1",
+ "System.Runtime.InteropServices": "4.1.0",
+ "System.Text.Encoding.Extensions": "4.0.11"
+ }
+ },
+ "Snapshooter": {
+ "type": "Transitive",
+ "resolved": "0.13.0",
+ "contentHash": "8r9eYsiZngbnGRVN72YnZqtdlybsqK8QIQMYrhSFuG9pR8pJkgk3k7Ep9VvE0+G/3bGk2hnm8OjvfDmFXd6V3w==",
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.1"
+ }
+ },
+ "Stubble.Core": {
+ "type": "Transitive",
+ "resolved": "1.10.8",
+ "contentHash": "M7pXv3xz3TwhR8PJwieVncotjdC0w8AhviKPpGn2/DHlSNuTKTQdA5Ngmu3datOoeI2jXYEi3fhgncM7UueTWw==",
+ "dependencies": {
+ "Microsoft.CSharp": "4.7.0",
+ "System.Collections.Immutable": "5.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "StyleCop.Analyzers.Unstable": {
+ "type": "Transitive",
+ "resolved": "1.2.0.435",
+ "contentHash": "ouwPWZxbOV3SmCZxIRqHvljkSzkCyi1tDoMzQtDb/bRP8ctASV/iRJr+A2Gdj0QLaLmWnqTWDrH82/iP+X80Lg=="
+ },
+ "Swashbuckle.AspNetCore": {
+ "type": "Transitive",
+ "resolved": "6.5.0",
+ "contentHash": "FK05XokgjgwlCI6wCT+D4/abtQkL1X1/B9Oas6uIwHFmYrIO9WUD5aLC9IzMs9GnHfUXOtXZ2S43gN1mhs5+aA==",
+ "dependencies": {
+ "Microsoft.Extensions.ApiDescription.Server": "6.0.5",
+ "Swashbuckle.AspNetCore.Swagger": "6.5.0",
+ "Swashbuckle.AspNetCore.SwaggerGen": "6.5.0",
+ "Swashbuckle.AspNetCore.SwaggerUI": "6.5.0"
+ }
+ },
+ "Swashbuckle.AspNetCore.Annotations": {
+ "type": "Transitive",
+ "resolved": "6.5.0",
+ "contentHash": "EcHd1z2pEdnpaBMTI9qjVxk6mFVGVMZ1n0ySC3fjrkXCQQ8O9fMdt9TxPJRKyjiTiTjvO9700jKjmyl+hPBinQ==",
+ "dependencies": {
+ "Swashbuckle.AspNetCore.SwaggerGen": "6.5.0"
+ }
+ },
+ "Swashbuckle.AspNetCore.Swagger": {
+ "type": "Transitive",
+ "resolved": "6.5.0",
+ "contentHash": "XWmCmqyFmoItXKFsQSwQbEAsjDKcxlNf1l+/Ki42hcb6LjKL8m5Db69OTvz5vLonMSRntYO1XLqz0OP+n3vKnA==",
+ "dependencies": {
+ "Microsoft.OpenApi": "1.2.3"
+ }
+ },
+ "Swashbuckle.AspNetCore.SwaggerGen": {
+ "type": "Transitive",
+ "resolved": "6.5.0",
+ "contentHash": "Y/qW8Qdg9OEs7V013tt+94OdPxbRdbhcEbw4NiwGvf4YBcfhL/y7qp/Mjv/cENsQ2L3NqJ2AOu94weBy/h4KvA==",
+ "dependencies": {
+ "Swashbuckle.AspNetCore.Swagger": "6.5.0"
+ }
+ },
+ "Swashbuckle.AspNetCore.SwaggerUI": {
+ "type": "Transitive",
+ "resolved": "6.5.0",
+ "contentHash": "OvbvxX+wL8skxTBttcBsVxdh73Fag4xwqEU2edh4JMn7Ws/xJHnY/JB1e9RoCb6XpDxUF3hD9A0Z1lEUx40Pfw=="
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "pL2ChpaRRWI/p4LXyy4RgeWlYF2sgfj/pnVMvBqwNFr5cXg7CXNnWZWxrOONLg8VGdFB8oB+EG2Qw4MLgTOe+A=="
+ },
+ "System.Collections": {
+ "type": "Transitive",
+ "resolved": "4.0.11",
+ "contentHash": "YUJGz6eFKqS0V//mLt25vFGrrCvOnsXjlvFQs+KimpwNxug9x0Pzy4PlFMU3Q2IzqAa9G2L4LsK3+9vCBK7oTg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Collections.Concurrent": {
+ "type": "Transitive",
+ "resolved": "4.0.12",
+ "contentHash": "2gBcbb3drMLgxlI0fBfxMA31ec6AEyYCHygGse4vxceJan8mRIWeKJ24BFzN7+bi/NFTgdIgufzb94LWO5EERQ==",
+ "dependencies": {
+ "System.Collections": "4.0.11",
+ "System.Diagnostics.Debug": "4.0.11",
+ "System.Diagnostics.Tracing": "4.1.0",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Resources.ResourceManager": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Extensions": "4.1.0",
+ "System.Threading": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g=="
+ },
+ "System.Configuration.ConfigurationManager": {
+ "type": "Transitive",
+ "resolved": "4.4.0",
+ "contentHash": "gWwQv/Ug1qWJmHCmN17nAbxJYmQBM/E94QxKLksvUiiKB1Ld3Sc/eK1lgmbSjDFxkQhVuayI/cGFZhpBSodLrg==",
+ "dependencies": {
+ "System.Security.Cryptography.ProtectedData": "4.4.0"
+ }
+ },
+ "System.Diagnostics.Debug": {
+ "type": "Transitive",
+ "resolved": "4.0.11",
+ "contentHash": "w5U95fVKHY4G8ASs/K5iK3J5LY+/dLFd4vKejsnI/ZhBsWS9hQakfx3Zr7lRWKg4tAw9r4iktyvsTagWkqYCiw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Diagnostics.DiagnosticSource": {
+ "type": "Transitive",
+ "resolved": "7.0.1",
+ "contentHash": "T9SLFxzDp0SreCffRDXSAS5G+lq6E8qP4knHS2IBjwCdx2KEvGnGZsq7gFpselYOda7l6gXsJMD93TQsFj/URA=="
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "eUDP47obqQm3SFJfP6z+Fx2nJ4KKTQbXB4Q9Uesnzw9SbYdhjyoGXuvDn/gEmFY6N5Z3bFFbpAQGA7m6hrYJCw=="
+ },
+ "System.Diagnostics.Tracing": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "vDN1PoMZCkkdNjvZLql592oYJZgS7URcJzJ7bxeBgGtx5UtR5leNm49VmfHGqIffX4FKacHbI3H6UyNSHQknBg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Globalization": {
+ "type": "Transitive",
+ "resolved": "4.0.11",
+ "contentHash": "B95h0YLEL2oSnwF/XjqSWKnwKOy/01VWkNlsCeMTFJLLabflpGV26nK164eRs5GiaRSBGpOxQ3pKoSnnyZN5pg==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "3KlTJceQc3gnGIaHZ7UBZO26SHL1SHE4ddrmiwumFnId+CEHP+O8r386tZKaE6zlk5/mF8vifMBzHj9SaXN+mQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.IO.FileSystem.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.0.1",
+ "contentHash": "kWkKD203JJKxJeE74p8aF8y4Qc9r9WQx4C0cHzHPrY3fv/L/IhWnyCHaFJ3H1QPOH6A93whlQ2vG5nHlBDvzWQ==",
+ "dependencies": {
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.IO.Pipelines": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "jRn6JYnNPW6xgQazROBLSfpdoczRw694vO5kKvMcNnpXuolEixUyw6IBuBs2Y2mlSX/LdLvyyWmfXhaI3ND1Yg=="
+ },
+ "System.Reflection": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "JCKANJ0TI7kzoQzuwB/OoJANy1Lg338B6+JVacPl4TpUwi3cReg3nMLplMq2uqYfHFQpKIlHAUVAJlImZz/4ng==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.IO": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "1.6.0",
+ "contentHash": "COC1aiAJjCoA5GBF+QKL2uLqEBew4JsCkQmoHKbN3TlOZKa2fKLz5CpiRQKDz0RsAOEGsVKqOD5bomsXq/4STQ=="
+ },
+ "System.Reflection.Primitives": {
+ "type": "Transitive",
+ "resolved": "4.0.1",
+ "contentHash": "4inTox4wTBaDhB7V3mPvp9XlCbeGYWVEM9/fXALd52vNEAVisc1BoVWQPuUuD0Ga//dNbA/WeMy9u9mzLxGTHQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Resources.ResourceManager": {
+ "type": "Transitive",
+ "resolved": "4.0.1",
+ "contentHash": "TxwVeUNoTgUOdQ09gfTjvW411MF+w9MBYL7AtNVc+HtBCFlutPLhUCdZjNkjbhj3bNQWMdHboF0KIWEOjJssbA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Globalization": "4.0.11",
+ "System.Reflection": "4.1.0",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "v6c/4Yaa9uWsq+JMhnOFewrYkgdNHNG2eMKuNqRn8P733rNXeRCGvV5FkkjBXn2dbVkPXOsO0xjsEeM1q2zC0g==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1"
+ }
+ },
+ "System.Runtime.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "CUOHjTT/vgP0qGW22U4/hDlOqXmcPq5YicBaXdUR2UiUoLwBT+olO6we4DVbq57jeX5uXH2uerVZhf0qGj+sVQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.Handles": {
+ "type": "Transitive",
+ "resolved": "4.0.1",
+ "contentHash": "nCJvEKguXEvk2ymk1gqj625vVnlK3/xdGzx0vOKicQkoquaTBJTP13AIYkocSUwHCLNBwUbXTqTWGDxBTWpt7g==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Runtime.InteropServices": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "16eu3kjHS633yYdkjwShDHZLRNMKVi/s0bY8ODiqJ2RfMhDMAwxZaUaWVnZ2P71kr/or+X9o/xFWtNqz8ivieQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Reflection": "4.1.0",
+ "System.Reflection.Primitives": "4.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Runtime.Handles": "4.0.1"
+ }
+ },
+ "System.Security.Cryptography.ProtectedData": {
+ "type": "Transitive",
+ "resolved": "4.4.0",
+ "contentHash": "cJV7ScGW7EhatRsjehfvvYVBvtiSMKgN8bOVI0bQhnF5bU7vnHVIsH49Kva7i7GWaWYvmEzkYVk1TC+gZYBEog=="
+ },
+ "System.Text.Encoding": {
+ "type": "Transitive",
+ "resolved": "4.0.11",
+ "contentHash": "U3gGeMlDZXxCEiY4DwVLSacg+DFWCvoiX+JThA/rvw37Sqrku7sEFeVBBBMBnfB6FeZHsyDx85HlKL19x0HtZA==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Text.Encoding.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.0.11",
+ "contentHash": "jtbiTDtvfLYgXn8PTfWI+SiBs51rrmO4AAckx4KR6vFK9Wzf6tI8kcRdsYQNwriUeQ1+CtQbM1W4cMbLXnj/OQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0",
+ "System.Text.Encoding": "4.0.11"
+ }
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg=="
+ },
+ "System.Text.Json": {
+ "type": "Transitive",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
+ "dependencies": {
+ "System.Text.Encodings.Web": "7.0.0"
+ }
+ },
+ "System.Threading": {
+ "type": "Transitive",
+ "resolved": "4.0.11",
+ "contentHash": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==",
+ "dependencies": {
+ "System.Runtime": "4.1.0",
+ "System.Threading.Tasks": "4.0.11"
+ }
+ },
+ "System.Threading.Tasks": {
+ "type": "Transitive",
+ "resolved": "4.0.11",
+ "contentHash": "k1S4Gc6IGwtHGT8188RSeGaX86Qw/wnrgNLshJvsdNUOPP9etMmo8S07c+UlOAx4K/xLuN9ivA1bD0LVurtIxQ==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg=="
+ },
+ "System.Threading.Timer": {
+ "type": "Transitive",
+ "resolved": "4.0.1",
+ "contentHash": "saGfUV8uqVW6LeURiqxcGhZ24PzuRNaUBtbhVeuUAvky1naH395A/1nY0P2bWvrw/BreRtIB/EzTDkGBpqCwEw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.0.1",
+ "Microsoft.NETCore.Targets": "1.0.1",
+ "System.Runtime": "4.1.0"
+ }
+ },
+ "answer.king.api": {
+ "type": "Project",
+ "dependencies": {
+ "AWS.Logger.AspNetCore": "[3.3.0, )",
+ "AWS.Logger.SeriLog": "[3.2.0, )",
+ "AWSSDK.CloudWatchLogs": "[3.7.104.40, )",
+ "AWSSDK.Extensions.NETCore.Setup": "[3.7.5, )",
+ "Answer.King.Domain": "[1.0.0, )",
+ "Answer.King.Infrastructure": "[1.0.0, )",
+ "FluentValidation.AspNetCore": "[11.2.2, )",
+ "Serilog": "[2.12.0, )",
+ "Serilog.AspNetCore": "[6.1.0, )",
+ "Serilog.Enrichers.Process": "[2.0.2, )",
+ "Serilog.Enrichers.Thread": "[3.1.0, )",
+ "Serilog.Extensions.Logging": "[3.1.0, )",
+ "Serilog.Extensions.Logging.File": "[3.0.0, )",
+ "Serilog.Formatting.Compact": "[1.1.0, )",
+ "Serilog.Settings.Configuration": "[3.4.0, )",
+ "Serilog.Sinks.AwsCloudWatch": "[4.0.171, )",
+ "Serilog.Sinks.Console": "[4.1.0, )",
+ "Serilog.Sinks.File": "[5.0.0, )",
+ "Swashbuckle.AspNetCore": "[6.5.0, )",
+ "Swashbuckle.AspNetCore.Annotations": "[6.5.0, )"
+ }
+ },
+ "answer.king.domain": {
+ "type": "Project"
+ },
+ "answer.king.infrastructure": {
+ "type": "Project",
+ "dependencies": {
+ "Answer.King.Domain": "[1.0.0, )",
+ "LiteDB": "[5.0.15, )"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file