Exemple #1
0
        private async Task Withdraw(AccountId accountId, Money withdrawAmount)
        {
            var customerId = _customerService.GetCurrentCustomerId();

            IAccount account = await _accountRepository.Find(accountId, customerId);

            if (account is Account withdrawAccount)
            {
                Money localCurrencyAmount = await _currencyExchanger.Convert(withdrawAmount, withdrawAccount.Currency);

                Debit debit = _accountFactory.NewDebit(withdrawAccount, localCurrencyAmount, DateTime.UtcNow);

                var currentBalance = withdrawAccount.GetCurrentBalance();
                if (currentBalance.Subtract(debit.Amount).Amount < 0)
                {
                    _logger.LogWarning($"{nameof(Withdraw)} Account {accountId} balance insufficient");
                    _outputPort?.OutOfFunds();
                    return;
                }

                await Withdraw(withdrawAccount, debit);

                _outputPort?.Ok(debit, withdrawAccount);
                return;
            }

            _logger.LogWarning($"{nameof(Withdraw)} Account {accountId} not found for customer {customerId}");
            _outputPort?.NotFound();
        }
        public async Task ExecuteAsync(string userId, string title, string content, Stream image, string extension)
        {
            var post = new Post
            {
                Title     = title,
                Content   = content,
                CreatedAt = DateTime.Now,
                UserId    = userId,
                Image     = $"{Guid.NewGuid()}{extension}"
            };

            var result = await _imageService.UploadAsync(post.Image, image);

            if (result.IsT1)
            {
                _notification.Add("Detail", result.AsT1.Value);
                _outputPort.Error();

                return;
            }

            await _postRepository.AddAsync(post);

            _outputPort.Ok();
        }
        public async Task ExecuteAsync(string userId, int postId)
        {
            var post = await _postRepository.GetAsync(postId);

            if (post is null || post.UserId != userId)
            {
                _outputPort.NotFound();

                return;
            }

            var result = await _imageService.RemoveAsync(post.Image);

            if (result.IsT1)
            {
                _notification.Add("Detail", result.AsT1.Value);
                _outputPort.Error();

                return;
            }

            await _postRepository.RemoveAsync(postId);

            _outputPort.Ok();
        }
Exemple #4
0
        public async Task GetById(int id)
        {
            var trip = await _tripRepository.GetById(id);

            var flights = await _flightRepository.GetAllByQuery(new FilterRequest()
            {
                TripId = id
            });

            trip.Flights   = flights;
            trip.Transfers = flights.Count - 1;
            trip.Distance  = (int)flights.Select(f => GeolocationUtils.CalculateDistanceByCoordinates(
                                                     f.DepartureAirport.Longitude,
                                                     f.DepartureAirport.Latitude,
                                                     f.ArriveAirport.Longitude,
                                                     f.ArriveAirport.Latitude)).Sum();
            _outputPort.Ok(trip);
        }
        public async Task CreateNewUser(Name name, Birthdate birthdate)
        {
            var user = _userFactory.NewUser(name, birthdate);
            await _userRepository.AddAsync(user);

            await _unitOfWork.Save();

            _outputPort?.Ok(user);
        }
        public async Task GetAllByPattern(string pattern)
        {
            var result = new List <Country>();

            if (pattern != null)
            {
                result = await _countryRepository.GetAllByPattern(pattern);
            }
            _outputPort.Ok(result);
        }
        private async Task OpenAccount(Money amountToDeposit)
        {
            var customerId = _customerService.GetCurrentCustomerId();
            var account    = _accountFactory.NewAccount(customerId, amountToDeposit.Currency);
            var credit     = _accountFactory.NewCredit(account, amountToDeposit, DateTime.UtcNow);

            await Deposit(account, credit);

            _outputPort?.Ok(account);
        }
        public async Task GetAllByPattern(string pattern)
        {
            var result = new List <Models.Airport>();

            if (pattern != null)
            {
                result = await _airportRepository.GetAllByPattern(pattern);
            }

            _outputPort.Ok(result);
        }
        private async Task DepositAsync(AccountId accountId, Money amount)
        {
            var account = await _accountRepository.Get(accountId);

            if (account is Account depositAccount)
            {
                var convertedAmount = await _currencyExchanger.Convert(amount, depositAccount.Currency);

                var credit = _accountFactory.NewCredit(depositAccount, convertedAmount, DateTime.UtcNow);

                await DepositAsync(depositAccount, credit);

                _outputPort?.Ok(credit, depositAccount);
                return;
            }

            _logger.LogWarning($"{nameof(DepositAsync)} Account not found {accountId}");
        }
        public async Task ExecuteAsync(string userName, string email, string password)
        {
            var user = new User
            {
                Email    = email,
                UserName = userName
            };

            var result = await _userService.SignUpAsync(user, password);

            result.Switch(
                ok => _outputPort.Ok(),
                error =>
            {
                _notification.Add("Detail", error.Value);
                _outputPort.Conflict();
            });
        }
Exemple #11
0
        public async Task ExecuteAsync(string userId, int pageIndex, int pageSize, string searchTerms)
        {
            var posts = await _postRepository.GetPaginatedByUserAsync(userId, pageIndex, pageSize, searchTerms);

            _outputPort.Ok(posts);
        }
        public async Task GetAllByTripId(FilterRequest filterRequest)
        {
            var flight = await _flightRepository.GetAllByQuery(filterRequest);

            _outputPort.Ok(flight);
        }
        private async Task GetUserInternal(int userId)
        {
            var user = await _userRepository.GetById(userId);

            _outputPort.Ok(user);
        }