Skip to content

milas1221/BankServer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

Микросервис для управления платежами и сбережениями

Простой HTTP-сервер на Go, демонстрирующий потокобезопасную работу с балансом с помощью атомарных операций (atomic.Int64).
Сервер обрабатывает два типа запросов: списание средств (платёж) и перевод денег в накопления (сберегательный счёт).

Функциональность

  • POST /pay – выполнить платёж: списывает указанную сумму с основного баланса (money), если достаточно средств.
  • POST /save – перевести средства в накопления: списывает сумму с money и зачисляет её на сберегательный счёт (bank).

Все операции атомарны и безопасны для конкурентного доступа.

Технологии

  • Go 1.19+ (используется пакет sync/atomic)
  • Стандартная библиотека (net/http, io, strconv)

Запуск

  1. Убедитесь, что установлен Go.
  2. Сохраните код в файл main.go.
  3. Запустите сервер:
    go run main.go
  4. Сервер будет слушать порт 9091.

Эндпоинты

POST /pay

  • Тело запроса: строка, содержащая сумму платежа (целое число).
  • Логика: если money >= сумма, то money -= сумма. В противном случае возвращается сообщение об ошибке (только в лог).
  • Ответ: сервер не возвращает HTTP-ответа (только логи в консоль). В реальном проекте следует добавить ответ клиенту.

Пример запроса:

curl -X POST http://localhost:9091/pay -d "500"

Лог:

The payment was successful: 500

POST /save

  • Тело запроса: строка с суммой для перевода в накопления.
  • Логика: если money >= сумма, то money -= сумма и bank += сумма.
  • Ответ: только логи.

Пример запроса:

curl -X POST http://localhost:9091/save -d "200"

Лог:

New variable value: 200
New variable value: 300

Как это работает

  • Две глобальные переменные money и bank объявлены как atomic.Int64, что гарантирует атомарность операций чтения/изменения без использования мьютексов.
  • При старте money инициализируется значением 1000.
  • Каждый обработчик читает тело запроса целиком, преобразует его в число и выполняет соответствующую операцию с проверкой остатка.
  • Все ошибки (чтение тела, преобразование числа) логируются, но не возвращаются клиенту (для учебного примера достаточно).

Пример консольного вывода при работе

The program is running
The payment was successful: 500
New variable value: 200
New variable value: 300
There are not enough funds to make the payment!

Примечания

  • Код предназначен для образовательных целей и демонстрирует базовую работу с HTTP и атомарными операциями.
  • В реальных проектах необходимо добавлять корректные HTTP-ответы (статусы, тело ответа) и более тщательную обработку ошибок.
  • Для production-среды стоит рассмотреть использование контекстов, таймаутов и более продвинутые паттерны.

Автор

Берсиров Салим

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages