Изменения в базе данных
Решение
Удобнее все-таки выделять команды
См. схему базы данных 1.3.0_new
Концепция:
1.2.8 – Есть команды, которые привязаны к олимпиаде, к туру. Участники команды записываются как обычные данные о команде.
1.3.0 – Есть пользователь.
Он может привязывать себя к различным олимпиадам (создается запись user_team), подставляя себе определенные данные(ФИО, город)
В олимпиадах возможно создавать команды.
Отличия:
- Наличие внешних ключей, каскадное удаление (раньше просто подразумевалась связь)
- Строгое именование таблиц: в каждой таблице id, название таблицы в ед. числе, через подчерк
- Изменение сущностей
Users -> User + User_olympiad
Forms -> Attribute + Olympiad_attribute
Olympiad поле teams_alllowed
Командная / Личная?
Удаление объектов
Каскадное удаление возможно не везде, т.к. необходимо удалять связанные файлы
объект | что удалить |
олимпиада | инф о туре + туры + команды-участники |
условие | инф об условии + файл |
задача | инф о задаче + сабмиты (исходный код) + тесты + условие |
команда | все ее сабмиты, неоткрытые вопросы |
Подробности хранения данных:
1.
Город
Создаем особый фильтр «Город», при выборе которого предлагается список городов, взятый из таблицы city
тип value varchar(255), поэтому храним id города в строковом виде.
Если города нет в таблице, то предварительно записываем набранный пользователем город в таблицу city, поле moderation = 0
0 – не обработан
1 – прошел модерацию
2 – игнорировать
Аналогично таблица university
2.
Типы олимпиад
Типы олимпиад: командная, личная (поле teams_allowed: 0 – личная, 1 – командная)
3.
Добавление команд
Команда заводится на олимпиаду.
Пользователь является незарегистрированным на олимпиаду, пока у него не определена команда.
При регистрации на командную олимпиаду предлагается список зарегистрировавшихся команд.
Предлагается присоединиться к ним, или создать свою.
- Присоединение: высылается уведомление уже включенным в группу участникам для подтверждения.
После подтверждения создается запись user_team для этого user и для этой team
пользователю высылается сообщение, что он был добавлен в такую-то олимпиаду в такую-то команду.
При первом открытии олимпиады, если есть незаполненные поля для участника, предлагаем заполнить их.
- При создании своей группы необходимо заполнить поля для команды, если такие заданы.
На вкладке “Команда” есть возможность пригласить в команду других участников: Возможные ответы
1) пользователя не существует
2) уже состоит в другой команде на эту олимпиаду
3) приглашение выслано