Skip to content

aystream/bank-account-exercises

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

Вам необходимо симулировать банковский счет, поддерживающий операции открытия, закрытия, зачисления (снятия) средств и получение баланса. Остерегайтесь конкуррентных транзакций!

Доступ к банковскому счету может быть получен различными способами. Клиенты могут зачислять и снимать средства, используя интернет, мобильные телефоны, и т.д.

Создайте счет, к которому можно получать доступ из нескольких вычислительных потоков/процессов.

Должна быть возможность закрыть счет; операции со счетом после его закрытия должны завершаться с ошибкой.

Дополнительные подробности задания содержатся в файле с тестами.

Инструкции

Запустите файл с тестами, и добейтесь, чтобы все тесты проходили успешно.

Помните, что успешные тесты - это только первый шаг. Ваша цель - написать максимально читабельный и выразительный код.

Запуск тестов

Чтобы запустить тесты, выполните команду go test из директории с заданием.

Чтобы вместе с тестами также выполнить бенчмарки, вы можете запустить их с опциями --bench и --benchmem:

go test -v --bench . --benchmem

Публикация счета в виде веб-сервиса

После того, как реализация банковского счета будет готова, опубликуйте ее в виде RESTful веб-сервиса, который предоставляет операции открытия и закрытия счета, зачисления (снятия) средств и получение баланса:

  • Создание нового счета
POST /account
{
  "initialAmount": 100 // Начальная сумма
}
  • Зачисление (снятие) средств на счет
PUT /account
{
  "amount": 50 // Сумма к зачислению, может быть отрицательной
}
  • Получение баланса
GET /account

Возвращает:
{
  "amount": 50 // Сумма на счете
}
  • Закрытие счета
DELETE /account

Позаботьтесь о том, чтобы сервис успешно отрабатывал все ошибочные случаи, устанавливал корректные HTTP-заголовки (напр., Content-Type) и т.д. Пример работы с API:

==> GET /account
<== HTTP 400 Bad request
{ "error": "Account is not created" }

==> POST /account
{ "initialAmount": 120 }
<== HTTP 200 OK

==> PUT /account
{ "amount": -30 }
<== HTTP 200 OK

==> PUT /account
{ "amount": -100 }
<== HTTP 400 Bad request
{ "error": "Not enough money" }

==> GET /account
<== HTTP 200 OK
{ "amount": 90 }

==> DELETE /account
<== HTTP 200 OK

==> GET /account
<== HTTP 400 Bad request
{ "error": "Account is closed" }

Веб-сервис нужно распространять в виде Docker-контейнера. Напишите Dockerfile для сборки образа контейнера.

Публикация исходного кода

Исходный код решения должен быть размещен в отдельном проекте на любом публичном хостинге исходного кода (Github, Bitbucket, Gitlab и проч.). Ссылку на проект необходимо отправить лицу, выдавшему вам задание.

Как собрать и запускать

docker-compose up -d

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published