public async Task <ShortUrl> GetShortUrlAsync(string id) { try { Guard.ArguementEvaluate(nameof(id), (() => { if (id.Length <= 4) { return(false, "The value must be greater than 4 in length"); } return(true, null); })); var keys = id.Split('.'); var expiredKey = keys[0]; var key = keys[1]; var record = await _urlShortenerOperationalStore.GetShortUrlAsync(key); if (record != null) { _eventSource.FireEvent(new ShortenerEventArgs() { ShortUrl = record, EventType = ShortenerEventType.Get, UtcDateTime = DateTime.UtcNow }); return(record); } record = await _expiredUrlShortenerOperationalStore.GetShortUrlAsync(expiredKey); _eventSource.FireEvent(new ShortenerEventArgs() { ShortUrl = record, EventType = ShortenerEventType.Expired, UtcDateTime = DateTime.UtcNow }); return(record); } catch (Exception ex) { _logger.LogError(ex.Message); throw; } }