--- tags: Функциональные части --- # Database База данных для хранения информации обо всём: курсах, задачах, учениках, учителях, результатах проверки. Можно поднять **PostgreSQL** [бесплатно](https://www.elephantsql.com/). ## Модели ### Пользователь ```json { "email": "ivanov@gmail.com", // e-mail пользователя "login": "ivanov", // имя пользователя "password": "secretpassword", // пароль пользователя "middle_name": "Иванович", // отчество "first_name": "Иван", // имя "last_name": "Иванов", // фамилия "birthday": "01.01.1970", // дата рождения "user_type": "teacher", // тип пользователя teacher/student } ``` ### Группа пользователей (создается учителем) ```json { "id": <primary_key>, "name": <name>, "slug": <slug>, "owner": <user_id> } ``` * `name` – имя группы * `slug` – имя группы в виде слага * `owner` - id пользователя, кому принадлежит группа ### Принадлежность пользователей группе (Django через ManyToMany) ```json { "id": <primary_key>, "user_id": <user_primary_key>, "group_id": <group_primary_key> } ``` * `user_id` – пользователь (ученик) * `group_id` - группа ### Привязка пользователей к задаче (Django через ManyToMany) ```json { "id": <primary_key>, "user_id": <user_primary_key>, "task_id": <task_primary_key> } ``` * `user_id` – пользователь (ученик) * `task_id` - задача ### Привязка группы к задаче (Django через ManyToMany) ```json { "id": <primary_key>, "group_id": <group_primary_key>, "task_id": <task_primary_key> } ``` * `group_id` – группы * `task_id` - задача ### Задача ```json { "id": <primary_key>, "author_id": <user_primary_key>, "name": <name>, "description": <description>, "slug": <slug>, "layout_id": <layout_primary_key>, "tests": <tests> } ``` * `course_id` – курс (нужно, чтобы понимать язык программирования задачи) * `name` – имя задачи * `description` - описание задачи (может быть Markdown'ом) * `slug` – имя задачи в виде слага (будет использоваться в качестве имени создаваемой папки внутри папки пользователя внутри папки курса) * `layout_id` – шаблон проекта, описан в модели `Шаблон` ### Результат проверки задачи ```json { "id": <primary_key>, "student_id": <student_primary_key>, "task_id": <task_primary_key>, "status": <"running"|"stopped"|"ce"|"re"|"tle"|"wa"|"ok">, "tests_count": <tests_count>, "passed_tests_count": <passed_tests_count>, "language_id": <language_primary_key>, "date": <date> } ``` * `student_id` – студент решивший задачу * `task_id` – решенная задача * `status` – статус проверки * `tests_count` - количество тестов * `passed_tests_count` - количество пройденных тестов * `language_id` - язык, на котором сдавалась задача * `date` - время сдачи ### Шаблон ```json { "id": <primary_key>, "slug": <slug> } ``` * `slug` - просто поле для красивого отображения имени шаблона ### Язык программирования ```json { "id": <primary_key>, "name": <name>, "slug": <slug> } ``` * `name` – имя языка программирования * `slug` – для определения чекера ### Связь задачи и языков программирования (одна задача может быть решена на нескольких языках) (Django через ManyToMany) ```json { "id": <primary_key>, "task_id": <task_primary_key>, "language_id": <language_primary_key> } ``` * `task_id` – задача * `language_id` – язык