in DeviceBridge/Providers/StorageProvider.cs [142:177]
public async Task<DeviceSubscription> GetDeviceSubscription(Logger logger, string deviceId, DeviceSubscriptionType subscriptionType, CancellationToken cancellationToken)
{
try
{
logger.Info("Getting {subscriptionType} subscription for device {deviceId}", subscriptionType, deviceId);
var sql = "SELECT * FROM DeviceSubscriptions WHERE DeviceId = @DeviceId AND SubscriptionType = @SubscriptionType";
using SqlConnection connection = new SqlConnection(_connectionString);
using SqlCommand command = new SqlCommand(sql, connection);
command.Parameters.Add(new SqlParameter("DeviceId", deviceId));
command.Parameters.Add(new SqlParameter("SubscriptionType", subscriptionType.ToString()));
await connection.OpenAsync(cancellationToken);
using SqlDataReader reader = await command.ExecuteReaderAsync(cancellationToken);
if (await reader.ReadAsync(cancellationToken))
{
logger.Info("Got {subscriptionType} for device {deviceId}", subscriptionType, deviceId);
return new DeviceSubscription()
{
DeviceId = reader["DeviceId"].ToString(),
SubscriptionType = DeviceSubscriptionType.FromString(reader["SubscriptionType"].ToString()),
CallbackUrl = await _encryptionService.Decrypt(logger, reader["CallbackUrl"].ToString()),
CreatedAt = (DateTime)reader["CreatedAt"],
};
}
else
{
logger.Info("No {subscriptionType} subscription found for device {deviceId}", subscriptionType, deviceId);
return null;
}
}
catch (Exception e)
{
throw TranslateSqlException(e);
}
}