public async Task <PushSubscription> SubscribeAsync(string clientId, PushSubscription subscription)
        {
            Subscription stored = null;
            var          client = await _db.ClientSet.FindAsync(clientId);

            if (client == null)
            {
                return(null);
            }

            // retrieve existing, if any
            stored = await _db.SubscriptionSet
                     .Include(s => s.Client)
                     .Where(i => i.ClientId == clientId &&
                            ((!string.IsNullOrEmpty(subscription.UserId) && i.UserId == subscription.UserId) ||
                             (string.IsNullOrEmpty(subscription.UserId) && i.P256Dh == subscription.P256Dh()))
                            )
                     .FirstOrDefaultAsync();

            // expired or disabled client?
            if (stored != null &&
                (
                    !client.IsEnabled ||
                    (stored.Expires.HasValue == true && DateTimeOffset.FromUnixTimeMilliseconds(stored.Expires.Value) < DateTimeOffset.UtcNow)
                )
                )
            {
                // tidy up
                _db.Remove(stored);
                stored = null;
            }

            // client isn't enabled?
            if (!client.IsEnabled)
            {
                // tidy up already done, exit
                return(null);
            }

            // (re)new
            if (stored == null)
            {
                stored          = _mapper.Map <Subscription>(subscription);
                stored.ClientId = clientId;
                await _db.AddAsync(stored);

                await _db.SaveChangesAsync(true);
            }

            // update (userId, basically)
            _mapper.Map(stored, subscription);
            return(subscription);
        }