Описание проекта
Самое важное для меня — частичное списание при оформлении заказа. Когда покупатель вводит код карты в корзине, система должна применить доступный баланс к сумме заказа, покрыть его частично или полностью, оставить остаток к оплате обычными способами и сохранить неизрасходованный баланс на карте на будущее. Возможность использовать несколько карт в одном заказе была бы плюсом. Каждое изменение баланса должно фиксироваться как неизменяемая запись журнала, чтобы я всегда мог восстановить историю: сумму выпуска, каждое списание, возвраты и ручные корректировки. Коды должны генерироваться так, чтобы их было трудно подобрать, выпускаться однократно и безопасно отправляться письмом. Правила срока действия должны настраиваться, а весь процесс обязан выдерживать двойные клики и гонки без риска списать карту дважды.
Админ-панель должна позволять моей команде выпускать карты вручную, находить любую карту по коду или покупателю, видеть полную историю баланса, замораживать или аннулировать карту, повторно отправлять письмо, корректировать баланс с указанием причины и выгружать отчёты. Прошу придерживаться визуального стиля и принятых в магазине соглашений по коду, писать чистый и документированный код и покрыть логику баланса и списаний тестами перед сдачей.
— Покупка: выбор суммы, шаблона и текста поздравления; оплата через существующий шлюз
— Доставка получателю по email с уникальным, трудноподбираемым кодом
— Баланс по каждой карте с неизменяемым журналом операций
— Частичное списание при оформлении, остаток оплачивается обычно; неизрасходованное сохраняется
— Настраиваемый срок действия и статусы (активна, заморожена, аннулирована, использована)
— Админ-панель: выпуск, поиск, корректировка, заморозка, повторная отправка, экспорт отчётов
— Защита от гонок; тесты логики баланса и списаний