예제 #1
0
        public async Task Create_Wallet()
        {
            Wallet wallet = new Wallet
            {
                Id          = Guid.NewGuid(),
                Name        = "My Wallet 1",
                CreatedDate = DateTime.Now,
                OwnerId     = Guid.NewGuid().ToString(),
                Moneys      = new List <Money>
                {
                    new Money
                    {
                        Amount       = 120.00M,
                        CurrencyCode = "TRY",
                        CreatedDate  = DateTime.Now
                    },
                    new Money
                    {
                        Amount       = 50.00M,
                        CurrencyCode = "USD",
                        CreatedDate  = DateTime.Now
                    }
                }
            };
            await _context.Wallets.AddAsync(wallet);

            var result = await _context.SaveChangesAsync();

            Assert.True(result > 0);
        }
        public async Task <Guid> Handle(AddMoneyToWallet request, CancellationToken cancellationToken)
        {
            Money money = new Money
            {
                Amount       = request.Amount,
                WalletId     = request.WalletId,
                CreatedDate  = DateTime.Now,
                CurrencyCode = request.CurrencyCode,
                Id           = Guid.NewGuid()
            };
            ProcessLog processLog = new ProcessLog
            {
                Amount       = request.Amount,
                CurrencyCode = request.CurrencyCode,
                CreatedDate  = DateTime.Now,
                LogType      = ProcessLogType.Deposit
            };
            await _context.Moneys.AddAsync(money, cancellationToken);

            await _context.ProcessLogs.AddAsync(processLog, cancellationToken);

            var create = await _context.SaveChangesAsync(cancellationToken);

            return(money.Id);
        }
        public async Task <Guid> Handle(UpdateWallet request, CancellationToken cancellationToken)
        {
            Wallet wallet = await _context.Wallets.FirstOrDefaultAsync(x => x.Id == request.Id, cancellationToken);

            // Cüzdan yoksa hata gönder.
            if (wallet == null)
            {
                throw new Exception("Cüzdan bulunamadı!");
            }
            wallet.Name        = request.Name;
            wallet.UpdatedDate = DateTime.Now;

            _context.Wallets.Update(wallet);
            var update = await _context.SaveChangesAsync(cancellationToken);

            return(wallet.Id);
        }
        public async Task <Guid> Handle(CreateWallet request, CancellationToken cancellationToken)
        {
            // Aynı owner'a ait aynı isimde cüzdan olmasının önüne geçer.
            var existsWalletName = await _context.Wallets.AnyAsync(
                x => x.OwnerId == request.OwnerId && string.Equals(x.Name, request.Name, StringComparison.CurrentCultureIgnoreCase), cancellationToken);

            if (existsWalletName)
            {
                throw new Exception("Bu isimde daha önce bir cüzdan eklenmiş! Lütfen başka bir isim kullanınız!");
            }

            Wallet wallet = new Wallet
            {
                Id          = Guid.NewGuid(),
                Name        = request.Name,
                CreatedDate = DateTime.Now,
                OwnerId     = request.OwnerId,
            };

            // Cüzdan oluşturulurken para varsa eklenecek.
            if (request.Moneys != null && request.Moneys.Any())
            {
                wallet.Moneys = request.Moneys.Select(w => new Money
                {
                    Amount       = w.Amount,
                    CurrencyCode = w.CurrencyCode,
                    CreatedDate  = DateTime.Now,
                }).ToList();

                // Eklenen paraların logları tutuluyor.
                ProcessLog[] processLogs = wallet.Moneys.Select(x => new ProcessLog
                {
                    Amount       = x.Amount,
                    CurrencyCode = x.CurrencyCode,
                    CreatedDate  = DateTime.Now,
                    LogType      = ProcessLogType.Deposit
                }).ToArray();
                await _context.ProcessLogs.AddRangeAsync(processLogs, cancellationToken);
            }

            await _context.Wallets.AddAsync(wallet, cancellationToken);

            var save = await _context.SaveChangesAsync(cancellationToken);

            return(wallet.Id);
        }
예제 #5
0
        public async Task <bool> Handle(DeleteWallet request, CancellationToken cancellationToken)
        {
            Wallet wallet = await _context.Wallets
                            .Include(x => x.Moneys)
                            .FirstOrDefaultAsync(x => x.Id == request.Id, cancellationToken);

            // İçinde para olan cüzdan silinemez.
            var isThereMoney = wallet.Moneys.Sum(x => x.Amount);

            if (isThereMoney > 0)
            {
                throw new Exception("İçinde para olan bir cüzdanı silemezsiniz!");
            }

            _context.Wallets.Remove(wallet);
            var delete = await _context.SaveChangesAsync(cancellationToken);

            return(delete > 0);
        }