В схеме указаны обязательные поля для того или иного метода.
Тут небольшие пояснения (остальной функционал на откуп разработчика):
Объекты
На карточке студента хочется видеть его потоки, куда он записывался, и статус:
Возврат денег (refund > 0)
Учился (graduate = false, учился, но не сдал экзамены, сертификат не получил)
Выпустился (graduate = true)
Сделала через промежуточный объект Student_on_Flow , который связывает конкретный поток и конкретного студента, и вот для этой связки уже идет вся инфа.
Методы Query
В целом описаны в комментариях, тут те, по которым могут быть вопросы:
getStudent — информация по конкретному студенту. На какие потоки записывался, какие окончил итд (в студенте же есть courses: [Student_on_Flow])
# Возвращает количество выпускников и возвратников по тренеру в разрезе потоков
getStatsByTrainer(trainer_id: ID!): String
Возвращает в виде:
(Flow.name) — записалось 10 студентов (вообще все), возвратов 4 (где refund > 0), выпускников 3
Остальное вроде в комментариях описано
Методы Мутации (CRUD)
Создать новые данные — студента, тренера, курс или конкретный поток. При создании потока поле «name» формируется автоматически: Course.name - Flow.number (например, SQL - 1)
Записать студента на курс
Создать связку студент - поток курса. По факту объект Student_on_Flow , где пока refund = 0 и graduate = false
Вообще желательно, чтобы можно было записать студентов пачкой (несколько человек указать)
Возврат денег студенту за курс
Указали студента и поток, за который возврат + сумма возврата. Она не должна быть больше, чем Student_on_Flow.paid, но может быть меньше (отучился половину и потом ушел)
Выпустить студентов (курс закончился, надо указать тех, кто выпустился)
Указали студента и поток — ему проставилось graduate = true
Желательно также возможность указать целую пачку, но не знаю как это в схеме отражается. Или это просто Н запросов мутации подряд идут?
Удалить студента / тренера / курс / поток — по идее можно вообще один метод сделать, и там указывать кого тебе надо удалить или удалять пачкой) ну или разбить его тогда на DeleteStudent, DeleteTrainer…