private void CheckUsers() { var now = Utils.Now(); var users = _dbService.Collection <User>() .Where(u => u.NotifyTime > 0 && u.NotifyTime < now) .ToList(); foreach (var user in users) { if (user.NotifyPathId <= 0) { continue; } var path = _pathService.PathFromId(user, user.NotifyPathId); var message = $"Время совершить шаг по пути: \"{path.Name}\""; // notify user _socialService.Notify(new [] { user.Id }, message); // clear notify time user.NotifyTime = 0; user.NotifyPathId = 0; _dbService.Update(user); } }
public Duel JoinDuel(string userId, string duelId, string image, string photoId) { // load user var user = _dbService.ById <User>(userId, false); // load duel var duel = _dbService.ById <Duel>(duelId); // check if duel doesnt exist or already has an opponent if (duel == null) { throw new InvalidOperationException("Дуэль удалена"); } if (duel.Opponent != null) { throw new InvalidOperationException("Дуэль уже принята"); } // check image if (photoId.Length > 300) { throw new ArgumentException("PhotoId is too long"); } if (!_socialService.CheckImageUrl(image)) { throw new ArgumentException("Image url is invalid"); } // check if own if (duel.Creator.User.Id == userId) { throw new InvalidOperationException("This is your own duel"); } // get current duel var currentDuel = _dbService.Collection <Duel>().FirstOrDefault(Duel.IsCurrentDuelOf(userId)); if (currentDuel != null) { throw new InvalidOperationException("У вас уже есть текущая дуэль"); } // create new duel object duel.Opponent = new Duellist { Image = image, PhotoId = photoId, Time = Utils.Now(), User = user.ToMeta(), Voters = new List <UserMeta>() }; duel.Status = DuelStatus.Started; duel.TimeStart = Utils.Now(); duel.TimeFinish = Utils.Now() + 24 * 3600000L; // notify creator _socialService.Notify( new[] { duel.Creator.User.Id }, $"{user.Name} принял ваш вызов. К барьеру, господа! Зайдите, чтобы опубликовать голосование." ); // write to db _dbService.Update(duel); // return return(duel); }