Разработчикам / REST API для BOOCO Meteor (v 1.x) / Специальные версии API
В этом разделе описывается API для проекта «Учебные полигоны».
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 // статус допуска
}