fix(backend): resolve shift signup by looking up Member via ExternalUserId
The signup/cancel endpoints were passing the Keycloak sub claim (external UUID) directly as MemberId, but ShiftSignup.MemberId references the internal Member.Id. Now ShiftService resolves ExternalUserId to the internal Member.Id before creating the signup record. Integration tests updated to seed proper Member entities.
This commit is contained in:
@@ -207,10 +207,18 @@ public class ShiftService
|
||||
return true;
|
||||
}
|
||||
|
||||
public async Task<(bool success, string? error, bool isConflict)> SignUpForShiftAsync(Guid shiftId, Guid memberId)
|
||||
public async Task<(bool success, string? error, bool isConflict)> SignUpForShiftAsync(Guid shiftId, string externalUserId)
|
||||
{
|
||||
var tenantId = _tenantProvider.GetTenantId();
|
||||
|
||||
var member = await _context.Members
|
||||
.FirstOrDefaultAsync(m => m.ExternalUserId == externalUserId && m.TenantId == tenantId);
|
||||
|
||||
if (member == null)
|
||||
return (false, "Member not found", false);
|
||||
|
||||
var memberId = member.Id;
|
||||
|
||||
var shift = await _context.Shifts.FindAsync(shiftId);
|
||||
|
||||
if (shift == null)
|
||||
@@ -265,10 +273,18 @@ public class ShiftService
|
||||
return (false, "Shift capacity changed during sign-up", true);
|
||||
}
|
||||
|
||||
public async Task<(bool success, string? error)> CancelSignupAsync(Guid shiftId, Guid memberId)
|
||||
public async Task<(bool success, string? error)> CancelSignupAsync(Guid shiftId, string externalUserId)
|
||||
{
|
||||
var tenantId = _tenantProvider.GetTenantId();
|
||||
|
||||
var member = await _context.Members
|
||||
.FirstOrDefaultAsync(m => m.ExternalUserId == externalUserId && m.TenantId == tenantId);
|
||||
|
||||
if (member == null)
|
||||
return (false, "Member not found");
|
||||
|
||||
var signup = await _context.ShiftSignups
|
||||
.FirstOrDefaultAsync(ss => ss.ShiftId == shiftId && ss.MemberId == memberId);
|
||||
.FirstOrDefaultAsync(ss => ss.ShiftId == shiftId && ss.MemberId == member.Id);
|
||||
|
||||
if (signup == null)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user