diff --git a/Distribution/Features/Grn/GrnController.cs b/Distribution/Features/Grn/GrnController.cs index 60d11b4..f87f56a 100644 --- a/Distribution/Features/Grn/GrnController.cs +++ b/Distribution/Features/Grn/GrnController.cs @@ -26,11 +26,14 @@ public class GrnController(GrnService service, ICurrentUserService currentUser) [HttpPost("api/goods-receipts")] public async Task CreateFlat(CreateFlatGrnRequest request, CancellationToken ct) { - var userId = currentUser.UserId ?? throw new UnauthorizedAccessException(); + // TEMPORARY: currentUser.UserId is always unset due to the broken auth middleware + // (testbug.md #28) — fall back to the explicitly supplied user until that's fixed. + var userId = currentUser.UserId ?? request.ReceivedByUserId; + if (userId is null) return BadRequest(new { error = "ReceivedByUserId is required while auth is unavailable" }); try { var inner = new CreateGrnRequest(request.WarehouseId, request.Items); - var result = await service.CreateAsync(request.PurchaseOrderId, inner, userId, ct); + var result = await service.CreateAsync(request.PurchaseOrderId, inner, userId.Value, ct); return CreatedAtAction(nameof(GetById), new { id = result.Id }, result); } catch (InvalidOperationException ex) { return Conflict(new { error = ex.Message }); } @@ -43,10 +46,11 @@ public class GrnController(GrnService service, ICurrentUserService currentUser) [HttpPost("api/purchase-orders/{id:guid}/goods-receipts")] public async Task Create(Guid id, CreateGrnRequest request, CancellationToken ct) { - var userId = currentUser.UserId ?? throw new UnauthorizedAccessException(); + var userId = currentUser.UserId ?? request.ReceivedByUserId; + if (userId is null) return BadRequest(new { error = "ReceivedByUserId is required while auth is unavailable" }); try { - var result = await service.CreateAsync(id, request, userId, ct); + var result = await service.CreateAsync(id, request, userId.Value, ct); return CreatedAtAction(nameof(GetById), new { id = result.Id }, result); } catch (InvalidOperationException ex) { return Conflict(new { error = ex.Message }); } diff --git a/Distribution/Features/Grn/GrnDTOs.cs b/Distribution/Features/Grn/GrnDTOs.cs index 9d858a0..b5d8a02 100644 --- a/Distribution/Features/Grn/GrnDTOs.cs +++ b/Distribution/Features/Grn/GrnDTOs.cs @@ -2,9 +2,18 @@ namespace Distribution.Features.Grn; public record GrnItemRequest(Guid PurchaseOrderItemId, int AcceptedQuantity, int RejectedQuantity); -public record CreateGrnRequest(Guid WarehouseId, List Items); +public record CreateGrnRequest( + Guid WarehouseId, + List Items, + // TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28. + Guid? ReceivedByUserId = null); -public record CreateFlatGrnRequest(Guid PurchaseOrderId, Guid WarehouseId, List Items); +public record CreateFlatGrnRequest( + Guid PurchaseOrderId, + Guid WarehouseId, + List Items, + // TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28. + Guid? ReceivedByUserId = null); public record GrnItemResponse( Guid Id, diff --git a/Distribution/Features/PurchaseOrder/PoController.cs b/Distribution/Features/PurchaseOrder/PoController.cs index 325113f..b7bccbf 100644 --- a/Distribution/Features/PurchaseOrder/PoController.cs +++ b/Distribution/Features/PurchaseOrder/PoController.cs @@ -22,10 +22,13 @@ public class PoController(PoService service, ICurrentUserService currentUser) : [HttpPost] public async Task Create(CreatePoRequest request, CancellationToken ct) { - var userId = currentUser.UserId ?? throw new UnauthorizedAccessException(); + // TEMPORARY: currentUser.UserId is always unset due to the broken auth middleware + // (testbug.md #28) — fall back to the explicitly supplied user until that's fixed. + var userId = currentUser.UserId ?? request.CreatedByUserId; + if (userId is null) return BadRequest(new { error = "CreatedByUserId is required while auth is unavailable" }); try { - var result = await service.CreateAsync(request, userId, ct); + var result = await service.CreateAsync(request, userId.Value, ct); return CreatedAtAction(nameof(GetById), new { id = result.Id }, result); } catch (InvalidOperationException ex) { return Conflict(new { error = ex.Message }); } diff --git a/Distribution/Features/PurchaseOrder/PoDTOs.cs b/Distribution/Features/PurchaseOrder/PoDTOs.cs index 7c9868b..0f04e63 100644 --- a/Distribution/Features/PurchaseOrder/PoDTOs.cs +++ b/Distribution/Features/PurchaseOrder/PoDTOs.cs @@ -4,7 +4,11 @@ namespace Distribution.Features.Po; public record PoItemRequest(Guid ItemId, int Quantity, decimal UnitCost); -public record CreatePoRequest(Guid SupplierId, List Items); +public record CreatePoRequest( + Guid SupplierId, + List Items, + // TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28. + Guid? CreatedByUserId = null); /// /// Update line: PurchaseOrderItemId set = update an existing unreceived line (Quantity/UnitCost),