Репозиторий второго вступительного задания для Школы Разработки Интерфейсов 2017
Автор - Михаил Кононенко
Библиотека, предоставляющая API для работы с расписанием лекций проекта "Мобилизация". Подробное описание задания здесь.
# Клонируем репозиторий
> git clone https://github.com/vbifonixor/second-task
# заходим в папку проекта и устанавливаем зависимости
> cd second-task
> npm i
Подключение библиотеки как модуля доступно с помощью browserify:
let Mobilization = require('./dist/main.js');
let mobilization2017 = new Mobilization();
Пример использования и применения каждого метода библиотеки содержится в файле demo.js. Его скомпилированная утилитой browserify версия (demo.dist.js) подключена к файлу index.html в корне этого репозитория.
Конструктор класса Mobilization
принимает один параметр - объект setup
.
Структура объекта setup
для инициализации инстанса класса Mobilization:
{
schools: [school1, school2, school3, ...],
places: [place1, place2, place3, ...],
lectures: [lecture1, lecture2, lecture3]
}
Свойства объекта setup
не являются обязательными.
Структура объекта школы должна быть такой:
let school = {
name: 'Школа разработки интерфейсов',
students: 40
}
Структура объекта аудитории аналогична:
let place = {
name: 'Мулен Руж',
capacity: 90
}
Структура объекта лекции сложнее:
let lecture = {
name: 'Название лекции',
lecturer: 'Имя и фамилия преподавателя',
dateFrom: '2017-06-06 19:00', // дата начала в формате ISO 8601
duration: 90, // Длительность лекции в минутах
place: 'Название аудитории',
schools: ['ШРИ', 'ШМД'] // Названия школ, к которым относится лекция
};
Формат объектов критичен и не соответствующие ему объекты не будут добавлены к инстансу Мобилизации. Формат всех дат принимаемый любым из методов - ISO 8601 - особенность библиотеки Moment.js, использованной для манипуляции датами и временем в библиотеке.
В библиотеке реализованы следующие методы для манипуляций данными инстанса:
.addLecture(lecture[, silent])
- добавляет объект лекции (в соответствующем формате)lecture
. Необязательный параметрsilent
отвечает за вывод сообщений об успехе/ошибке в консоль (если ошибка не критична). Чтобы включить "тихий режим", параметрsilent
должен быть любым значением, которое при приведении возвращает true. Метод возвращает true, если добавление прошло успешно, и false, если возникла ошибка. Помимо этого, он выводит информацию в консоль об успехе или ошибке (не в тихом режиме)..deleteLecture(lectureName[, silent])
- удаляет лекцию по её названию, заданному в первом аргументеlectureName
. Аргументsilent
отвечает за "тихий режим" по тому же принципу, что и в методеaddLecture
. Метод возвращает true, если лекция была успешно удалена, и false, если удаления не произошло. Не в тихом режиме также отображает сообщение об успехе или ошибке в консоль..editLecture(lectureName, changes[, silent])
- изменяет лекцию в соответствии с изменениями в объектеchanges
. Во всех методах-редакторах объект changes должен содержать себе изменения (по формату объекта сущности, не изменяемые свойства указывать необязательно). Возвращает true в случае успеха и false в случае ошибки, и соответствующее сообщение (не в тихом режиме) в консоль..getLecture(name)
- возвращает объект лекции из инстанса по её названию, переданную в аргументname
.checkLecture(lecture[, editor])
- возвращает true, если объект лекции, переданный в аргументеlecture
, соответствует формату, описанном в секции Конструктор и false, если не соответствует. Необязательный аргументeditor
, если приводится к true, опускает проверку о существовании лекции с таким названием (для вызова методом-редактором).
.addSchool(school[, silent])
- добавляет объект школы (в соответствующем формате)school
. Необязательный параметрsilent
отвечает за вывод сообщений об успехе/ошибке в консоль (если ошибка не критична). Чтобы включить "тихий режим", параметрsilent
должен быть любым значением, которое при приведении возвращает true. Метод возвращает true, если добавление прошло успешно, и false, если возникла ошибка. Помимо этого, он выводит информацию в консоль об успехе или ошибке (не в тихом режиме)..deleteSchool(schoolName[, silent, editor])
- удаляет школу по её названию, заданному в первом аргументеschoolName
. Аргументsilent
отвечает за "тихий режим" по тому же принципу, что и в методеaddSchool
. Метод возвращает true, если школа была успешно удалена, и false, если удаления не произошло. Не в тихом режиме также отображает сообщение об успехе или ошибке в консоль. Аргументeditor
, если приводится к true, отключает каскадное удаление лекций/названия школы из объекта лекции, при вызове методом-редактором..editSchool(schoolName, changes[, silent])
- изменяет школу в соответствии с изменениями в объектеchanges
. Во всех методах-редакторах объект changes должен содержать себе изменения (по формату объекта сущности, не изменяемые свойства указывать необязательно). Возвращает true в случае успеха и false в случае ошибки, и соответствующее сообщение (не в тихом режиме) в консоль..getSchool(name)
- возвращает объект школы из инстанса по её названию, переданную в аргументname
.checkSchool(school[, editor])
- возвращает true, если объект школы, переданный в аргументеschool
, соответствует формату, описанном в секции Конструктор и false, если не соответствует. Необязательный аргументeditor
, если приводится к true, опускает проверку о существовании школы с таким названием (для вызова методом-редактором).
.addPlace(place[, silent])
- добавляет объект аудитории (в соответствующем формате)place
. Необязательный параметрsilent
отвечает за вывод сообщений об успехе/ошибке в консоль (если ошибка не критична). Чтобы включить "тихий режим", параметрsilent
должен быть любым значением, которое при приведении возвращает true. Метод возвращает true, если добавление прошло успешно, и false, если возникла ошибка. Помимо этого, он выводит информацию в консоль об успехе или ошибке (не в тихом режиме)..deletePlace(placeName[, silent, editor])
- удаляет аудиторию по её названию, заданному в первом аргументеplaceName
. Аргументsilent
отвечает за "тихий режим" по тому же принципу, что и в методеaddPlace
. Метод возвращает true, если аудитория была успешно удалена, и false, если удаления не произошло. Не в тихом режиме также отображает сообщение об успехе или ошибке в консоль. отключает каскадное удаление лекций, при вызове методом-редактором..editPlace(placeName, changes[, silent])
- изменяет аудиторию в соответствии с изменениями в объектеchanges
. Во всех методах-редакторах объект changes должен содержать себе изменения (по формату объекта сущности, не изменяемые свойства указывать необязательно). Возвращает true в случае успеха и false в случае ошибки, и соответствующее сообщение (не в тихом режиме) в консоль..getPlace(name)
- возвращает объект аудитории из инстанса по её названию, переданную в аргументname
.checkPlace(place[, editor])
- возвращает true, если объект аудитории, переданный в аргументеplace
, соответствует формату, описанном в секции Конструктор и false, если не соответствует. Необязательный аргументeditor
, если приводится к true, опускает проверку о существовании аудитории с таким названием (для вызова методом-редактором).
.placeIsCapable(place, schools)
- принимает объект аудитории или её название в качестве первого аргумента и массив объектов/названий школ и возвращает true, если сумма студентов всех школ не больше вместимости аудитории. В противном случае возвращает false..placeIsFree(place, dateFrom, duration)
- принимает объект аудитории или её название в качестве первого аргумента, желаемые дату и время и желаемую длительность. Возвращает true, если аудитория в желаемое время свободна (наduration
минут минимум). Иначе возвращает false.
.schoolSchedule(school[, dateFrom[, dateTo]])
- аргументschool
- объект или название школы, расписание которой будет выведено, необязательные аргументыdateFrom
иdateTo
- дата начала и конца выводимого расписания (включительно). Возвращает массив лекций для школы, если не указаныdateFrom
иdateTo
, возвращает массив всех лекций с начальной датыdateFrom
, если она указана. Если указана ещё и конечная датаdateTo
, возвращается массив лекций в этом временном промежутке..placeSchedule(place[, dateFrom[, dateTo]])
- работает точно также, как иschoolSchedule
, но возвращает все лекции в аудиторииplace
(объект или название).
.exportJSON()
- возвращает JSON объекта с массивамиlectures
,schools
иplaces
, заполненными лекциями, школами и аудиториями из инстанса.Mobilization.importJSON(json)
- статический метод класса, принимает JSON, полученный при экспорте и возвращает новый инстанс класса на его основе.