Банковский счет
Видео

Если вам лень постоянно пересоздавать проекты для ката, скачайте bat. Как им пользоваться можно почитать тут

Задача

Напишите класс, отвечающий за операции с банковским счетом пользователей.

Критерии приемлемости

Весь код должен быть покрыт тестами.

  1. Создайте метод добавления записи о клиенте, принимающий id клиента (int).
    1. Метод возвращает 0 в случае успеха, начальное значение счета = 0
    2. Метод возвращает 100, если счет на клиента с пришедшим id уже заводился ранее
  2. Создайте метод получения значения счета, принимающий id клиента (int)
    1. Метод возвращает объект {ErrorCode = 200, Result = 0} если на клиента с таким id не открывался счет
    2. Метод возвращает объект {ErrorCode = 0, Result = [сумма на счете]} в случае успеха
  3. Создайте метод снятия/пополнения принимающий id клиента(int) и сумму операции (отрицательное число в случае снятия)
    1. Метод возвращает 200 если на клиента с таким id не открывался счет
    2. Метод возвращает 0 в случае успеха
    3. Сумма на счете должна измениться в соответствии с преведенной операцией
    4. Метод возвращает 300 eсли на счете клиента не достаточно средств
  4. Создайте метод, позволяющий отменить последнюю операцию, принимающий id клиента (int)
    1. Метод возвращает 200 если на клиента с таким id не открывался счет
    2. Метод по-прежнему возвращает объект {ErrorCode = 0}, если история операций пуста и удалять нечего
    3. Значение на счете должно вернуться к состоянию до последней проведенной операции
  5. Mетод снятия/пополнения, в случае успеха, должен возвращать {ErrorCode = 0, Result = "#[номер операции]"}
    1. Номер операции не относится к конкретному клиенту и отражает общее количество проведенных экземпляром класса операций
    2. Отмена операции не влияет на подсчет номеров
  6. Предоставить возможность отмены любого количества операций, добавив в метод из п.5 второй параметр - количество отменяемых операций

Критерий времени

Нормальный результат для разработчика (не junior) — до 30 минут на выполнение всех требований.