Разработчикам / REST API для BOOCO Meteor (v 1.x) / Специальные версии API

В этом разделе описывается API для проекта «Учебные полигоны».

Endpoints

Параметры запроса (Queries)

Параметры URL

Используемые типы

const PGAdmissionStatuses = ['admitted', 'not-admitted'] as const;
type PGAdmissionType = typeof PGAdmissionStatuses[number];
const PGStudentStatuses = ['none', 'in-progress', 'finished', 'absent', 'waiting'] as const;
type PGStudentStatus = typeof PGStudentStatuses[number];
const PGStudentExtendesStatuses = [...PGAdmissionStatuses, ...PGStudentStatuses] as const;
type PGStudentExtendedStatus = typeof PGStudentExtendesStatuses[number];
type PGStudentStatusItem = {
  _id: string,
  name?: string,
  status: PGStudentStatus
};

const PGExpertStatuses = ['absent', 'present'] as const;
type PGExpertStatus = typeof PGExpertStatuses[number];
type PGExpertItem = {
  _id: string,
  name?: string,
  status?: PGExpertStatus // статус эксперта 'absent', 'present', если не установлен, то 'absent'
};

const PGTypeOfEventsArr = ['exam', 'meeting'] as const;
type PGTypeOfEvents = typeof PGTypeOfEventsArr[number];

type BookingEvent = {
  _id?: string,
  createdAt?: string,
  venueId?: string,
  venueType?: string,
  venueName?: string,
  location?: string,
  start?: string,
  end?: string,
  subject?: string,
  organizer?: string,
  organizerEmail?: string,
  organizerName?: string,
  confirmation?: string,
  userId?: string,
  fixed?: boolean,
  sync?: SyncItem[],
  origin?: string,
  repeat?: RepeatItem,
  deleted?: boolean,
  vcsLocation?: string | null
};

type PGBookingEvent = BookingEvent & {
  typeOfEvent?: PGTypeOfEvents; // тип события (экзамен/встреча)
  examId?: string; // id экзамена из коллекции pg-exams
  checkin?: TDateISO; // дата и время начала экзамена
  checkout?: TDateISO; // дата и время окончания экзамена
  groupId?: string;
  curatorId?: string;
  students?: PGStudentStatusItem[] // студенты и их статусы
  experts?: PGExpertItem[] // эксперты и их статусы
};

type AggregatedUser = User & { status: PGStudentStatus };

type PGExamEventInfo = Omit<PGBookingEvent, 'sync' | 'repeat' | 'students'> & {
  students?: AggregatedUser[],
  minGrade?: Number,
  maxGrade?: Number
};

interface PGStudentExamGrade {
  // Id студента
  _id?: string;
  // Имя студента
  name?: string;
  // Статус студента
  status?: PGStudentExtendedStatus;
  // Оценка
  grade?: number;
}

interface Grade {
  _id: string, // уникальный идентификатор
  studentId: string, // id студента в коллекции users
  eventId?: string, // ID события (из коллекции bookings)
  semester?: number, // семестр - номер семестра
  examId?: string, // id экзамена в коллекции pg-exams
  subject?:string, // название экзамена, если нет examId
  name?: string, // название экзамена (для старых экзаменов)
  grade?: number, // результат экзамена
  experts?: ExpertGrade[], // результаты, выставленные экспретами
  date?: TDateISO, // дата и время последнего обновления
  removed?: boolean, // заревезрвиновано
}

type PGSetGradeBody = {
  examId: string,
  studentId: string,
  expertId: string,
  grade: number,
  comments?: string[]
}

type StudentGrade = {
  grade: number,
  subject: string
};

type StudentGradesBySemesters = [
  semester: number,
  grades: StudentGrade[]
];

const PGAdmissionStatuses = ['admitted', 'not-admitted'] as const;
type PGAdmissionType = typeof PGAdmissionStatuses[number];
interface AdmissionItem {
  _id: string, // уникальный идентификатор
  userId: string, // id студента в коллекции users
  examId: string, // id экзамена в коллекции pg-exams
  status?: PGAdmissionType // статус допуска
}