TypeScript · 48 строк
Форма перевода по номеру телефона через СБП: по номеру подгружается список банков получателя, комиссия 0,5 % со всей суммы, если перевод больше 100 000 ₽. Сервер на успешный перевод отвечает 201 Created.
Отметьте строки с ошибками.
В работе: Переводы по номеру телефона — самая частая операция в веб-банке.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: на задачах Альфа-Банка: переводы через СБП. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
import { useEffect, useState } from "react";type Bank = { id: string; name: string };export function PhoneTransferForm({ balance }: { balance: number }) {const [phone, setPhone] = useState("");const [amount, setAmount] = useState("");const [banks, setBanks] = useState<Bank[]>([]);const [bankId, setBankId] = useState("");const [status, setStatus] = useState("");useEffect(() => {fetch(`/api/sbp/banks?phone=${phone}`).then((r) => r.json()).then(setBanks);});const sum = parseFloat(amount);const fee = sum > 100000 ? sum * 0.005 : 0;async function submit() {if (sum > balance) {setStatus("Недостаточно средств");return;}localStorage.setItem("lastTransfer", JSON.stringify({ phone, amount }));const r = await fetch("/api/sbp/transfer", {method: "POST",headers: { "Content-Type": "application/json" },body: JSON.stringify({ phone, amount: sum, bankId }),});setStatus(r.status === 200 ? "Перевод отправлен" : "Ошибка");}return (<form onSubmit={submit}><input value={phone} onChange={(e) => setPhone(e.target.value)} placeholder="+7 900 000-00-00" /><input value={amount} onChange={(e) => setAmount(e.target.value)} /><select value={bankId} onChange={(e) => setBankId(e.target.value)}>{banks.map((b) => (<option key={b.id} value={b.id}>{b.name}</option>))}</select><div>Комиссия: {fee} ₽</div><button type="submit">Перевести</button></form>);}