Skip to content

Commit 21bf46b

Browse files
committed
fix: use FirstOrDefault instead of Single when reading the identity
1 parent a60956b commit 21bf46b

File tree

3 files changed

+23
-11
lines changed

3 files changed

+23
-11
lines changed

Modules/Devices/src/Devices.Application/Identities/Queries/IsIdentityOfUserDeleted/Handler.cs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,29 @@ public Handler(IIdentitiesRepository identitiesRepository)
1616

1717
public async Task<IsIdentityOfUserDeletedResponse> Handle(IsIdentityOfUserDeletedQuery request, CancellationToken cancellationToken)
1818
{
19-
var identity = await _identitiesRepository.FindSingle(Identity.HasUser(request.Username), cancellationToken);
19+
var identity = await _identitiesRepository.FindFirst(Identity.HasUser(request.Username), cancellationToken);
2020

21-
if (identity.IsGracePeriodOver)
22-
return new IsIdentityOfUserDeletedResponse(true, identity.DeletionGracePeriodEndsAt);
21+
bool isDeleted;
22+
DateTime? deletionGracePeriodEndsAt;
2323

24-
var auditLogEntries = await _identitiesRepository.GetIdentityDeletionProcessAuditLogs(
25-
IdentityDeletionProcessAuditLogEntry.IsAssociatedToUser(Username.Parse(request.Username)),
26-
cancellationToken);
24+
if (identity != null)
25+
{
26+
isDeleted = identity.IsGracePeriodOver;
27+
deletionGracePeriodEndsAt = identity.IsGracePeriodOver ? identity.DeletionGracePeriodEndsAt : null;
28+
}
29+
else
30+
{
31+
var auditLogEntries = await _identitiesRepository.GetIdentityDeletionProcessAuditLogs(
32+
IdentityDeletionProcessAuditLogEntry.IsAssociatedToUser(Username.Parse(request.Username)),
33+
cancellationToken);
2734

28-
var deletionCompletedAuditLogEntry = auditLogEntries.FirstOrDefault(l => l.MessageKey == MessageKey.DeletionCompleted);
35+
var deletionCompletedAuditLogEntry = auditLogEntries.FirstOrDefault(l => l.MessageKey == MessageKey.DeletionCompleted);
36+
37+
isDeleted = deletionCompletedAuditLogEntry != null;
38+
deletionGracePeriodEndsAt = deletionCompletedAuditLogEntry?.CreatedAt;
39+
}
40+
41+
return new IsIdentityOfUserDeletedResponse(isDeleted, deletionGracePeriodEndsAt);
2942

30-
return new IsIdentityOfUserDeletedResponse(deletionCompletedAuditLogEntry != null, deletionCompletedAuditLogEntry?.CreatedAt);
3143
}
3244
}

Modules/Devices/src/Devices.Application/Infrastructure/Persistence/Repository/IIdentitiesRepository.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public interface IIdentitiesRepository
1616
Task<IEnumerable<Identity>> FindAllWithDeletionProcessInStatus(DeletionProcessStatus status, CancellationToken cancellationToken, bool track = false);
1717
Task<int> CountByClientId(string clientId, CancellationToken cancellationToken);
1818
Task<IEnumerable<Identity>> Find(Expression<Func<Identity, bool>> filter, CancellationToken cancellationToken, bool track = false);
19-
Task<Identity> FindSingle(Expression<Func<Identity, bool>> filter, CancellationToken cancellationToken, bool track = false);
19+
Task<Identity?> FindFirst(Expression<Func<Identity, bool>> filter, CancellationToken cancellationToken, bool track = false);
2020
Task Delete(Expression<Func<Identity, bool>> filter, CancellationToken cancellationToken);
2121

2222
Task Add(Identity identity, string password);

Modules/Devices/src/Devices.Infrastructure/Persistence/Repository/IdentitiesRepository.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,12 @@ public async Task<IEnumerable<Identity>> Find(Expression<Func<Identity, bool>> f
171171
.ToListAsync(cancellationToken);
172172
}
173173

174-
public async Task<Identity> FindSingle(Expression<Func<Identity, bool>> filter, CancellationToken cancellationToken, bool track = false)
174+
public async Task<Identity?> FindFirst(Expression<Func<Identity, bool>> filter, CancellationToken cancellationToken, bool track = false)
175175
{
176176
return await (track ? _identities : _readonlyIdentities)
177177
.IncludeAll(_dbContext)
178178
.Where(filter)
179-
.SingleAsync(cancellationToken);
179+
.FirstOrDefaultAsync(cancellationToken);
180180
}
181181

182182
public async Task Delete(Expression<Func<Identity, bool>> filter, CancellationToken cancellationToken)

0 commit comments

Comments
 (0)