|
1 | 1 | # ATM [Hexagonal Architecture] |
2 | 2 |
|
3 | | -Реализация системы банкомата с Web API интерфейсом (ASP.NET Controllers) и in-memory хранилищем. |
4 | | - |
5 | | -## Функциональность |
6 | | -- создание сессии пользователя (AccountNumber + PIN) |
7 | | -- создание сессии администратора (SystemPassword + AccountNumber) |
8 | | -- создание счёта (только через admin session) |
9 | | -- просмотр баланса |
10 | | -- пополнение счёта |
11 | | -- снятие денег |
12 | | -- просмотр истории операций |
13 | | - |
14 | | -Любая операция со счётом создаёт запись в истории. |
15 | | - |
16 | | -## Архитектура |
17 | | -Проект построен по гексагональному подходу: |
18 | | -- **Domain** — доменная модель и value objects |
19 | | -- **Application** — бизнес-логика/юзкейсы (порты) |
20 | | -- **Application.Abstractions** — абстракции (репозитории, провайдеры и т.п.) |
21 | | -- **Application.Contracts** — контракты запросов/ответов и результаты операций |
22 | | -- **Infrastructure** — реализации абстракций (in-memory репозитории), регистрация DI |
23 | | -- **Presentation** — ASP.NET Web API (Controllers), маппинг HTTP → порты |
24 | | - |
25 | | -Связывание слоёв выполнено через `Microsoft.Extensions.DependencyInjection`. |
26 | | -Каждый модуль предоставляет методы расширения для регистрации зависимостей: |
| 3 | +Implementation of an ATM system with a Web API interface using ASP.NET Controllers and in-memory storage. |
| 4 | + |
| 5 | +## Functionality |
| 6 | + |
| 7 | +- creating a user session using AccountNumber + PIN |
| 8 | +- creating an administrator session using SystemPassword + AccountNumber |
| 9 | +- creating an account, available only through an admin session |
| 10 | +- viewing the account balance |
| 11 | +- depositing money into an account |
| 12 | +- withdrawing money |
| 13 | +- viewing transaction history |
| 14 | + |
| 15 | +Any account-related operation creates a record in the transaction history. |
| 16 | + |
| 17 | +## Architecture |
| 18 | + |
| 19 | +The project follows the hexagonal architecture approach: |
| 20 | + |
| 21 | +- **Domain** — domain model and value objects |
| 22 | +- **Application** — business logic / use cases through ports |
| 23 | +- **Application.Abstractions** — abstractions such as repositories, providers, and similar components |
| 24 | +- **Application.Contracts** — request/response contracts and operation results |
| 25 | +- **Infrastructure** — implementations of abstractions, including in-memory repositories, and DI registration |
| 26 | +- **Presentation** — ASP.NET Web API Controllers and HTTP-to-port mapping |
| 27 | + |
| 28 | +The layers are connected using `Microsoft.Extensions.DependencyInjection`. |
| 29 | + |
| 30 | +Each module provides extension methods for dependency registration: |
| 31 | + |
27 | 32 | - `builder.Services.AddApplication();` |
28 | 33 | - `builder.Services.AddInfrastructure();` |
29 | 34 |
|
30 | | -## Конфигурация системного пароля |
31 | | -Системный пароль читается через `ISystemPasswordProvider` (реализация в `Atm.Presentation.Common.SystemPasswordProvider`) |
32 | | -и берётся из конфигурации: |
| 35 | +## System Password Configuration |
| 36 | + |
| 37 | +The system password is read through `ISystemPasswordProvider`, implemented in `Atm.Presentation.Common.SystemPasswordProvider`, and is taken from the configuration. |
33 | 38 |
|
34 | 39 | `appsettings.json`: |
| 40 | + |
35 | 41 | ```json |
36 | 42 | { |
37 | 43 | "SystemAuth": { |
38 | 44 | "SystemPassword": "your_password_here" |
39 | 45 | } |
40 | | -} |
| 46 | +} |
0 commit comments