Fix user ID handling in GRN and PO
This commit is contained in:
@@ -26,11 +26,14 @@ public class GrnController(GrnService service, ICurrentUserService currentUser)
|
|||||||
[HttpPost("api/goods-receipts")]
|
[HttpPost("api/goods-receipts")]
|
||||||
public async Task<IActionResult> CreateFlat(CreateFlatGrnRequest request, CancellationToken ct)
|
public async Task<IActionResult> 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
|
try
|
||||||
{
|
{
|
||||||
var inner = new CreateGrnRequest(request.WarehouseId, request.Items);
|
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);
|
return CreatedAtAction(nameof(GetById), new { id = result.Id }, result);
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException ex) { return Conflict(new { error = ex.Message }); }
|
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")]
|
[HttpPost("api/purchase-orders/{id:guid}/goods-receipts")]
|
||||||
public async Task<IActionResult> Create(Guid id, CreateGrnRequest request, CancellationToken ct)
|
public async Task<IActionResult> 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
|
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);
|
return CreatedAtAction(nameof(GetById), new { id = result.Id }, result);
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException ex) { return Conflict(new { error = ex.Message }); }
|
catch (InvalidOperationException ex) { return Conflict(new { error = ex.Message }); }
|
||||||
|
|||||||
@@ -2,9 +2,18 @@ namespace Distribution.Features.Grn;
|
|||||||
|
|
||||||
public record GrnItemRequest(Guid PurchaseOrderItemId, int AcceptedQuantity, int RejectedQuantity);
|
public record GrnItemRequest(Guid PurchaseOrderItemId, int AcceptedQuantity, int RejectedQuantity);
|
||||||
|
|
||||||
public record CreateGrnRequest(Guid WarehouseId, List<GrnItemRequest> Items);
|
public record CreateGrnRequest(
|
||||||
|
Guid WarehouseId,
|
||||||
|
List<GrnItemRequest> 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<GrnItemRequest> Items);
|
public record CreateFlatGrnRequest(
|
||||||
|
Guid PurchaseOrderId,
|
||||||
|
Guid WarehouseId,
|
||||||
|
List<GrnItemRequest> Items,
|
||||||
|
// TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28.
|
||||||
|
Guid? ReceivedByUserId = null);
|
||||||
|
|
||||||
public record GrnItemResponse(
|
public record GrnItemResponse(
|
||||||
Guid Id,
|
Guid Id,
|
||||||
|
|||||||
@@ -22,10 +22,13 @@ public class PoController(PoService service, ICurrentUserService currentUser) :
|
|||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IActionResult> Create(CreatePoRequest request, CancellationToken ct)
|
public async Task<IActionResult> 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
|
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);
|
return CreatedAtAction(nameof(GetById), new { id = result.Id }, result);
|
||||||
}
|
}
|
||||||
catch (InvalidOperationException ex) { return Conflict(new { error = ex.Message }); }
|
catch (InvalidOperationException ex) { return Conflict(new { error = ex.Message }); }
|
||||||
|
|||||||
@@ -4,7 +4,11 @@ namespace Distribution.Features.Po;
|
|||||||
|
|
||||||
public record PoItemRequest(Guid ItemId, int Quantity, decimal UnitCost);
|
public record PoItemRequest(Guid ItemId, int Quantity, decimal UnitCost);
|
||||||
|
|
||||||
public record CreatePoRequest(Guid SupplierId, List<PoItemRequest> Items);
|
public record CreatePoRequest(
|
||||||
|
Guid SupplierId,
|
||||||
|
List<PoItemRequest> Items,
|
||||||
|
// TEMPORARY: required while auth doesn't resolve a logged-in user server-side — see testbug.md #28.
|
||||||
|
Guid? CreatedByUserId = null);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Update line: PurchaseOrderItemId set = update an existing unreceived line (Quantity/UnitCost),
|
/// Update line: PurchaseOrderItemId set = update an existing unreceived line (Quantity/UnitCost),
|
||||||
|
|||||||
Reference in New Issue
Block a user