Skip to content

Latest commit

 

History

History
228 lines (185 loc) · 11.8 KB

README.md

File metadata and controls

228 lines (185 loc) · 11.8 KB

ya-second

Напишите библиотеку, предоставляющую API для работы с расписанием лекций из первого задания.

Здесь мы хотим проверить ваши знания в области JavaScript и способность реализовать простые алгоритмы. Также нам важно увидеть, что вы можете выделить основные компоненты приложения и организовать их взаимодействие. Кроме того, мы хотим оценить ваше умение принимать обоснованные технические решения и объяснять их.

Предметная область

  • Студенты «Мобилизации» обучаются в нескольких школах и посещают лекции.
  • Лекции проходят в аудиториях в определённые часы и дни.
  • Некоторые лекции проводятся одновременно для студентов нескольких школ.

К примеру, лекция «Параллельные и распределённые вычисления» проводилась 15 июня с 19:00 до 21:30 в аудитории «Синий кит» для студентов Школы разработки интерфейсов и Школы дизайна.

  • У каждой лекции есть свое название и указана фамилия лектора.
  • У каждой школы есть название и указано количество студентов.
  • У каждой аудитории есть название, указана вместимость и дано описание, где она находится.

Вам нужно написать библиотеку, которая реализует следующий программный интерфейс:

  • просмотр расписания школы в заданный интервал дат;
  • просмотр графика лекций в аудитории в заданный интервал дат;
  • ввод и редактирование данных о лекциях;
  • ввод и редактирование данных о школах;
  • ввод и редактирование данных об аудиториях.

Библиотека должна гарантировать корректность и связанность данных:

  • Для одной школы не может быть двух лекций одновременно.
  • В одной аудитории не может быть одновременно двух разных лекций.
  • Вместимость аудитории должна быть больше или равной количеству студентов на лекции. Пожалуйста, придумайте и добавьте другие проверки.

Дополнительные задания

Любое из этих заданий не обязательно, но их выполнение будет плюсом.

  • Сериализация / десериализация в разные форматы данных.
  • Постоянное хранение данных где-либо.
  • Тесты к библиотеке.
  • Веб-интерфейс или интерфейс командной строки для реализованной библиотеки.

Описание API

Schedule:

  • Schedule.create(type, options)
  • Schedule.get(type, options)
  • Schedule.change(type, options)
  • Schedule.delete(type, options)

Основные объекты

  • Classroom

    • Classroom.id
    • Classroom.name
    • Classroom.capacity
    • Classroom.description
    • Classroom.lecturesId
    • Classroom.getId()
    • Classroom.getName()
    • Classroom.setName(newName)
    • Classroom.getCapacity()
    • Classroom.setCapacity(newCapacity)
    • Classroom.getDescription()
    • Classroom.setDescription(newDescription)
    • Classroom.getLecturesId()
    • Classroom.addLecturesId(newLectureId)
    • Classroom.deleteLecturesId(LectureId)
  • School

    • School.id
    • School.name
    • School.amount
    • School.lecturesId
    • School.getId()
    • School.getName()
    • School.setName(newName)
    • School.getAmount()
    • School.setAmount(newAmount)
    • School.getLecturesId()
    • School.addLecturesId(newLectureId)
    • School.deleteLecturesId(LectureId)
  • Lecture

    • Lecture.id
    • Lecture.name
    • Lecture.lecturer
    • Lecture.time
    • Lecture.classroomId
    • Lecture.schoolsId
    • Lecture.getId()
    • Lecture.getName()
    • Lecture.setName(newName)
    • Lecture.getLecturer()
    • Lecture.setLecturer(newLecturer)
    • Lecture.getLectureTime()
    • Lecture.setLectureTime(newTime)
    • Lecture.getClassroomId()
    • Lecture.setClassroomId(newClassroomId)
    • Lecture.getSchoolsId()
    • Lecture.setSchoolsId(newSchoolsId)

Schedule.create(type, options)

Создание элемента расписания

type

Строка, может принимать следующие значения:

  • school - при добавлении школа
  • classroom - при добавлении аудитории
  • lecture - при добавлении лекции

options

Объект, содержащий свойства, необходимые для создания экземпляра класса.

В зависимости от type принимает следующие значения:

type = 'school'
  • name - строка Название школы
  • amount - число Количетво студентов в школе
type = 'classroom'
  • name - строка Название аудитории
  • capacity - число Вместимость аудитории
  • description - строка Описание местоположения аудитории
type = 'lecture'
  • name - строка Название название лекции
  • lecturer - строка ФИО лектора
  • time - массив вида [начало лекции, конец лекции] Время проведения лекции
  • classroomId - число Id аудитории, в которой проводится лекция
  • schoolsId - массив чисел Массив школ

Schedule.get(type, options)

Получение элемента расписания

type

Строка, может принимать следующие значения:

  • school - при получении школа
  • classroom - при получении аудитории
  • lecture - при получении лекции

options

Объект, содержащий свойства запрашиваемого элемента

В зависимости от type принимает следующие значения:

type = 'school'
  • id - число id школы
type = 'classroom'
  • id - число id аудитории
type = 'lecture'
  • id - число id лекции

  • request = 'ownObject' - строка вернутся экземпляр класса Lecture

  • id - число id аудитории

  • request = 'classroomLectures' - строка вернется массив экземпляров класса Lecture, которые проводятся для школы с соответствующим id

  • id - число id аудитории

  • request = 'classroomLecturesInterval' - строка вернется массив экземпляров класса Lecture, которые проводятся в аудитории с соответствующим id в определенный временной период

  • time - массив - [начало интервала, конец интервала]

  • id - число id школы

  • request = 'schoolLectures' - строка вернутся массив экземпляров класса Lecture, которые проводятся для школы с соответствующим id

  • id - число id школы

  • request = 'schoolLecturesInterval' - строка вернутся массив экземпляров класса Lecture, которые проводятся для школы с соответствующим id в определенный временной период

  • time - массив вида [начало иинтервала, конец интервала] - запрашиваемый временной интервал

Schedule.сhange(type, options)

Получение элемента расписания

type

Строка, может принимать следующие значения:

  • school - при изменении данных школы
  • classroom - при изменении данных аудитории
  • lecture - при изменении данных лекции

options

Объект, содержащий свойства запрашиваемого элемента

В зависимости от type принимает следующие значения:

type = 'school'
  • id - число id школы

  • request = 'name' - строка новое название школы

  • id - число id школы

  • request = 'amount' - число новое количество учащихся

type = 'classroom'
  • id - число id аудитории

  • request = 'name' - строка новое название аудитории

  • id - число id аудитории

  • request = 'description' - строка новое описание местоположения аудитории

  • id - число id аудитории

  • request = 'capacity' - число новая вместимость аудитории

type = 'lecture'
  • id - число id лекции

  • request = 'name' - строка новое название лекции

  • id - число id лекции

  • request = 'lecturer' - строка новое ФИО лектора

  • id - число id лекции

  • request = 'time' - массив вида [начало лекции, конец лекции] новое время проведения лекции

  • id - число id лекции

  • request = 'classroomId' - число id новой аудитории

  • id - число id лекции

  • request = 'schoolsId' - массив чисел массив id школ, для которых будет чистаться лекция

Schedule.delete(type, options)

Удаление элемента расписания

type

Строка, может принимать следующие значения:

  • school - при добавлении школа
  • classroom - при добавлении аудитории
  • lecture - при добавлении лекции

options

Объект, содержащий свойства удаляемого элемента

В зависимости от type принимает следующие значения:

type = 'school'
  • id - число id удаляемой школы Для удаления школы, для нее не должны проводиться лекции
type = 'classroom'
  • id - число id удаляемой аудитории Для удаления аудитории, в ней не должны проводиться лекции
type = 'lecture'
  • id - число id удаляемой лекции Для удаления аудитории, в ней не должны проводиться лекции