Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
166 commits
Select commit Hold shift + click to select a range
6819b3a
Create LICENSE - Add Apache License 2.0
lukegor Dec 12, 2023
25b3ed4
fix LICENSE
lukegor Dec 12, 2023
fce911a
clear, adjust properties, fix license
lukegor Dec 12, 2023
cdd5e49
Update README.md
lukegor Dec 14, 2023
6265c47
Correct docs, fix naming, start introducing interfaces, develop tests
lukegor Dec 16, 2023
7ade68f
improve POST endpoints logic
lukegor Dec 16, 2023
52cc5e0
develop tests, ensure model validation in POST and PUT requests
lukegor Dec 17, 2023
5623f0a
fixes and small adjustments
lukegor Dec 17, 2023
28437fa
fix errors, develop tests, change productId from autoincrement to Guid
lukegor Dec 17, 2023
d0fa2b0
Update README.md
lukegor Dec 18, 2023
619a10f
Update README.md
lukegor Dec 18, 2023
9aee794
upload swagger-docs.yaml
lukegor Dec 18, 2023
a4a63d2
Merge branch 'main' of github.com:lukegor/PriceNegotiationApp
lukegor Dec 18, 2023
e92ef9f
Update README.md
lukegor Dec 18, 2023
96718cc
Rename swagger-docs.yaml to openapi-docs.yaml
lukegor Dec 18, 2023
0f89553
Update README.md
lukegor Dec 18, 2023
4229225
Update README.md
lukegor Dec 18, 2023
e119dc2
small fixes
lukegor Dec 20, 2023
1ce9c66
small update
lukegor Dec 20, 2023
e4d2cbf
add policy-based authorization (especially resource-based authorizati…
lukegor Dec 23, 2023
1c0e2ac
small update
lukegor Dec 23, 2023
4395501
introduce Serilog, add logging in product and negotiation services, a…
lukegor Dec 25, 2023
d115645
adjustments, set Serilog configuration for development env, switching…
lukegor Dec 28, 2023
e37cff3
add fixtures for unit tests of services
lukegor Jan 7, 2024
5b8b440
develop unit tests of controllers, adjust fixtures, small API docs ad…
lukegor Jan 7, 2024
a43315e
add negotiation controller unit tests
lukegor Jan 13, 2024
8bec597
small fixes
lukegor Jan 18, 2024
065125b
Add DDD, OData, clean code, reorganize project structure
lukegor Oct 30, 2025
ff11fd3
migrate to .NET 10, fix authorization, improve validation, reorganize…
lukegor Feb 11, 2026
af6c6de
Reorganize project structure, fix input validation not executing, fix…
lukegor Feb 15, 2026
9185f04
Fix authorization, shorten documentation, add request cancellation
lukegor Mar 14, 2026
a51e1b3
Add grafana integration, fix registration
lukegor Apr 19, 2026
22c0257
Fix OData, add Bogus (randomize tests), improve integration tests, co…
lukegor Apr 24, 2026
58a149c
Add health checks, fix tests
lukegor May 3, 2026
acd3234
Add central package management, .editorconfig
lukegor Aug 23, 2026
2325c63
Add full modernization design spec
lukegor Aug 23, 2026
87ebb4c
Add full modernization implementation plan
lukegor Aug 23, 2026
176c5ad
Remove stale artifacts, empty legacy project folders, committed OpenA…
lukegor Aug 23, 2026
dc52f03
Restructure to 4+2 projects, centralize packages, wipe legacy sources
lukegor Aug 23, 2026
6dab2c3
Rebuild domain: Vogen IDs + Price VO, explicit negotiation lifecycle,…
lukegor Aug 23, 2026
a387ad6
Rebuild application layer: feature services, ports, error taxonomy, u…
lukegor Aug 23, 2026
e4b950a
Add PostgreSQL persistence: DbContext, snake_case configs, partial op…
lukegor Aug 23, 2026
e268731
Add hardened JWT issuance, Identity-backed account store, config-driv…
lukegor Aug 23, 2026
7abdb30
Wire API host: strict JWT validation, ProblemDetails handler, rate li…
lukegor Aug 23, 2026
3f7699d
Add auth and products minimal-API modules with built-in validation an…
lukegor Aug 23, 2026
a02d8a6
Complete API surface: negotiations lifecycle endpoints, cleaned launc…
lukegor Aug 23, 2026
3bcb52c
Add Testcontainers integration harness and end-to-end auth flow tests
lukegor Aug 23, 2026
871d0d6
Add products API integration matrix: RBAC, validation, filtering, pag…
lukegor Aug 23, 2026
a7141c5
Add negotiation lifecycle integration suite: limits, auto-reject, RBA…
lukegor Aug 23, 2026
74f3882
Add containerized deployment, GitHub Actions CI, Dependabot
lukegor Aug 23, 2026
882f523
Modernize README and finalize formatting
lukegor Aug 23, 2026
6513237
Refactor: transitive pin section in package manifest, domain-side val…
lukegor Aug 23, 2026
39a5722
Update design docs: validation moved from DataAnnotations to domain l…
lukegor Aug 23, 2026
63483fa
Distinguish error semantics: 422 for payload validation, 409 for stat…
lukegor Aug 23, 2026
257143d
clean .http
lukegor Aug 23, 2026
638270d
chore: remove stale build artifacts, ignore .env and logs, align Host…
lukegor Aug 24, 2026
8fca9a2
feat(persistence): cut over to per-module contexts, retire AppDbContext
lukegor Aug 24, 2026
dda91cb
refactor: extract BuildingBlocks shared kernel
lukegor Aug 24, 2026
d8de29e
refactor(modules): carve out Negotiations module with own context and…
lukegor Aug 24, 2026
dbbf9b9
refactor(modules): carve out Catalog module with own context
lukegor Aug 24, 2026
6bf217c
refactor(modules): carve out Identity module; delete legacy layered p…
lukegor Aug 24, 2026
bda49bf
refactor(host): rename Api to AppHost, finalize solution graph and pl…
lukegor Aug 24, 2026
da281eb
docs: modular monolith architecture, config and migration guide; pin …
lukegor Aug 24, 2026
15210f2
docs: add project structure restructure design spec
lukegor Aug 24, 2026
97d37ed
docs: rename shared kernel project to SharedKernel in design spec
lukegor Aug 24, 2026
3f5a199
docs: keep UserRoles in shared kernel as cross-cutting auth vocabulary
lukegor Aug 24, 2026
d576a16
docs: composition root gets InternalsVisibleTo privilege in design spec
lukegor Aug 24, 2026
7a36961
docs: add project structure restructure implementation plan
lukegor Aug 24, 2026
336b04d
refactor: rename AppHost project to Api
lukegor Aug 24, 2026
802d015
refactor: rename BuildingBlocks project to SharedKernel
lukegor Aug 24, 2026
323601a
refactor: move ProductQuery into Catalog module
lukegor Aug 24, 2026
f00ea26
feat: add shared seeding and design-time factory bases to SharedKernel
lukegor Aug 24, 2026
a13ea46
fix: reference EF Core package for shared design-time factory base
lukegor Aug 24, 2026
6597475
refactor: rebuild module seeders on shared seeding base
lukegor Aug 24, 2026
5078fc8
refactor: dedupe design-time DbContext factories onto shared base
lukegor Aug 24, 2026
81f9229
refactor: nest Negotiations features under Features/Negotiations
lukegor Aug 24, 2026
72b127a
refactor: fold Identity JWT auth plumbing into Features/Auth
lukegor Aug 24, 2026
c7880d1
refactor: enforce compile-time module ownership via internal visibility
lukegor Aug 24, 2026
1c5630a
chore: remove cruft and refresh docs after restructure
lukegor Aug 24, 2026
88a0edb
fix: add Test.Sdk so dotnet test actually runs integration tests
lukegor Aug 24, 2026
9e27fb0
style: fix using ordering after project renames
lukegor Aug 24, 2026
a4ea5dc
docs: audit of services/application/business logic + optimized design…
lukegor Aug 25, 2026
55c8600
docs: implementation plan for negotiation lifecycle redesign
lukegor Aug 25, 2026
79365e8
feat(shared): translate postgres unique violations into semantic conf…
lukegor Aug 25, 2026
1475cd1
feat(negotiations): explicit state machine with snapshotted policy an…
lukegor Aug 25, 2026
2f15e6a
refactor(identity): sync JWT generation and race-safe duplicate-email…
lukegor Aug 25, 2026
e1cb655
test(negotiations): cover withdraw lifecycle, staff outcome contract,…
lukegor Aug 25, 2026
f8ae9f6
docs: align negotiation lifecycle rules and status vocabulary with im…
lukegor Aug 25, 2026
91a3873
build(test): run xunit.v3 4.0.0 on Microsoft.Testing.Platform with MT…
lukegor Aug 25, 2026
7d8adb7
test(architecture): executable module-boundary rules via NetArchTest
lukegor Aug 25, 2026
63a5f66
test(architecture): replace NetArchTest with ArchUnitNET xUnitV3 rules
lukegor Aug 25, 2026
db36315
docs: business analysis — feature backlog and gap analysis
lukegor Aug 25, 2026
039be1d
docs: engineering experience and operations backlog
lukegor Aug 25, 2026
0cd20e8
docs: engineering hardening design (E-01/03/04/10/12/13/18, E-11 unco…
lukegor Aug 25, 2026
6f3ebd2
docs: implementation plan for engineering hardening items
lukegor Aug 25, 2026
8432887
build: centralize test project conventions in Directory.Build.props
lukegor Aug 25, 2026
1a360b3
build: pin dotnet sdk to the 10.0.3xx feature band
lukegor Aug 25, 2026
d5237ec
build: reproducible ci compilation with source link
lukegor Aug 25, 2026
ff70aae
feat(api): enrich request logs and suppress infrastructure noise
lukegor Aug 25, 2026
5165d4c
fix(api): culture-insensitive health path checks in log filter
lukegor Aug 25, 2026
756efa0
feat(api): readiness endpoint reports per-dependency detail
lukegor Aug 25, 2026
f5deecd
feat(ops): opt-in otlp export with aspire dashboard compose overlay
lukegor Aug 25, 2026
ba7d6db
feat(config): fail-fast startup validation for seeding, rate limiting…
lukegor Aug 25, 2026
b5cf417
style: formatting fixes from engineering hardening pass
lukegor Aug 25, 2026
c7b252f
feat: add nuget.config
lukegor Aug 25, 2026
2cc8eda
docs: bogus adoption and failure-diagnostics design
lukegor Aug 25, 2026
a6fd344
docs: bogus adoption implementation plan
lukegor Aug 25, 2026
0889b3d
test: deterministic fuzz facade with per-assembly output sinks
lukegor Aug 25, 2026
c1e3c7f
test: persist trx reports locally and as ci artifacts
lukegor Aug 25, 2026
ecd2363
test(catalog): bogus-driven product data with semantic boundaries pre…
lukegor Aug 25, 2026
1d6698e
test(identity): bogus-driven credentials plus whitespace email edges
lukegor Aug 25, 2026
5137a92
test(negotiations): seeded fakers with arrange dumps, numbers untouched
lukegor Aug 25, 2026
31bdaa9
test(integration): bogus identities, product data and cors origins
lukegor Aug 25, 2026
1d24c07
style: import ordering in TestKit
lukegor Aug 25, 2026
41ddbb6
feat(ops): token-protect local aspire dashboard instead of unsecured
lukegor Aug 25, 2026
2e9359d
fix(docker): target net10.0 on publish, copy editorconfig for analyze…
lukegor Aug 25, 2026
d8343f9
feat(ops): require api key on otlp ingestion, silencing unsecured-end…
lukegor Aug 25, 2026
a9a35cc
docs: aspire dashboard security field notes for ai agents
lukegor Aug 25, 2026
4e6dfa9
docs: generalize aspire security doc for cross-repo agent use
lukegor Aug 25, 2026
ffdccbd
docs: ddd audit and targeted tactical design
lukegor Aug 25, 2026
fa6752e
docs: ddd tactical polish implementation plan
lukegor Aug 25, 2026
fcfac67
refactor(negotiations): price value object inside aggregate, conversi…
lukegor Aug 25, 2026
efac126
docs(domain): pin deliberate designs — cross-aggregate uniqueness, an…
lukegor Aug 25, 2026
7c8f09e
test(architecture): guard domain/persistence leakage and repository c…
lukegor Aug 25, 2026
890699e
docs: tactical ddd laws added to architecture section
lukegor Aug 25, 2026
237ffc4
docs: handler extraction design — endpoints as transport adapters
lukegor Aug 25, 2026
d2e9f82
docs: handler extraction implementation plan
lukegor Aug 25, 2026
e90d9fd
refactor(negotiations): write-path handlers own persistence, endpoint…
lukegor Aug 25, 2026
34cafb6
refactor(negotiations): read and list handlers extracted
lukegor Aug 25, 2026
810a881
refactor(catalog): per-operation handlers own persistence
lukegor Aug 25, 2026
2f552ca
refactor(identity): register and login handlers own identity infrastr…
lukegor Aug 25, 2026
74fbcf3
test(architecture): enforce transport-only endpoints; docs and format…
lukegor Aug 25, 2026
b48be1a
docs(security): review and portfolio-hardening design
lukegor Aug 26, 2026
83418bd
docs(security): add ES256 signing migration to review scope
lukegor Aug 26, 2026
6356144
docs(security): security hardening implementation plan
lukegor Aug 26, 2026
56c1d11
fix(health): keep readiness body free of dependency failure detail
lukegor Aug 26, 2026
7fc792f
fix(identity): answer every failed login with invalid_credentials
lukegor Aug 26, 2026
2b77264
feat(seeding): enforce strong seed passwords and log creation failures
lukegor Aug 26, 2026
cfbf730
refactor(auth): validate bearer settings through the module-owned Jwt…
lukegor Aug 26, 2026
6606072
feat(auth): sign tokens with ES256 and publish the public key via JWKS
lukegor Aug 26, 2026
7b0e701
docs(security): record review findings, supply-chain scan, trade-offs
lukegor Aug 26, 2026
f97ed4c
docs(transaction): pattern review design — concurrency 409s, atomic c…
lukegor Aug 26, 2026
10b9bb0
docs(transaction): hardening implementation plan
lukegor Aug 26, 2026
b59e800
fix(api): map concurrency conflicts to 409 problem details
lukegor Aug 26, 2026
7559082
test(integration): prove xmin token rejects concurrent negotiation wr…
lukegor Aug 26, 2026
76336e5
fix(negotiations): make create flow one atomic commit
lukegor Aug 26, 2026
624b257
test(architecture): pin SaveChangesAsync callers to handlers, seeding…
lukegor Aug 26, 2026
f2c5083
docs: update README
lukegor Aug 26, 2026
a911ff5
docs: add endpoint metadata hardening implementation plan
lukegor Aug 26, 2026
cbab7a3
feat(api): secure-by-default route groups with locked public surface
lukegor Aug 26, 2026
fe52aa9
fix(api): enforce configured cors policy and vary product cache by or…
lukegor Aug 26, 2026
0a6d819
fix: adjust layers responsibilities and vertical slice implementation
lukegor Aug 30, 2026
c2bb3aa
Add FluentValidation design spec
lukegor Aug 30, 2026
41ffe4d
feat(api): add FluentValidation
lukegor Aug 30, 2026
1d0c7d7
Document inter-module communication pattern
lukegor Aug 30, 2026
6071456
fix(architecture): adjust inter-module communication
lukegor Aug 30, 2026
2b71f6c
fix(api): improve response naming
lukegor Aug 30, 2026
bf013ff
Add optimized architecture design spec
lukegor Aug 30, 2026
db72ce8
Move module projects under src/Modules/ directory
lukegor Aug 30, 2026
32936b3
Align Identity module structure with design spec - move IdentityError…
lukegor Aug 30, 2026
1dd9428
Split Catalog module into Domain/Application/Infrastructure/Contracts…
lukegor Aug 30, 2026
6683ed2
Split Negotiations module into Domain/Application/Infrastructure/Cont…
lukegor Aug 30, 2026
6e4f099
Split Identity module into Domain/Application/Infrastructure/Contract…
lukegor Aug 30, 2026
9c886ec
refactor: split modules into Clean Architecture
lukegor Aug 30, 2026
139be8c
refactor: improve project structure
lukegor Aug 30, 2026
cb23aa5
build(deps): bump actions/checkout from 4 to 7
dependabot[bot] Aug 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
**/bin/
**/obj/
**/.vs/
**/.git/
.github/
docs/
artifacts/
logs/
tests/PriceNegotiationApp.IntegrationTests
*.md
Dockerfile*
docker-compose*
.env*
524 changes: 524 additions & 0 deletions .editorconfig

Large diffs are not rendered by default.

12 changes: 12 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Required — fill in real values before docker compose up
POSTGRES_PASSWORD=change-me
# ES256 signing key: PKCS#8 PEM generated per README; escape newlines as \n for one line
JWT_PRIVATE_KEY=replace-with-key-generated-per-README
SEED_ADMIN_PASSWORD=replace-me-strong-random-Aa1!
SEED_STAFF_PASSWORD=replace-me-strong-random-Bb2!

# Observability overlay (compose.observability.yml) - dashboard login token
ASPIRE_DASHBOARD_TOKEN=change-me-local-token

# Telemetry ingestion key (dashboard rejects unauthenticated OTLP senders)
ASPIRE_OTLP_API_KEY=change-me-local-otlp-key
14 changes: 14 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
version: 2
updates:
- package-ecosystem: nuget
directory: /
schedule:
interval: weekly
- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
- package-ecosystem: docker
directory: /
schedule:
interval: weekly
37 changes: 37 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: ci

on:
push:
branches: [main, develop]
pull_request:

jobs:
build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

- uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x

- name: Restore
run: dotnet restore

- name: Format check
run: dotnet format --verify-no-changes

- name: Build
run: dotnet build -c Release --no-restore

- name: Test
run: dotnet test --solution PriceNegotiationApp.slnx -c Release --no-build --coverage --coverage-output-format cobertura --report-trx

- name: Upload test artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: test-results
path: "**/TestResults/**"
retention-days: 7

8 changes: 7 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -360,4 +360,10 @@ MigrationBackup/
.ionide/

# Fody - auto-generated XML schema
FodyWeavers.xsd
FodyWeavers.xsd
artifacts/
logs/
*.user

.env
logs/
38 changes: 38 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<Project>
<PropertyGroup>
<TargetFrameworks>net10.0</TargetFrameworks>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>latest</LangVersion>

<AnalysisLevel>latest</AnalysisLevel>
<AnalysisMode>Recommended</AnalysisMode>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
<GeneratedCodeAnalysisFlags>none</GeneratedCodeAnalysisFlags>

<NuGetAudit>true</NuGetAudit>
<NuGetAuditMode>all</NuGetAuditMode>
<NuGetAuditLevel>moderate</NuGetAuditLevel>
</PropertyGroup>
<PropertyGroup>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
</PropertyGroup>
<!-- GitHub Actions exports CI=true; keep local builds byte-identical to today. -->
<PropertyGroup Condition="'$(CI)' == 'true'">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
<EmbedUntrackedSources>true</EmbedUntrackedSources>
</PropertyGroup>
<ItemGroup>
<GlobalPackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="all" />
</ItemGroup>
<!-- Conventions for every test project; keeps individual test csprojs reference-only.
Lives in props (not targets): must be visible to package-provided build checks
(e.g. xunit.v3's executable-output requirement) that run before targets import. -->
<PropertyGroup Condition="'$(MSBuildProjectName.EndsWith(`Tests`))' == 'true'">
<OutputType>Exe</OutputType>
<IsPackable>false</IsPackable>
<NoWarn>$(NoWarn);CA1707;S1118</NoWarn>
</PropertyGroup>
</Project>
51 changes: 51 additions & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
<Project>
<PropertyGroup>
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
<CentralPackageTransitivePinningEnabled>true</CentralPackageTransitivePinningEnabled>
</PropertyGroup>
<!-- Direct package references -->
<ItemGroup>
<PackageVersion Include="Bogus" Version="35.6.5" />
<PackageVersion Include="EFCore.NamingConventions" Version="10.0.1" />
<PackageVersion Include="FluentValidation" Version="11.11.0" />
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="11.11.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.11" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="10.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.8" />
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.11" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.ApiDescription.Server" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.11" />
<PackageVersion Include="Microsoft.Extensions.TimeProvider.Testing" Version="10.9.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.CodeCoverage" Version="18.10.0" />
<PackageVersion Include="Microsoft.Testing.Extensions.TrxReport" Version="2.3.3" />
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="10.0.3" />
<PackageVersion Include="Npgsql" Version="10.0.3" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.18.0" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.18.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.18.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.18.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.18.0" />
<PackageVersion Include="Refit" Version="10.1.6" />
<PackageVersion Include="Scalar.AspNetCore" Version="2.17.1" />
<PackageVersion Include="Serilog.AspNetCore" Version="10.0.0" />
<PackageVersion Include="Serilog.Sinks.Grafana.Loki" Version="9.0.2" />
<PackageVersion Include="Shouldly" Version="4.3.0" />
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="8.19.2" />
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.14.0" />
<PackageVersion Include="TngTech.ArchUnitNET" Version="0.13.4" />
<PackageVersion Include="TngTech.ArchUnitNET.xUnitV3" Version="0.13.4" />
<PackageVersion Include="Vogen" Version="8.0.7" />
<PackageVersion Include="xunit.v3" Version="4.0.0" />
</ItemGroup>
<!-- Analyzers applied to every project -->
<ItemGroup>
<GlobalPackageReference Include="SonarAnalyzer.CSharp" Version="10.26.0.140279" />
<GlobalPackageReference Include="Meziantou.Analyzer" Version="3.0.89" />
</ItemGroup>
</Project>
15 changes: 15 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY Directory.Build.props Directory.Packages.props Directory.Packages.props .editorconfig ./
COPY src ./src
RUN dotnet restore src/PriceNegotiationApp.Api/PriceNegotiationApp.Api.csproj
RUN dotnet publish src/PriceNegotiationApp.Api/PriceNegotiationApp.Api.csproj -c Release -f net10.0 -o /app --no-restore

FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime
WORKDIR /app
COPY --from=build /app .
EXPOSE 8080
ENV ASPNETCORE_URLS=http://+:8080
USER app
ENTRYPOINT ["dotnet", "PriceNegotiationApp.Api.dll"]

Loading
Loading