Ejemplo n.º 1
0
        public ShortUrlResult Create(string longUrl, string baseUrl)
        {
            var result = new ShortUrlResult {
                Code = 0
            };
            var md5    = Md5(longUrl);
            var hadMap = _dictMaps.FirstOrDefault(d => d.Value.Md5 == md5);

            if (hadMap.Value != null)
            {
                result.ShortUrl = $"{baseUrl}/{hadMap.Value.ShortUrl}";
                return(result);
            }

            lock (Locker) {
                using (var dc = new ShortUrlContext()) {
                    var umTmp = dc.UrlMaps.FirstOrDefault(d => d.Md5 == md5);
                    if (umTmp != null)
                    {
                        ChangeRate(umTmp);
                        result.ShortUrl = umTmp.ShortUrl;
                        return(result);
                    }

                    if (_maxRecord == null)
                    {
                        _maxRecord = new MaxRecord {
                            Id         = Guid.NewGuid(),
                            Status     = 0,
                            No         = 1,
                            LastChange = DateTime.Now
                        };
                        dc.MaxRecords.Add(_maxRecord);
                    }
                    else
                    {
                        _maxRecord.No        += 1;
                        _maxRecord.LastChange = DateTime.Now;
                        var old = dc.MaxRecords.Find(_maxRecord.Id);
                        dc.Entry(old).CurrentValues.SetValues(_maxRecord);
                    }

                    var um = new UrlMap {
                        Id         = Guid.NewGuid(),
                        LongUrl    = longUrl,
                        ShortUrl   = Encrypt(_maxRecord.No),
                        Md5        = md5,
                        Status     = (int)EntityStatus.Init,
                        LastChange = DateTime.Now
                    };
                    dc.UrlMaps.Add(um);
                    dc.SaveChanges();
                    ChangeRate(um);
                    result.ShortUrl = $"{baseUrl}/{um.ShortUrl}";
                    return(result);
                }
            }
        }
Ejemplo n.º 2
0
 private Service()
 {
     using (var dc = new ShortUrlContext()) {
         _maxRecord = dc.MaxRecords.FirstOrDefault();
         _dictMaps  = new Dictionary <string, UrlMap>();
         var maps = dc.UrlMaps.Where(d => d.Status < 1000).OrderByDescending(d => d.LastChange).Take(100);
         foreach (var map in maps)
         {
             _dictMaps.Add(map.ShortUrl, map);
         }
     }
 }
Ejemplo n.º 3
0
 public User CreateUser(string companyName)
 {
     using (var dc = new ShortUrlContext()) {
         var user = dc.Users.FirstOrDefault(d => d.CompanyName == companyName.Trim());
         if (user != null)
         {
             return(user);
         }
         user = new User {
             Id          = Guid.NewGuid(),
             CompanyName = companyName.Trim(),
             LastChange  = DateTime.Now
         };
         user.Token = Md5(user.Id + user.CompanyName);
         dc.Users.Add(user);
         dc.SaveChanges();
         return(user);
     }
 }
Ejemplo n.º 4
0
        public string GetLongUrl(string shortUrl)
        {
            var key = shortUrl;
            var map = _dictMaps.FirstOrDefault(d => d.Key == key);

            if (map.Value != null)
            {
                ChangeRate(map.Value);
                return(map.Value.LongUrl);
            }

            using (var dc = new ShortUrlContext()) {
                var urlMap = dc.UrlMaps.FirstOrDefault(d => d.ShortUrl == shortUrl);
                if (urlMap == null)
                {
                    return(null);
                }

                ChangeRate(urlMap);
                return(urlMap.LongUrl);
            }
        }
Ejemplo n.º 5
0
        public void CheckUser(string token, bool isAdmin = false)
        {
            if (string.IsNullOrEmpty(token))
            {
                throw new Exception("没有指定Token");
            }

            if (isAdmin)
            {
                if (_userAdmin.Token != token)
                {
                    throw new Exception($"非法操作。Token:{token}");
                }
            }

            using (var dc = new ShortUrlContext()) {
                var user = dc.Users.FirstOrDefault(d => d.Token == token && d.Status == (int)EntityStatus.Init);
                if (user == null)
                {
                    throw new Exception($"Token无效,Token:{token}");
                }
            }
        }
Ejemplo n.º 6
0
        public static Service GetInstance()
        {
            if (_serviceInstance == null)
            {
                using (var dc = new ShortUrlContext()) {
                    _userAdmin = dc.Users.FirstOrDefault(d => d.CompanyName == CsAdminName);
                    if (_userAdmin == null)
                    {
                        _userAdmin = new User {
                            Id          = Guid.NewGuid(),
                            CompanyName = CsAdminName,
                            LastChange  = DateTime.Now
                        };
                        _userAdmin.Token = Md5(_userAdmin.Id + CsAdminName);
                        dc.Users.Add(_userAdmin);
                        dc.SaveChanges();
                    }
                }

                _serviceInstance = new Service();
            }

            return(_serviceInstance);
        }