CourseWork_BankYouBankrupt/BankYouBankrupt/BankYouBankruptRestAPI/Controllers/AccountController.cs
2023-05-16 21:55:36 +04:00

212 lines
5.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using BankYouBankruptBusinessLogic.BusinessLogics;
using BankYouBankruptContracts.BindingModels;
using BankYouBankruptContracts.BusinessLogicsContracts;
using BankYouBankruptContracts.SearchModels;
using BankYouBankruptContracts.ViewModels;
using BankYouBankruptDatabaseImplement.Models;
using BankYouBankruptDataModels.Enums;
using Microsoft.AspNetCore.Mvc;
namespace BankYouBankruptRestApi.Controllers
{
//указание у контроллера, что Route будет строиться не только по наванию контроллера, но и по названию метода (так как у нас два Post-метода)
[Route("api/[controller]/[action]")]
[ApiController]
public class AccountController : Controller
{
private readonly ILogger _logger;
private readonly IAccountLogic _accountLogic;
private readonly IDebitingLogic _debitingLogic;
private readonly ICreditingLogic _creditingLogic;
private readonly ICashWithdrawalLogic _cashLogic;
private readonly IMoneyTransferLogic _moneyTransferLogic;
public AccountController(IAccountLogic accountLogic, IDebitingLogic debitingLogic, ICashWithdrawalLogic cashLogic,
ICreditingLogic creditingLogic, IMoneyTransferLogic moneyTransferLogic, ILogger<AccountController> logger)
{
_logger = logger;
_accountLogic = accountLogic;
_debitingLogic = debitingLogic;
_cashLogic = cashLogic;
_creditingLogic = creditingLogic;
_moneyTransferLogic = moneyTransferLogic;
}
[HttpGet]
public AccountViewModel? Login(string accountNumber, string passwordAccount)
{
try
{
//попытка найти запись по переданным номеру и паролю счёта
return _accountLogic.ReadElement(new AccountSearchModel
{
AccountNumber = accountNumber,
PasswordAccount = passwordAccount
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
[HttpPost]
public void Register(AccountBindingModel model)
{
try
{
//создание счёта
_accountLogic.Create(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка регистрации");
throw;
}
}
[HttpPost]
public void UpdateData(AccountBindingModel model)
{
try
{
//изменение счёта
_accountLogic.Update(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка обновления данных");
throw;
}
}
//найти все счета, которые создал конкретный кассир
[HttpGet]
public List<AccountViewModel>? SearchAccounts(int cashierId)
{
try
{
return _accountLogic.ReadList(new AccountSearchModel
{
CashierId = cashierId
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
//найти все счета клиента
[HttpGet]
public List<AccountViewModel>? SearchAccountsOfCLient(int clientId)
{
try
{
//попытка найти запись по переданным номеру и паролю счёта
return _accountLogic.ReadList(new AccountSearchModel
{
ClientId = clientId
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
//найти все открытые заявки на снятие средств
[HttpGet]
public List<DebitingViewModel>? FindOpenDebiting()
{
try
{
return _debitingLogic.ReadList(new DebitingSearchModel
{
Status = StatusEnum.Открыта
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
//найти все открытые заявки на снятие средств
[HttpGet]
public List<CreditingViewModel>? FindOpenCrediting()
{
try
{
return _creditingLogic.ReadList(new CreditingSearchModel
{
Status = StatusEnum.Открыта
});
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
//подтверждение заявки на снятие средств со счёта
[HttpPost]
public void CloseDebiting(CashWithdrawalBindingModel CashWithdrawal)
{
try
{
_cashLogic.Create(CashWithdrawal);
_accountLogic.ChangeBalance(new AccountSearchModel
{
Id = CashWithdrawal.AccountId
}, CashWithdrawal.Sum * -1);
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
//подтверждение заявки на снятие средств со счёта
[HttpPost]
public void CloseCrediting(MoneyTransferBindingModel moneyTransfer)
{
try
{
_moneyTransferLogic.Create(moneyTransfer);
_accountLogic.ChangeBalance(new AccountSearchModel
{
Id = moneyTransfer.AccountPayeeId
}, moneyTransfer.Sum);
//если нет отправителя, т. е. операция на перевод денег из нала в виртуал на карту
if (moneyTransfer.AccountSenderId.HasValue)
{
_accountLogic.ChangeBalance(new AccountSearchModel
{
Id = moneyTransfer.AccountSenderId
}, moneyTransfer.Sum * -1);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "Ошибка входа в систему");
throw;
}
}
}
}