UserDao.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using MafiaTelegramBot.DataBase.Entity;
  6. using MafiaTelegramBot.Game;
  7. using Microsoft.EntityFrameworkCore;
  8. namespace MafiaTelegramBot.DataBase.EntityDao
  9. {
  10. public static class UserDao
  11. {
  12. private static readonly MafiaDataBase DataBase = MafiaDataBase.GetInstance();
  13. private static readonly Dictionary<long, Player> ActiveUsers = new();
  14. public static async Task<Player> GetPlayerById(long id)
  15. {
  16. if (ActiveUsers.ContainsKey(id)) return ActiveUsers[id];
  17. var user = await Task.Run(()=> DataBase.Users.First(user1 => user1.Id == id));
  18. var player = Player.FromUserEntity(user);
  19. ActiveUsers.Add(user.Id, player);
  20. return player;
  21. }
  22. public static async Task Update(UserEntity user)
  23. {
  24. var result = await DataBase.Users.SingleOrDefaultAsync(b => b.Id == user.Id);
  25. if (result == null) DataBase.Users.Add(user);
  26. else
  27. {
  28. result.NickName = user.NickName;
  29. result.Username = user.Username;
  30. DataBase.Users.Update(result);
  31. }
  32. await DataBase.SaveChangesAsync();
  33. }
  34. public static async Task<bool> UserExists(long id)
  35. {
  36. if (ActiveUsers.ContainsKey(id)) return true;
  37. return await DataBase.Users.AnyAsync(user => user.Id == id);
  38. }
  39. }
  40. }