private async Task SetCoinState(MachineCoin coin, byte state, CancellationToken ct = default)
        {
            ct.ThrowIfCancellationRequested();

            var machineCoins = await _db.MachineCoins
                               .Where(w => w.CoinId == coin.CoinId && w.MachineId == coin.MachineId)
                               .ToListAsync(ct);

            foreach (var machineCoin in machineCoins)
            {
                machineCoin.CoinState = state;
            }

            _db.MachineCoins.UpdateRange(machineCoins);
            await _db.SaveChangesAsync(ct);
        }
 public async Task UnLockCoinInMachine(MachineCoin coin, CancellationToken ct = default)
 {
     ct.ThrowIfCancellationRequested();
     await(SetCoinState(coin, 0, ct));
 }