public AcceptChangeResponse TryAcceptChangeRequest()

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);
        }