public async Task RemoveCoinAsync(Guid userId, TypeCoin typeCoin)
        {
            var purse = await FirstOrDefaultAsync(x => x.ApplicationUserId == userId,
                                                  include : sourse => sourse.Include(m => m.PurseCoins));

            PurseCoin findCoins = purse.PurseCoins.FirstOrDefault(x => x.TypeCoin == typeCoin);

            if (findCoins == null || findCoins.Count == 0)
            {
                throw new ApplicationException("This coin is not found");
            }

            findCoins.Count--;
            await Update(purse);
        }
        public async Task AddCoinsAsync(Guid userId, IEnumerable <Coin> coins)
        {
            var purse = await FirstOrDefaultAsync(x => x.ApplicationUserId == userId,
                                                  include : sourse => sourse.Include(m => m.PurseCoins));

            foreach (var coinsGroup in coins.GroupBy(x => x.TypeCoin))
            {
                var findCoin = purse.PurseCoins.FirstOrDefault(x => x.TypeCoin == coinsGroup.Key);
                if (findCoin == null)
                {
                    findCoin = new PurseCoin
                    {
                        TypeCoin = coinsGroup.Key
                    };
                    purse.PurseCoins.Add(findCoin);
                }
                findCoin.Count += coinsGroup.Count();
            }
            await Update(purse);
        }