public void Podyaka(string UserId, string PostId, string ToUserId, bool IsLike) { db.PodyakaLog.Add(new PodyakaLog { FromUserId = UserId, ToUserId = ToUserId, PostId = PostId, IsDone = false, IsLike = IsLike, Time = DateTime.Now }); db.SaveChanges(); }
static void RebalanceDo() { try { while (true) { if (DateTime.Now.Hour == 4 && DateTime.Now.Minute == 0) { FacebookEntities db = new FacebookEntities(); double SumAvtoritet = db.Users.Sum(u => u.Avtoritet); double NewGlobalRaitingValue = (double)SumAvtoritet / (double)db.Users.Count(); if (NewGlobalRaitingValue > 1) { db.ServiseData.Single(s => s.Id == 1).Value = NewGlobalRaitingValue.ToString(); } db.SaveChanges(); } Thread.Sleep(60000); } } catch (Exception e) { WriteToFile(e.ToString()); } }
static void PodyakiLogDo() { try { while (true) { FacebookEntities db = new FacebookEntities(); var AvtoritetConst = double.Parse(db.ServiseData.Single(s => s.Id == 1).Value); foreach (var log in db.PodyakaLog.Where(l => !l.IsDone)) { log.IsDone = true; if (log.FromUserId == log.ToUserId) { continue; } var promote = db.Promote.SingleOrDefault(p => p.PostId == log.PostId); if (promote != null) { db.Promote.Remove(promote); } var ToUser = db.Users.Single(u => u.UserId == log.ToUserId); var FromUser = db.Users.Single(u => u.UserId == log.FromUserId); var post = ToUser.Posts.SingleOrDefault(p => p.PostId == log.PostId); if (post == null) { post = new Posts { PostId = log.PostId }; ToUser.Posts.Add(post); } var podyaka = post.Podyaki.SingleOrDefault(p => p.UserId == log.FromUserId); if (podyaka == null) { if (log.IsLike) { DateTime currentDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); var FromUserPrevPodyakas = FromUser.Podyaki.Where(po => po.Time > currentDate); double newAvtoritet = ((FromUser.Avtoritet + AvtoritetConst) / 2.0) / (FromUserPrevPodyakas.Count() + 1); foreach (var prevPodyaka in FromUserPrevPodyakas) { prevPodyaka.Posts.Users.Avtoritet = prevPodyaka.Posts.Users.Avtoritet - prevPodyaka.Avtoritet + newAvtoritet; prevPodyaka.Avtoritet = newAvtoritet; } post.Podyaki.Add(new Podyaki { UserId = log.FromUserId, Time = log.Time, Avtoritet = newAvtoritet }); post.PodyakiCount = post.PodyakiCount + 1; ToUser.PodyakiCount = ToUser.PodyakiCount + 1; ToUser.Avtoritet += newAvtoritet; } } else { if (!log.IsLike) { DateTime currentDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); var FromUserPrevPodyakas = FromUser.Podyaki.Where(po => po.Time > currentDate); post.PodyakiCount = post.PodyakiCount - 1; ToUser.PodyakiCount = ToUser.PodyakiCount - 1; ToUser.Avtoritet -= podyaka.Avtoritet; double newAvtoritet = 0; if (FromUserPrevPodyakas.Count() != 1) { newAvtoritet = ((FromUser.Avtoritet + AvtoritetConst) / 2.0) / (FromUserPrevPodyakas.Count() - 1); } db.Podyaki.Remove(podyaka); foreach (var prevPodyaka in FromUserPrevPodyakas) { prevPodyaka.Posts.Users.Avtoritet = prevPodyaka.Posts.Users.Avtoritet - prevPodyaka.Avtoritet + newAvtoritet; prevPodyaka.Avtoritet = newAvtoritet; } } } log.IsDone = true; } db.SaveChanges(); Thread.Sleep(100); } } catch (Exception e) { WriteToFile(e.ToString()); } }