UserStickerRelationDao.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using CardCollector.DataBase.Entity;
  5. using Microsoft.EntityFrameworkCore;
  6. namespace CardCollector.DataBase.EntityDao
  7. {
  8. /* Предоставляет доступ к соотношениям таблицы user_to_sticker_relation */
  9. public static class UserStickerRelationDao
  10. {
  11. /* Возвращает словарь стикеров по Id пользователя */
  12. public static async Task<Dictionary<string, UserStickerRelationEntity>> GetListById(long userId)
  13. {
  14. var Table = BotDatabase.Instance.UserStickerRelations;
  15. var result = await Table.Where(i => i.UserId == userId).ToDictionaryAsync(p=> p.ShortHash, p=> p);
  16. return result;
  17. }
  18. /* Добавляет новое отношение в таблицу */
  19. public static async Task<UserStickerRelationEntity> AddSticker(UserEntity user, StickerEntity sticker, int count = 1)
  20. {
  21. var Table = BotDatabase.Instance.UserStickerRelations;
  22. if (user.Stickers.ContainsKey(sticker.Md5Hash))
  23. {
  24. user.Stickers[sticker.Md5Hash].Count += count;
  25. return user.Stickers[sticker.Md5Hash];
  26. }
  27. var relation = new UserStickerRelationEntity
  28. {
  29. UserId = user.Id,
  30. StickerId = sticker.Id,
  31. Count = count,
  32. ShortHash = sticker.Md5Hash
  33. };
  34. await sticker.ApplyEffect(user, relation);
  35. var result = await Table.AddAsync(relation);
  36. user.Stickers.Add(sticker.Md5Hash, result.Entity);
  37. await BotDatabase.SaveData();
  38. return result.Entity;
  39. }
  40. }
  41. }