in src/Shared/Infrastructure/Infrastructure.Persistence/Repositories/StatusChangeRepository.cs [59:94]
public AcceptChangeResponse TryAcceptChangeRequest(string medicalCode, int expirationHours)
{
var statusChange = new Table<StatusChange>(session)
.FirstOrDefault(row => row.MedicalCode == medicalCode)
.Execute();
if (statusChange == null)
{
return AcceptChangeResponse.Error(AcceptChangeResult.MissingCode);
}
if (statusChange.AcceptedAt != null)
{
return AcceptChangeResponse.Error(AcceptChangeResult.ReusedCode);
}
if (statusChange.CreatedAt.AddHours(expirationHours) < DateTime.UtcNow)
{
return AcceptChangeResponse.Error(AcceptChangeResult.ExpiredCode);
}
// CosmosDB doesn't support this Lightweight Transaction
//return new Table<StatusChangeAccepted>(session)
// .Where(row => row.MedicalCode == medicalCode)
// .Select(row => new StatusChangeAccepted { AcceptedAt = DateTime.UtcNow })
// .UpdateIf(row => row.AcceptedAt == null)
// .Execute()
// .Applied;
new Table<StatusChangeAccepted>(session)
.Where(row => row.MedicalCode == medicalCode)
.Select(row => new StatusChangeAccepted { AcceptedAt = DateTime.UtcNow })
.Update()
.Execute();
return AcceptChangeResponse.Success(statusChange.StatusId, statusChange.StatusChangedOn);
}