Резервное практическое задание предназначено для дистанционной самостоятельной работы по дисциплине «ОП.08 Основы проектирования баз данных» (§2.2 с.7–8 учебной программы) по теме занятия №24 «Организация интерфейса с пользователем: контроль». Выполните детальную разработку комплексного регламента валидации полей экранной формы с маппингом ошибок СУБД.
Вы проектируете форму заключения договора лизинга транспортных средств leasing_contract_form. В форме присутствуют следующие реквизиты:
client_inn — ИНН лизингополучателя (строго 10 цифр для юридических лиц);client_ogrn — ОГРН организации (строго 13 цифр, начинается с цифры 1 или 5);contract_amount — сумма договора лизинга (число с плавающей точкой, строго больше 100 000 руб. и не более 50 000 000 руб.);advance_percent — размер первоначального аванса (процент от 10% до 49%);start_date и end_date — дата начала и окончания договора (дата окончания строго позже даты начала минимум на 12 месяцев).Требование: Разработайте спецификацию клиентского контроля:
^ и $ для ИНН и ОГРН.input, добавление классов is-valid / is-invalid) и условия разблокировки кнопки «Отправить заявку».Для сохранения заявок в базе данных спроектирована таблица leasing_contracts. Злоумышленник пытается обойти клиентский интерфейс и отправляет запрос напрямую в API через curl с отрицательным авансом и фиктивным ИНН.
Требование:
leasing_contracts с серверными ограничениями CHECK, UNIQUE (client_inn, contract_number) и NOT NULL.$1, $2, ...) делает невозможной атаку SQL Injection даже при наличии кавычек в текстовых полях.При выполнении операций ядро СУБД может возвращать различные системные ошибки. Составьте регламент обработки исключений бэкенда для формы лизинга, заполнив матрицу маппинга для следующих кодов:
SQLSTATE 23505 (unique_violation) — повторный номер договора или дубликат активной заявки;SQLSTATE 23514 (check_violation) — нарушение диапазона суммы или срока лизинга;SQLSTATE 23503 (foreign_key_violation) — ссылка на несуществующего менеджера или филиал;SQLSTATE 40001 (serialization_failure) — конкурентная попытка одновременного бронирования одного и того же VIN-номера автомобиля;SQLSTATE P0001 (raise_exception) — пользовательское исключение складского триггера «Автомобиль уже передан в другой договор».Требование: Для каждого кода сформулируйте сырой технический текст СУБД (почему его нельзя показывать пользователю) и профессиональный дружественный текст для интерфейса (что случилось и что сделать пользователю).