Как это работает, простыми словами

Что это за проект, зачем он и как устроен — без единого умного слова.

Что за задание

Это серверная часть приложения-кошелька — как Payme или Click: у пользователя в телефоне лежат деньги, он пополняет, переводит друзьям, платит по QR.

У любого такого приложения две половины:

ВИДИМАЯ ЧАСТЬ

Кнопки и экраны, которые видит пользователь. Это интерфейс — вот эта страница и сам кошелёк.

СЕРВЕР

Невидимая программа, которая решает, у кого сколько денег и можно ли провести операцию. Вот это и было главным заданием.

Все страшные слова из задания — ledger, KYC, OTP, blacklist — это просто список функций, которые есть в каждом банковском приложении.

Главная идея — её спросят первой

Как хранить, сколько у человека денег?

✕ НАИВНО

Завести колонку «баланс = 100 000» и переписывать её. Упадёт программа посреди записи или придут два перевода разом — цифра собьётся, и никто не узнает, как так вышло.

✓ ПО-БАНКОВСКИ

Колонки «баланс» нет вообще. Есть тетрадь, куда только дописывают строки: «+100 000», «−30 000». Баланс — это сумма всех строк.

Исправлять и удалять строки нельзя никогда; ошибся — допиши строку-исправление. Это и называется ledger (журнал). Ничего не теряется при сбоях, ничего нельзя втихую подправить, и всегда видно, откуда взялась каждая копейка.

Из чего всё состоит

Ledger / Balance
Та самая тетрадь и подсчёт баланса из строк.
Payments
Пополнить и вывести деньги.
P2P + QR
Перевод другому человеку; QR — чтобы не диктовать реквизиты.
OTP
Код из 6 цифр в Telegram перед операцией: «это точно ты?».
KYC
Проверка паспорта. Чем сильнее проверен — тем больше лимит.
Blacklist
Бан-лист: мошеннику молча отказываем без объяснений.
History
Выписка — листаешь свою тетрадь операций.
Push
Уведомление «вам пришло 50 000» после каждой операции.

Как проходит одна операция

Пользователь нажал «Пополнить 50 000». Что происходит:

  1. Приложение шлёт запрос серверу.
  2. Сервер гоняет три проверки по порядку: не в бан-листе ли ты → позволяет ли уровень KYC → (если тратишь) хватает ли денег.
  3. Сервер создаёт заявку и шлёт код в Telegram.
  4. Ты вводишь код, сервер сверяет.
  5. Только теперь в тетрадь дописывается строка «+50 000».
  6. Фоновый помощник шлёт уведомление «вам зачислено».

Перевод, вывод, оплата по QR — тот же круг, меняется только шаг 5. Перевод — это две строки разом: «−25 000» у тебя и «+25 000» у получателя, либо обе, либо ни одной.

Что крутится под капотом

PostgreSQL — шкаф, где лежит тетрадь
Redis — коды OTP (90 сек) и кэш
Django — сам сервер на Python
Celery — фоновые уведомления
Веб-интерфейс — дёргает сервер
47 тестов — проверяют, что правила не нарушить
Суть одной фразой
Баланс нигде не хранится — он всегда вычисляется из неизменяемого журнала операций. Так делают банки: это не теряет деньги при сбоях и даёт полный аудит.
Hamyon · ledger-кошелёк ← Открыть кошелёк