Schema students

# С символа # в схемах начинаются комментарии

 

### Курс, у каждого курса есть потоки, на которые уже записываются студенты

type Course {

  id: ID!  

  name: String!

  price: Float

 

# Конкретные запуски курса, потоки

flow: [Flow]

}

 

 

### Поток курса

type Flow {

  id: ID!  

  # Отсылка на курс, к которому этот поток относится

  course_id: ID

  number: Int

 # Формируется как Course.name - Flow.number (например, SQL - 1)

 name: String

  start_date: String

  end_date: String

  trainer: Trainer

 

# Тут количество студентов, которые учились / выпустились на потоке (НЕ делали возврат, в Student_on_Flow refund = 0)

  students: int

 

# Тут количество студентов, которые сделали возврат  (в Student_on_Flow refund > 0)

  Refunded: int

 

# Чтобы соотнести студента и поток

  students: [Student_on_Flow]

}

 

### Студент

type Student {

  id: ID!  

  name: String!

  surname: String!

  courses: [Student_on_Flow]

}

 

### А это объект, чтобы соотнести студента с конкретным потоком обучения

type Student_on_Flow {

  id_student: ID!  

  id_flow: ID!  

 

# Сколько денег заплатил, при записи на курс сверяется с Course.price и не может быть больше

 paid: Float

 

# Сколько денег вернул в случае отказа, не может быть больше, чем paid

refund: Float

 

# Выпустился ли?

  graduate: Boolean

}

 

### Тренер

type Trainer {

  id: ID!  

  name: String!

  surname: String!

  

# Ведет разные курсы и разные потоки (условно есть курсы по SQL и API, он ведет только курсы по SQL и вел там потоки 1, 2, 5)

  courses: [Course]

  flows: [Flow]

}

 

### Запросы Query 

type Query {

 

  # Возвращает конкретного студента

  getStudent(id: ID!): Student

 

 # Возвращает все потоки по конкретному курсу

  getAllFlowsOfCourse(course_id: ID!): [Flow]

 

  # Возвращает всех выпускников курса по конкретному потоку (сбор со всех потоков, где graduate = true)

  getAllGraduate(flow_id: ID!): [Student]

 

  # Возвращает всех возвратников по конкретному потоку (где refund > 0). Смотрим SQL-1, там было 3 возврата, ага

  getAllRefundByFlow(flow_id: ID!): [Student]

 

 # Возвращает список всех возвратов студента (где refund > 0). То есть чтобы проверить, учится человек или каждый раз назад деньги просит

  getAllRefundByStudent(course_id: ID!): [Student_on_Flow]

 

 # Возвращает список всех курсов (потоков), которые студент прошел (где refund = 0). 

  getAllFlowsByStudent(student_id: ID!): [Student_on_Flow]

 

 # Возвращает количество выпускников и возвратников по тренеру в разрезе потоков

getStatsByTrainer(trainer_id: ID!): String

}

 

 

### Запросы на изменение данных

type Mutation {

# Создать нового студента

addStudent (  id: ID!, name: String!, surname: String!): Student!

 

# Создать нового тренера

addTrainer (  id: ID!, name: String!, surname: String!): Trainer!

 

# Создать новый курс

addCourse ( id: ID!, name: String!, price: Float): Course!

 

# Создать новый поток курса

addFlow (  id: ID!, course_id: ID!, number: Int, start_date: String, end_date: String, trainer_id: ID): Flow!

addFlowWithTrainer (  id: ID!, course_id: ID!, number: Int, start_date: String, end_date: String, trainer: Trainer): Flow!

 

# Сменить тренера — тренер заболел, или просто поменялся с коллегой. Просто назначает на поток нового тренера

changeTrainer (  id_flow: ID!, id_trainer: ID!): Flow!

 

# Записать студента на курс.

# paid — Сколько денег заплатил, сверяется с Course.price и не может быть больше

recordOnTheCource (id_student: ID!, id_flow: ID!, paid:Float) 

 

# Возврат денег студенту за курс. Paid не может быть больше, чем он заплатил в Student_on_Flow 

refundOnTheCource(id_student: ID!, id_flow: ID!, refund:Float) 

 

# Выпустить студентов (курс закончился, надо указать тех, кто выпустился)

graduateStudents (id_student: ID!, id_flow: ID!) 

 

# Удалить студента / тренера / курс / поток

deleteStudent ( id_student: ID!): Student!

deleteTrainer : Trainer!

deleteFlow : Flow!

deleteCourse : Course!

}