فهرست منبع

Critical bug fix

Tigran 4 سال پیش
والد
کامیت
cf69c65e3c

+ 2 - 2
CardCollector/Controllers/AuctionController.cs

@@ -1,7 +1,6 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
-using CardCollector.DataBase;
 using CardCollector.DataBase.Entity;
 using CardCollector.DataBase.EntityDao;
 using CardCollector.Others;
@@ -47,7 +46,8 @@ namespace CardCollector.Controllers
                                                       $"\n{Messages.you_collected} {coinsSum}{Text.coin} / {gemsSum}{Text.gem}");
             user.Cash.Coins += coinsSum;
             user.Cash.Gems += gemsSum;
-            if (product.Quantity == 0) AuctionDao.DeleteRow(sticker.TraderInfo.Id);
+            if (product.Quantity == 0)
+                await AuctionDao.DeleteRow(sticker.TraderInfo.Id);
         }
         
         public static async Task<int> GetStickerCount(string stickerId)

+ 2 - 3
CardCollector/DataBase/EntityDao/AuctionDao.cs

@@ -19,8 +19,7 @@ namespace CardCollector.DataBase.EntityDao
         {
             /* Заменил цикл на LINQ выражение и тип возвращаемого значения - список позиций,
              так как один и тот же стикер может продавать несколько людей */
-            return await Table
-                .Where(e => e.StickerId == stickerId).ToListAsync();
+            return (await Table.WhereAsync(e => Task.FromResult(e.StickerId == stickerId))).ToList();
         }
 
         public static async Task<TraderInformation> GetTraderInfo(int productId)
@@ -53,7 +52,7 @@ namespace CardCollector.DataBase.EntityDao
             await Instance.SaveChangesAsync();
         }
         //удаляем проданный объект
-        public static async void DeleteRow(int productId)
+        public static async Task DeleteRow(int productId)
         {
             if (await Table.FirstOrDefaultAsync(c => c.Id == productId) is not { } item) return;
             Table.Attach(item);

+ 4 - 1
CardCollector/DataBase/EntityDao/UserDao.cs

@@ -47,7 +47,10 @@ namespace CardCollector.DataBase.EntityDao
 
         public static async Task<UserEntity> GetById(long userId)
         {
-            return await Table.FirstAsync(item => item.Id == userId);
+            var user = await Table.FirstAsync(item => item.Id == userId);
+            user.Cash = await CashDao.GetById(user.Id);
+            //user.Stickers = await UserStickerRelationDao.GetListById(user.Id);
+            return user;
         }
 
         /* Получение пользователя по представлению user из Базы данных */

+ 15 - 0
CardCollector/Extensions.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Concurrent;
 using System.Collections.Generic;
 using System.Linq;
 using System.Threading.Tasks;
@@ -147,5 +148,19 @@ namespace CardCollector
             text += $"{Messages.sorting} {dict[Command.sort]}\n\n{Messages.select_filter}";
             return text;
         }
+        
+        public static async Task<IEnumerable<T>> WhereAsync<T>(
+            this IEnumerable<T> source, Func<T, Task<bool>> predicate)
+        {
+            var results = new ConcurrentQueue<T>();
+            var tasks = source.Select(
+                async x =>
+                {
+                    if (await predicate(x))
+                        results.Enqueue(x);
+                });
+            await Task.WhenAll(tasks);
+            return results;
+        }
     }
 }