コード例 #1
0
        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;
            }
        }