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(); }
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(); }); }
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); }