/
aastray
/
StudentPart
Обзор
Документация
Войти
/
aastray
/
StudentPart
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
service/src/services/forms.py
286 строк
16 KB
aastray
Реализован функционал загрузки файлов и просмотра документов, удалены базовые эндпоинты, обновлена документация
10 янв 2026, 15:38
10 янв 2026, 15:38
4d47c55
Код
Авторство
О чём код?
""" Сервис для получения форм (схем данных) для эндпоинтов. """ from fastapi import HTTPException from src.utils.settings import settings from src.schemas import ( SQLField, RequestSchema, DataLakeForm, UserForm, TextField, RadioField, ElementBox, IntField ) def get_form(url: str): """ Получает форму (схему данных) для указанного эндпоинта. Args: url: URL эндпоинта, для которого нужно получить форму Returns: str: JSON строка со схемой формы Raises: HTTPException: Если форма для указанного URL не найдена """ match url: #Расписываем каждый URL case "FirstEndpoint": return RequestSchema( listForms=[ DataLakeForm( title="Название формы", body=[ SQLField( title="SQL запрос", nameDB ="Имя базы данных", request ="SQL запрос") ]) ]).model_dump_json() case "practice_template": # Форма для получения шаблона документа return RequestSchema( listForms=[ UserForm( title="Получение шаблона документа", body=[ RadioField( title="Тип документа", description="Выберите тип документа", isRequired=True, minPickedElements=1, maxPickedElements=1, listElements=[ ElementBox( name="договор", description="Договор на практику", tooltip="Шаблон договора на прохождение практики" ), ElementBox( name="индивидуальное_задание", description="Индивидуальное задание", tooltip="Шаблон индивидуального задания для практики" ), ElementBox( name="лист_учета_инструктажа", description="Лист учета инструктажа", tooltip="Шаблон листа учета инструктажа по охране труда" ), ElementBox( name="направление", description="Направление на практику", tooltip="Шаблон направления на практику" ) ] ), RadioField( title="Вид практики", description="Выберите вид практики (опционально)", isRequired=False, minPickedElements=0, maxPickedElements=1, listElements=[ ElementBox( name="учебная", description="Учебная практика", tooltip="Учебная практика" ), ElementBox( name="производственная", description="Производственная практика", tooltip="Производственная практика" ), ElementBox( name="преддипломная", description="Преддипломная практика", tooltip="Преддипломная практика" ) ] ) ] ) ] ).model_dump_json() case "practice_application": # Форма для заполнения анкеты на практику return RequestSchema( listForms=[ UserForm( title="Анкета на практику", body=[ # Данные студента TextField( title="ФИО студента", description="Полное ФИО студента", isRequired=True, placeholder="Иванов Иван Иванович" ), TextField( title="Направление подготовки", description="Направление подготовки (код и название)", isRequired=True, placeholder="09.03.01 Информатика и вычислительная техника" ), TextField( title="Профиль", description="Профиль подготовки (если есть)", isRequired=False, placeholder="Информационная безопасность компьютерных систем и сетей" ), TextField( title="Группа", description="Группа студента", isRequired=True, placeholder="ИБКС6-24" ), IntField( title="Курс", description="Курс обучения", isRequired=True, minValue=1, maxValue=6 ), # Данные о практике RadioField( title="Вид практики", description="Вид практики (получается извне, но отображается)", isRequired=True, minPickedElements=1, maxPickedElements=1, listElements=[ ElementBox( name="учебная", description="Учебная практика", tooltip="Учебная практика" ), ElementBox( name="производственная", description="Производственная практика", tooltip="Производственная практика" ), ElementBox( name="преддипломная", description="Преддипломная практика", tooltip="Преддипломная практика" ) ] ), RadioField( title="Тип практики", description="Тип практики (для производственной практики)", isRequired=False, minPickedElements=0, maxPickedElements=1, listElements=[ ElementBox( name="научно-исследовательская_работа", description="Научно-исследовательская работа", tooltip="Научно-исследовательская работа" ), ElementBox( name="производственно-технологическая", description="Технологическая (производственно-технологическая) практика", tooltip="Производственно-технологическая практика" ), ElementBox( name="проектно-технологическая", description="Технологическая (проектно-технологическая) практика", tooltip="Проектно-технологическая практика" ) ] ), TextField( title="Дата начала практики", description="Дата начала практики", isRequired=True, mask="99.99.9999", placeholder="19.06.2025" ), TextField( title="Дата окончания практики", description="Дата окончания практики", isRequired=True, mask="99.99.9999", placeholder="16.07.2025" ), # Данные об организации TextField( title="Наименование организации", description="Полное наименование профильной организации", isRequired=True, placeholder="ООО \"Пример\"" ), TextField( title="ФИО директора организации", description="Полное ФИО директора организации", isRequired=True, placeholder="Киселёв Владимир Николаевич" ), TextField( title="Должность директора", description="Должность директора организации", isRequired=True, placeholder="Генеральный директор" ), TextField( title="Адрес места нахождения организации", description="Адрес места нахождения организации", isRequired=True, placeholder="г. Москва, ул. Примерная, д. 1" ), TextField( title="Юридический адрес организации", description="Юридический адрес организации", isRequired=True, placeholder="г. Москва, ул. Примерная, д. 1" ), TextField( title="ИНН организации", description="ИНН организации (10 или 12 цифр)", isRequired=True, mask="9999999999", placeholder="1234567890" ), TextField( title="КПП организации", description="КПП организации (9 цифр)", isRequired=True, mask="999999999", placeholder="123456789" ), TextField( title="ОГРН организации", description="ОГРН организации (13 или 15 цифр)", isRequired=True, mask="9999999999999", placeholder="1234567890123" ), TextField( title="Телефон организации", description="Телефон организации", isRequired=True, mask="+7 (___) ___-__-__", placeholder="+7 (999) 123-45-67" ), TextField( title="Электронная почта организации", description="Электронная почта организации", isRequired=True, placeholder="info@example.com" ), TextField( title="ФИО руководителя практики от организации", description="Полное ФИО руководителя практики от профильной организации", isRequired=True, placeholder="Савченко Мария Николаевна" ) ] ) ] ).model_dump_json() #Ответ, если нет URL case _: return(HTTPException(500, "Недействительный URL"))