AuctionDao.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using System.Threading.Tasks;
  6. using CardCollector.DataBase.Entity;
  7. using Microsoft.EntityFrameworkCore;
  8. namespace CardCollector.DataBase.EntityDao
  9. {
  10. public static class AuctionDao
  11. {
  12. private static readonly CardCollectorDatabase Instance = CardCollectorDatabase.GetSpecificInstance(typeof(AuctionDao));
  13. /* Таблица auction в представлении Entity Framework */
  14. private static readonly DbSet<AuctionEntity> Table = Instance.Auction;
  15. public static async Task<List<AuctionEntity>> GetProducts(string stickerId)
  16. {
  17. /* Заменил цикл на LINQ выражение и тип возвращаемого значения - список позиций,
  18. так как один и тот же стикер может продавать несколько людей */
  19. return (await Table.WhereAsync(e => Task.FromResult(e.StickerId == stickerId))).ToList();
  20. }
  21. public static async Task<int> GetTotalQuantity(string stickerId)
  22. {
  23. /* Добавил метод, который считает общее количество данных стикеров на аукционе */
  24. var list = await GetProducts(stickerId);
  25. return list.Sum(e => e.Count);
  26. }
  27. public static async Task<IEnumerable<StickerEntity>> GetStickers(string filter)
  28. {
  29. var entityList = (await Table.ToListAsync()).Select(async e => await StickerDao.GetById(e.StickerId));
  30. var stickersList = await Task.WhenAll(entityList);
  31. return stickersList
  32. .Where(item => item.Contains(filter))
  33. .GroupBy(item => item.Id)
  34. .Select(item => item.First());
  35. }
  36. //добавляем объект в аукцион
  37. public static async void AddNew(AuctionEntity product)
  38. {
  39. await Table.AddAsync(product);
  40. await Instance.SaveChangesAsync();
  41. }
  42. //удаляем проданный объект
  43. public static async Task DeleteRow(int productId)
  44. {
  45. if (await Table.FirstOrDefaultAsync(c => c.Id == productId) is not { } item) return;
  46. Table.Attach(item);
  47. Table.Remove(item);
  48. await Instance.SaveChangesAsync();
  49. }
  50. public static bool HaveAny(string stickerId, Expression<Func<AuctionEntity, bool>> source)
  51. {
  52. return Table.Where(i => i.StickerId == stickerId).AnyAsync(source).Result;
  53. }
  54. public static async Task<int> GetQuantity(int productId)
  55. {
  56. return (await Table.FirstAsync(item => item.Id == productId)).Count;
  57. }
  58. public static async Task<AuctionEntity> GetProduct(int productId)
  59. {
  60. return await Table.FirstAsync(item => item.Id == productId);
  61. }
  62. }
  63. }