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); } } }
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); } } }
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); } }
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); } }
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}"); } } }
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); }