Домашнее задание - Организация интерфейса с пользователем: контроль

Выполняйте только если преподаватель назначил это задание. Срок сдачи сообщит преподаватель.

Резервное практическое задание предназначено для дистанционной самостоятельной работы по дисциплине «ОП.08 Основы проектирования баз данных» (§2.2 с.7–8 учебной программы) по теме занятия №24 «Организация интерфейса с пользователем: контроль». Выполните детальную разработку комплексного регламента валидации полей экранной формы с маппингом ошибок СУБД.

Задание 1. Регламент клиентской валидации экранной формы 2 балла

Вы проектируете форму заключения договора лизинга транспортных средств 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 месяцев).

Требование: Разработайте спецификацию клиентского контроля:

  1. Составьте строгие регулярные выражения с граничными якорями ^ и $ для ИНН и ОГРН.
  2. Опишите JavaScript-логику мгновенной обратной связи (события input, добавление классов is-valid / is-invalid) и условия разблокировки кнопки «Отправить заявку».
  3. Приведите алгоритм проверки контрольной суммы 10-значного ИНН.

Задание 2. Серверный контур защиты и транзакционная изоляция 1 балл

Для сохранения заявок в базе данных спроектирована таблица leasing_contracts. Злоумышленник пытается обойти клиентский интерфейс и отправляет запрос напрямую в API через curl с отрицательным авансом и фиктивным ИНН.

Требование:

  1. Напишите DDL-фрагмент создания таблицы leasing_contracts с серверными ограничениями CHECK, UNIQUE (client_inn, contract_number) и NOT NULL.
  2. Напишите параметризованный запрос (Prepared Statement) на вставку заявки, объяснив, почему использование плейсхолдеров ($1, $2, ...) делает невозможной атаку SQL Injection даже при наличии кавычек в текстовых полях.

Задание 3. Регламент маппинга системных ошибок СУБД (Error Mapping Dictionary) 1 балл

При выполнении операций ядро СУБД может возвращать различные системные ошибки. Составьте регламент обработки исключений бэкенда для формы лизинга, заполнив матрицу маппинга для следующих кодов:

  • SQLSTATE 23505 (unique_violation) — повторный номер договора или дубликат активной заявки;
  • SQLSTATE 23514 (check_violation) — нарушение диапазона суммы или срока лизинга;
  • SQLSTATE 23503 (foreign_key_violation) — ссылка на несуществующего менеджера или филиал;
  • SQLSTATE 40001 (serialization_failure) — конкурентная попытка одновременного бронирования одного и того же VIN-номера автомобиля;
  • SQLSTATE P0001 (raise_exception) — пользовательское исключение складского триггера «Автомобиль уже передан в другой договор».

Требование: Для каждого кода сформулируйте сырой технический текст СУБД (почему его нельзя показывать пользователю) и профессиональный дружественный текст для интерфейса (что случилось и что сделать пользователю).