Fix MediatR version per design spec

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-13 23:56:36 +07:00
co-authored by Claude Fable 5
parent c5199fd23f
commit ae03208f79
2 changed files with 100 additions and 1 deletions
@@ -0,0 +1,99 @@
# Task 1 Report: Add MediatR, wire DI, convert Auth module
## What was done
1. **Added MediatR package** — ran `dotnet add mws.application/mws.application.csproj package MediatR`, which resolved and pinned `MediatR` version `14.2.0` (latest stable at time of run) into `mws.application/mws.application.csproj`.
2. **Created `mws.application/Auth/Commands/Login.cs`** — new file containing `LoginCommand(LoginRequest Request) : IRequest<LoginResponse>` and `LoginHandler` (constructor-injecting `IUnitOfWork`, `IPasswordHasher`, `ITokenService`, `IMapper`), copied verbatim from the brief's Step 2. Logic is an exact port of the old `AuthService.LoginAsync` body (trim username, look up user by username with role, verify password, check `IsActive`, throw `UnauthorizedException`/`ForbiddenException` as before, build `LoginResponse` with token + mapped `UserDto`).
3. **Deleted `mws.application/Auth/AuthService.cs`** — removed the old file containing both `IAuthService` and `AuthService`, now fully superseded by `LoginCommand`/`LoginHandler`.
4. **Replaced `mws.api/Controllers/AuthController.cs`** — controller now depends on `ISender` instead of `IAuthService`; `Login` action sends `new LoginCommand(request)` via `sender.Send(...)` and returns `Ok(response)`. Matches the brief's Step 4 exactly.
5. **Updated `mws.infrastructure/DependencyInjection.cs`**:
- Added `services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(IUnitOfWork).Assembly));` immediately after `services.AddAutoMapper(...)`.
- Removed `services.AddScoped<IAuthService, AuthService>();`.
- Left `using Mws.Application.Auth;` in place (still required for `JwtOptions`/`ITokenService` wiring elsewhere in the file), per the brief's explicit instruction.
## Build output (tail)
```
mws.domain -> .../mws.domain/bin/Debug/net10.0/mws.domain.dll
mws.application -> .../mws.application/bin/Debug/net10.0/mws.application.dll
mws.infrastructure -> .../mws.infrastructure/bin/Debug/net10.0/mws.infrastructure.dll
/Users/namdh/Desktop/mws.backend.dotnet/.claude/worktrees/cqrs-mediator/mws.api/Program.cs(69,80): warning CS8604: Possible null reference argument for parameter 's' in 'byte[] Encoding.GetBytes(string s)'. [mws.api.csproj]
/Users/namdh/Desktop/mws.backend.dotnet/.claude/worktrees/cqrs-mediator/mws.api/Program.cs(85,26): warning CS8602: Dereference of a possibly null reference. [mws.api.csproj]
mws.api -> .../mws.api/bin/Debug/net10.0/mws.api.dll
Build succeeded.
2 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.51
```
The only two warnings are the pre-existing, expected, out-of-scope nullable warnings in `Program.cs` (lines 69 and 85) — exactly as anticipated in the task instructions. 0 errors.
## Commit
Commit hash: `c5199fd23ffffebbb4580fc737a55c9083c00a48` (short: `c5199fd`)
```
commit c5199fd23ffffebbb4580fc737a55c9083c00a48
Author: namdh861 <namdh861@gmail.com>
Convert Auth module to MediatR command
Adds the MediatR package and wires AddMediatR in DI. Replaces
IAuthService/AuthService with LoginCommand/LoginHandler, the pattern
the remaining modules will follow.
mws.api/Controllers/AuthController.cs | 7 ++++---
mws.application/Auth/AuthService.cs | 35 -------------------------------
mws.application/Auth/Commands/Login.cs | 33 +++++++++++++++++++++++++++++
mws.application/mws.application.csproj | 1 +
mws.infrastructure/DependencyInjection.cs | 2 +-
5 files changed, 39 insertions(+), 39 deletions(-)
```
Files staged exactly matched the brief's `git add` list: `mws.application/mws.application.csproj`, `mws.application/Auth` (covering the deleted `AuthService.cs` and new `Commands/Login.cs`), `mws.infrastructure/DependencyInjection.cs`, `mws.api/Controllers/AuthController.cs`. Working tree was clean before and after except for these files — nothing unrelated was swept in.
## Self-review against the brief
Diffed the commit (`git show c5199fd`, and `git diff f72aaa2 c5199fd`) against every code block in `task-1-brief.md`:
- `mws.application.csproj`: `+<PackageReference Include="MediatR" Version="14.2.0" />` — package added, one line, no other csproj changes.
- `Login.cs`: byte-for-byte match to the brief's Step 2 code block (using directives, namespace, `LoginCommand` record, `LoginHandler` class with the four-parameter primary constructor, `Handle` method body identical to the old `AuthService.LoginAsync`).
- `AuthService.cs`: deleted, no trace left.
- `AuthController.cs`: byte-for-byte match to the brief's Step 4 code block — `ISender` constructor injection, `sender.Send(new LoginCommand(request), ct)`.
- `DependencyInjection.cs`: `AddMediatR` line inserted immediately after `AddAutoMapper`, exactly as specified; `AddScoped<IAuthService, AuthService>()` line removed; `using Mws.Application.Auth;` left untouched (still needed by `JwtOptions`/`ITokenService`, confirmed by grep — no leftover unused-using warning appeared in the build).
- No other files were modified; no adjacent code was reformatted or "improved."
- Commit message matches the brief's Step 7 heredoc verbatim.
No deviations found. Task complete.
## Fix round: MediatR version alignment
Changed `mws.application/mws.application.csproj` to use MediatR `13.1.0` per the design specification.
Command:
```text
dotnet build mws.backend.dotnet.sln
```
Exact result:
```text
Build succeeded.
/Users/namdh/Desktop/mws.backend.dotnet/.claude/worktrees/agent-a51365a1ed999f913/mws.api/Program.cs(69,80): warning CS8604: Possible null reference argument for parameter 's' in 'byte[] Encoding.GetBytes(string s)'. [/Users/namdh/Desktop/mws.backend.dotnet/.claude/worktrees/agent-a51365a1ed999f913/mws.api/mws.api.csproj]
/Users/namdh/Desktop/mws.backend.dotnet/.claude/worktrees/agent-a51365a1ed999f913/mws.api/Program.cs(85,26): warning CS8602: Dereference of a possibly null reference. [/Users/namdh/Desktop/mws.backend.dotnet/.claude/worktrees/agent-a51365a1ed999f913/mws.api/mws.api.csproj]
2 Warning(s)
0 Error(s)
Time Elapsed 00:00:09.33
```
The warnings are pre-existing nullable warnings in `mws.api/Program.cs`; the build completed successfully with zero errors.
+1 -1
View File
@@ -12,7 +12,7 @@
<ItemGroup>
<PackageReference Include="AutoMapper" Version="16.2.0" />
<PackageReference Include="MediatR" Version="14.2.0" />
<PackageReference Include="MediatR" Version="13.1.0" />
</ItemGroup>
</Project>