public bool RemoveUser(string _key) { if (string.IsNullOrWhiteSpace(_key)) { throw new ArgumentException("Key can not be null or white space!", nameof(_key)); } using (var context = new GrabberDbContext()) { var dbUser = context.DbUsers.FirstOrDefault(_dbUser => _dbUser.Key == _key); if (dbUser == null) { return(false); } var userGroups = context.DbGroups.Where(_dbGroup => _dbGroup.DbUser.Id == dbUser.Id).ToArray(); context.DbGroups.RemoveRange(userGroups); context.DbUsers.Remove(dbUser); context.SaveChanges(); return(true); } }
public User[] GetUsers() { using (var context = new GrabberDbContext()) { var users = context.DbUsers.Select(_dbUser => new User(_dbUser.Token, _dbUser.Key, context.DbGroups.Where(_dbGroup => _dbGroup.DbUser.Id == _dbUser.Id).Select(_dbGroup => new Group(_dbGroup.GroupId, _dbGroup.UpdatePeriod, _dbGroup.GroupName)).ToArray())); return(users.ToArray()); } }
public void AddGroupToUser(string _key, Group _group) { if (string.IsNullOrWhiteSpace(_key)) { throw new ArgumentException("Key can not be null or white space!", nameof(_key)); } if (_group == null) { throw new ArgumentNullException(nameof(_group)); } using (var context = new GrabberDbContext()) { var dbUser = context.DbUsers.FirstOrDefault(_dbUser => _dbUser.Key == _key); if (dbUser == null) { throw new ArgumentException($"User with key {_key} not found!"); } var existedGroup = context.DbGroups.FirstOrDefault(_dbGroup => _dbGroup.GroupId == _group.GroupId && _dbGroup.DbUser.Id == dbUser.Id); if (existedGroup == null) { var dbGroup = new DbGroup { GroupId = _group.GroupId, GroupPrefix = _group.Prefix, GroupName = _group.Name, UpdatePeriod = _group.UpdatePeriod, DbUser = dbUser, LastUpdateDateTime = DateTime.Now.ToUniversalTime() }; context.DbGroups.Add(dbGroup); } else { throw new ArgumentException($"User already has group with id {_group.GroupId}"); } context.SaveChanges(); } }
private void UpdateTimer_Elapsed(object sender, ElapsedEventArgs e) { m_updateTimer.Stop(); try { using (var context = new GrabberDbContext()) { foreach (var dbUser in context.DbUsers.ToList()) { var dtNow = DateTime.Now.ToUniversalTime(); var groupsToUpdate = context.DbGroups.ToList().Where(_dbGroup => (_dbGroup.LastUpdateDateTime + _dbGroup.UpdatePeriod) < dtNow && _dbGroup.DbUser.Id == dbUser.Id && !_dbGroup.IsUpdating).ToList(); if (groupsToUpdate.Any()) { var startDateTime = groupsToUpdate.Select(_group => _group.LastUpdateDateTime).Min(); groupsToUpdate.ForEach(_group => _group.IsUpdating = true); m_processor.Add(() => GetPostsFromGroup(dbUser, startDateTime, dtNow, groupsToUpdate)); } } context.SaveChanges(); } } catch (Exception ex) { Log.Error("Failed to updateTick", ex); } m_updateTimer.Start(); }
//подумать про проверку токена public void AddUser(string _key, string _token) { using (var context = new GrabberDbContext()) { var existUser = context.DbUsers.FirstOrDefault(_dbUser => _dbUser.Key == _key); if (existUser == null) { var dbUser = new DbUser { Token = _token, Key = _key }; context.DbUsers.Add(dbUser); context.SaveChanges(); } else { throw new ArgumentException("User already exists!"); } } }
public User GetUser(string _key) { if (string.IsNullOrWhiteSpace(_key)) { throw new ArgumentException("Key can not be null or white space!", nameof(_key)); } using (var context = new GrabberDbContext()) { var dbUser = context.DbUsers.FirstOrDefault(_user => _user.Key == _key); if (dbUser != null) { var userGroups = context.DbGroups.Where(_dbGroup => _dbGroup.DbUser.Id == dbUser.Id).Select(_dbGroup => new Group(_dbGroup.GroupId, _dbGroup.UpdatePeriod, _dbGroup.GroupName)).ToArray(); var user = new User(dbUser.Token, dbUser.Key, userGroups); return(user); } return(null); } }
public bool RemoveGroupFromUser(string _key, Group _group) { if (string.IsNullOrWhiteSpace(_key)) { throw new ArgumentException("Key can not be null or white space!", nameof(_key)); } if (_group == null) { throw new ArgumentNullException(nameof(_group)); } using (var context = new GrabberDbContext()) { var dbUser = context.DbUsers.FirstOrDefault(_dbUser => _dbUser.Key == _key); if (dbUser != null) { var dbGroup = context.DbGroups.FirstOrDefault(_dbGroup => _dbGroup.GroupPrefix == _group.Prefix && _dbGroup.GroupId == _group.GroupId && _dbGroup.DbUser.Id == dbUser.Id); if (dbGroup != null) { context.DbGroups.Remove(dbGroup); context.SaveChanges(); return(true); } } return(false); } }
private void GetPostsFromGroup(DbUser _user, DateTime _start, DateTime _end, List <DbGroup> _groups) { try { var idsList = _groups.Select(Helpers.ConvertGroupToSourceId).ToArray(); var sourceIds = string.Join(',', idsList); Log.Debug($"GetPostFromGroup with params User Id: {_user.Id} " + $"User key: {_user.Key} from {_start} to {_end} with groups {sourceIds}"); try { var newsFeed = m_vkApi.GetNewsFeed(_user.Token, _start, _end, sourceIds); var posts = m_feedToPostsConverter.Convert(newsFeed, _groups.ToDictionary(_key => _key.GroupId, _value => _value.GroupName)); Log.Debug($"Getting {posts.Count} posts"); using (var context = new GrabberDbContext()) { foreach (var group in _groups) { var dbGroup = context.DbGroups.FirstOrDefault(_dbGroup => _dbGroup.GroupId == group.GroupId && _dbGroup.DbUser.Id == group.DbUser.Id); if (dbGroup != null) { var postsFromGroup = posts.Where(_post => _post.GroupId == group.GroupId).ToList(); postsFromGroup.Sort(m_postComparer); var lastUpdatedElem = postsFromGroup.FirstOrDefault(_post => _post.PostId == group.LastUpdatedPostId); if (lastUpdatedElem != null) { var index = postsFromGroup.IndexOf(lastUpdatedElem); postsFromGroup.Take(index + 1).ToList().ForEach(_post => posts.Remove(_post)); postsFromGroup = postsFromGroup.Skip(index + 1).Take(postsFromGroup.Count - index + 1).ToList(); Log.Debug("Finded post equals to " + $"lastUpdatedPost wiht id {group.LastUpdatedPostId}, cutting completed"); } if (postsFromGroup.Count > 0) { dbGroup.LastUpdatedPostId = postsFromGroup.Last().PostId; } dbGroup.LastUpdateDateTime = DateTime.Now.ToUniversalTime(); dbGroup.IsUpdating = false; } else { Log.Error($"Can not find group with id {group.Id}"); } } context.SaveChanges(); } NewDataGrabbedEventHandler?.Invoke(_user.Key, posts); } catch (Exception ex) { using (var context = new GrabberDbContext()) { foreach (var group in _groups) { var dbGroup = context.DbGroups.FirstOrDefault(_dbGroup => _dbGroup.GroupId == group.GroupId && _dbGroup.DbUser.Id == group.DbUser.Id); if (dbGroup != null) { dbGroup.IsUpdating = false; } } context.SaveChanges(); } throw ex; } } catch (Exception ex) { Log.Error("Error, while get posts from group", ex); } }