Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
ed76f5f
fix: resolve build errors, add Swagger JWT auth, handle missing Redis
rashed99mm May 14, 2026
1dd40e9
chore: upgrade target framework to .NET 10
rashed99mm May 15, 2026
2f131d6
feat: add localization-aware Result<T> and typed error codes
rashed99mm May 15, 2026
d9d4cd8
refactor: migrate domain services to repository pattern
rashed99mm May 15, 2026
5a32b01
feat: implement auditable and soft delete aggregate root base classes
rashed99mm May 15, 2026
d231f5b
refactor: centralize auth logic into IAuthService, align DDD hierarch…
rashed99mm May 16, 2026
c0a8463
fix/ local dev token validation
rashed99mm May 16, 2026
d1c6348
feat: dynamic single-language messages based on Accept-Language header
rashed99mm May 17, 2026
efca1c9
feat:add refit implementation
rashed99mm May 19, 2026
3de72df
test files
rashed99mm May 19, 2026
561178c
feat/integration gateway email fix
rashed99mm May 19, 2026
30e0ca9
feat/active directory feature with integration gateway
rashed99mm May 20, 2026
21d845e
feat(admin): user management queries & auth token fix
rashed99mm May 20, 2026
0abed39
refactor/ use respons<t>
rashed99mm May 21, 2026
ff201c9
feat(platform-settings): restructure CMS settings with child entity t…
rashed99mm May 21, 2026
216e49b
feat(media): implement Media Upload Service with CRUD APIs
rashed99mm May 21, 2026
ff82a4d
refactor/platform-settings and fix bugs
rashed99mm May 23, 2026
cb4f91f
feat(observability): add Seq logging sink and OpenTelemetry tracing
rashed99mm May 23, 2026
c4278a0
feat: refactor password reset to notification system + fix bypass + SMS
rashed99mm May 23, 2026
0c55dc6
feat/implemnt-mass-transient-for messaging
rashed99mm May 23, 2026
c93374c
Merge pull request #28 from Azm-Tech/feat/add-system-notificaton-serv…
Rashed99Azm May 23, 2026
dd5bbff
feat: add OTP verification flow with request/verify endpoints
rashed99mm May 23, 2026
629dd62
feat: add OTP verification flow + fix concurrency stamp on user confi…
rashed99mm May 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 10 additions & 4 deletions backend/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

<PropertyGroup>
<!-- Language and target framework -->
<TargetFramework>net8.0</TargetFramework>
<LangVersion>12.0</LangVersion>
<TargetFramework>net10.0</TargetFramework>
<LangVersion>14.0</LangVersion>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>

Expand Down Expand Up @@ -45,12 +45,18 @@
<!-- CA1056 — "URI properties should be System.Uri" (we store URLs as nvarchar in DB; converting to Uri at the boundary is the API/DTO layer's job)
CA1054 — "URI parameters should be System.Uri" (same rationale — domain mutators take strings to align with persistence)
CA1002 — "Do not expose generic Lists" (EF entities use List<T> for JSON-mapped collections; Collection<T> doesn't roundtrip through JSON converters as cleanly)
CA1308 — "use ToUpperInvariant" (URLs/slugs/file extensions are lowercase by web convention; ToLower is semantically correct here) -->
CA1308 — "use ToUpperInvariant" (URLs/slugs/file extensions are lowercase by web convention; ToLower is semantically correct here)
CA1873 — "avoid potentially expensive logging" (false positives on cheap local variables and
parameters; all logging arguments are already-evaluated values, not expensive
expressions, object allocations, or interpolated strings) -->
<!-- NU1902 — HtmlSanitizer 9.0.886 advisory GHSA-j92c-7v7g-gj3f (moderate). No non-beta
release exists beyond 9.0.886; the library is used only server-side for output
sanitization (never as an input parser in a browser context), so the reported
client-side XSS vector is not reachable in our deployment. -->
<NoWarn>$(NoWarn);1591;CS1591;CA1030;CA1062;CA1515;CA1812;CA1848;CA2007;CA1819;CA1716;CA1724;CA1056;CA1054;CA1002;CA1308;NU1902</NoWarn>
<!-- NU1903 — Microsoft.Kiota.Abstractions (via Microsoft.Graph) and System.Security.Cryptography.Xml
(via Microsoft.AspNetCore.Identity) transitive vulnerabilities. These are third-party
dependencies; we pin the latest available versions in Directory.Packages.props. -->
<NoWarn>$(NoWarn);1591;CS1591;CA1030;CA1062;CA1515;CA1812;CA1848;CA2007;CA1819;CA1716;CA1724;CA1056;CA1054;CA1002;CA1308;CA1873;NU1902;NU1903</NoWarn>

<!-- Output organization -->
<BaseOutputPath>$(MSBuildThisFileDirectory)artifacts/bin/$(MSBuildProjectName)/</BaseOutputPath>
Expand Down
135 changes: 83 additions & 52 deletions backend/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@
</PropertyGroup>

<ItemGroup Label="Core framework &amp; Testing">
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="8.0.2" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Options.DataAnnotations" Version="8.0.0" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Options" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Options.DataAnnotations" Version="10.0.1" />
<PackageVersion Include="xunit" Version="2.9.2" />
<PackageVersion Include="xunit.runner.visualstudio" Version="2.8.2" />
<PackageVersion Include="xunit.analyzers" Version="1.16.0" />
Expand All @@ -36,6 +36,12 @@
<PackageVersion Include="MailKit" Version="4.8.0" />
</ItemGroup>

<ItemGroup Label="External API clients (Refit)">
<PackageVersion Include="Refit" Version="8.0.0" />
<PackageVersion Include="Refit.HttpClientFactory" Version="8.0.0" />
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.4.0" />
</ItemGroup>

<ItemGroup Label="Application layer">
<PackageVersion Include="CsvHelper" Version="33.0.1" />
<PackageVersion Include="MediatR" Version="12.4.1" />
Expand All @@ -46,90 +52,115 @@
</ItemGroup>

<ItemGroup Label="Persistence (EF Core + SQL Server)">
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="8.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.10" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="8.0.10" />
<PackageVersion Include="EFCore.NamingConventions" Version="8.0.3" />
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.1" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.1" />
<PackageVersion Include="EFCore.NamingConventions" Version="10.0.0" />
</ItemGroup>

<ItemGroup Label="Redis">
<PackageVersion Include="StackExchange.Redis" Version="2.8.16" />
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.10" />
<PackageVersion Include="StackExchange.Redis" Version="2.8.31" />
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="10.0.0" />
</ItemGroup>

<ItemGroup Label="ASP.NET Core web API">
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.10" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="8.0.10" />
<PackageVersion Include="Microsoft.Identity.Web" Version="3.5.0" />
<PackageVersion Include="Microsoft.Identity.Web.MicrosoftGraph" Version="3.5.0" />
<PackageVersion Include="Microsoft.Identity.Web.UI" Version="3.5.0" />
<PackageVersion Include="Microsoft.Graph" Version="5.65.0" />
<PackageVersion Include="Azure.Identity" Version="1.13.2" />
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="8.0.10" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.8.1" />
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.8.1" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="10.0.0" />
<PackageVersion Include="Microsoft.Identity.Web" Version="3.8.4" />
<PackageVersion Include="Microsoft.Identity.Web.MicrosoftGraph" Version="3.8.4" />
<PackageVersion Include="Microsoft.Identity.Web.UI" Version="3.8.4" />
<PackageVersion Include="Microsoft.Graph" Version="5.80.0" />
<PackageVersion Include="Azure.Identity" Version="1.14.2" />
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.9.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.Annotations" Version="6.9.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Versioning" Version="5.1.0" />
</ItemGroup>

<ItemGroup Label="Identity (external users)">
<PackageVersion Include="Microsoft.Extensions.Identity.Stores" Version="8.0.10" />
<PackageVersion Include="Microsoft.Extensions.Identity.Stores" Version="10.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.Identity" Version="2.3.1" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="8.0.10" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="8.0.10" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="10.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.Identity.UI" Version="10.0.0" />
</ItemGroup>

<ItemGroup Label="Observability (Serilog + Sentry + Prometheus)">
<PackageVersion Include="Serilog" Version="4.1.0" />
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.3" />
<PackageVersion Include="Serilog" Version="4.2.0" />
<PackageVersion Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
<PackageVersion Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageVersion Include="Serilog.Formatting.Compact" Version="3.0.0" />
<PackageVersion Include="Serilog.Enrichers.CorrelationId" Version="3.0.1" />
<PackageVersion Include="Serilog.Enrichers.Environment" Version="3.0.1" />
<PackageVersion Include="Serilog.Exceptions" Version="8.4.0" />
<PackageVersion Include="Sentry.AspNetCore" Version="4.13.0" />
<PackageVersion Include="Sentry.Serilog" Version="4.13.0" />
<PackageVersion Include="Sentry.AspNetCore" Version="5.4.0" />
<PackageVersion Include="Sentry.Serilog" Version="5.4.0" />
<PackageVersion Include="prometheus-net" Version="8.2.1" />
<PackageVersion Include="prometheus-net.AspNetCore" Version="8.2.1" />
<PackageVersion Include="Anthropic.SDK" Version="5.0.0" />
</ItemGroup>

<ItemGroup Label="Integration tests (Testcontainers)">
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="8.0.10" />
<PackageVersion Include="Testcontainers" Version="4.0.0" />
<PackageVersion Include="Testcontainers.MsSql" Version="4.0.0" />
<PackageVersion Include="Testcontainers.Redis" Version="4.0.0" />
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="10.0.0" />
<PackageVersion Include="Testcontainers" Version="4.4.0" />
<PackageVersion Include="Testcontainers.MsSql" Version="4.4.0" />
<PackageVersion Include="Testcontainers.Redis" Version="4.4.0" />
<PackageVersion Include="WireMock.Net" Version="1.7.0" />
</ItemGroup>

<ItemGroup Label="Messaging (MassTransit)">
<!-- MassTransit core + RabbitMQ transport. All MIT-licensed, no commercial licence required. -->
<PackageVersion Include="MassTransit" Version="8.3.7" />
<PackageVersion Include="MassTransit.RabbitMQ" Version="8.3.7" />
<!-- In-memory transport used in tests and when Messaging:Transport=InMemory -->
<PackageVersion Include="MassTransit.Testing.Helpers" Version="8.3.7" />
</ItemGroup>

<ItemGroup Label="Rate limiting (built-in 8+, no package) and problem-details helpers">
<PackageVersion Include="Hellang.Middleware.ProblemDetails" Version="6.5.1" />
</ItemGroup>

<ItemGroup Label="Health checks">
<PackageVersion Include="AspNetCore.HealthChecks.SqlServer" Version="8.0.2" />
<PackageVersion Include="AspNetCore.HealthChecks.Redis" Version="8.0.1" />
<PackageVersion Include="AspNetCore.HealthChecks.SqlServer" Version="9.0.0" />
<PackageVersion Include="AspNetCore.HealthChecks.Redis" Version="9.0.0" />
</ItemGroup>

<ItemGroup Label="MediatR pipeline behaviors">
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="8.0.2" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.1" />
</ItemGroup>

<ItemGroup Label="Transitive vulnerability overrides">
<!-- Microsoft.Graph 5.80.0 pulls in Kiota 1.17.1 which has GHSA-7j59-v9qr-6fq9.
Pin to patched version until Microsoft.Graph updates its dependency. -->
<PackageVersion Include="Microsoft.Kiota.Abstractions" Version="1.18.0" />
<!-- Microsoft.AspNetCore.Identity 2.3.1 pulls in System.Security.Cryptography.Xml 9.0.0
which has GHSA-37gx-xxp4-5rgx and GHSA-w3x6-4m5h-cxqf. Pin to .NET 10 patched version. -->
<PackageVersion Include="System.Security.Cryptography.Xml" Version="10.0.0" />
</ItemGroup>

<ItemGroup Label="Roslyn source generators (used by Domain.SourceGenerators)">
<!-- Pin to host-compatible Roslyn. SDK 8.0.1xx ships Roslyn 4.8; referencing 4.11 raises CS9057.
Microsoft.CodeAnalysis.Common is added explicitly because EF Core 8.0.10's design package
pulls in Roslyn 4.5.0 transitively, which conflicts with the source generator's 4.8.0.
<!-- Pin to host-compatible Roslyn. SDK 10.0.2xx ships Roslyn 4.13; referencing incompatible version raises CS9057.
Microsoft.CodeAnalysis.Common is added explicitly because EF Core's design package
pulls in an older Roslyn transitively, which conflicts with the source generator.
CPM's CentralPackageTransitivePinningEnabled=true uses this entry to unify transitive
resolution at 4.8.0 across the whole solution. -->
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
resolution across the whole solution. -->
<PackageVersion Include="Microsoft.CodeAnalysis.Common" Version="4.14.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0" />
<PackageVersion Include="YamlDotNet" Version="16.2.0" />
<PackageVersion Include="YamlDotNet" Version="16.3.0" />
</ItemGroup>

<ItemGroup Label="Seq + OpenTelemetry">
<PackageVersion Include="Serilog.Sinks.Seq" Version="8.0.0" />
<PackageVersion Include="OpenTelemetry" Version="1.11.2" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.11.2" />
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.11.2" />
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.11.0" />
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.11.0" />
</ItemGroup>

</Project>
Loading
Loading