core schedule eslinted

This commit is contained in:
tmshv committed 2017-01-23 00:46:49 +03:00
1 parent 13726d88b0
commit 17228e5c55
1 file changed
+81 -81
+81 -81
View File
@@ -1,116 +1,116 @@
import {c} from '../core/db';
import {select} from '../utils/fn';
import {createMap} from '../utils/common';
import {getCollective} from './collective';
import {c} from '../core/db'
import {select} from '../utils/fn'
import {createMap} from '../utils/common'
import {getCollective} from './collective'
import {scheduleDate, getPeriod as schedulePeriod} from '../models/schedule';
import {getCourseName} from '../models/course';
import {scheduleDate, getPeriod as schedulePeriod} from '../models/schedule'
import {getCourseName} from '../models/course'
const SCHEDULES = 'schedules';
const SCHEDULES = 'schedules'
export async function getSchedule(period, semester) {
const schedule = await c(SCHEDULES).findOne({
$or: [
const schedule = await c(SCHEDULES).findOne({
$or: [
{period: period},
{period: schedulePeriod(period)}
],
semester: semester
});
],
semester: semester
})
return schedule ? migrate(schedule) : null;
return schedule ? migrate(schedule) : null
}
export async function getSchedules(fields = ['_id', 'id', 'period', 'semester']) {
const list = await c(SCHEDULES)
const list = await c(SCHEDULES)
.find({})
.toArray();
.toArray()
const schedules = await Promise.all(list.map(migrate));
return schedules
const schedules = await Promise.all(list.map(migrate))
return schedules
.sort((a, b) => {
const ad = scheduleDate(a).getTime();
const bd = scheduleDate(b).getTime();
return ad - bd;
})
.map(select(fields));
const ad = scheduleDate(a).getTime()
const bd = scheduleDate(b).getTime()
return ad - bd
})
.map(select(fields))
}
async function migrate(schedule) {
const versions = {
'1.0': migrate_10_to_20,
'2.0': migrate_20_to_30,
};
const versions = {
'1.0': migrate10to20,
'2.0': migrate20to30,
}
const version = schedule.version;
const update = versions[version];
return version in versions ? migrate(update(schedule)) : schedule;
const version = schedule.version
const update = versions[version]
return version in versions ? migrate(update(schedule)) : schedule
}
function migrate_10_to_20(schedule) {
const dayNames = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'];
const time = time => time
.map(i => i.split(' '));
function migrate10to20(schedule) {
const dayNames = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']
const time = time => time
.map(i => i.split(' '))
const week = days => days.reduce((week, lesson, index) => {
if (lesson) {
const day = dayNames[index];
week[day] = [Object.assign(lesson, {
time: time(lesson.time)
})];
}
const week = days => days.reduce((week, lesson, index) => {
if (lesson) {
const day = dayNames[index]
week[day] = [Object.assign(lesson, {
time: time(lesson.time)
})]
}
return week;
}, {});
return week
}, {})
return Object.assign(schedule, {
version: '2.0',
period: schedulePeriod(schedule.period),
groups: schedule.schedule
return Object.assign(schedule, {
version: '2.0',
period: schedulePeriod(schedule.period),
groups: schedule.schedule
.map(group => ({
name: group.group,
time: group.time,
week: week(group.week)
}))
});
name: group.group,
time: group.time,
week: week(group.week)
}))
})
}
async function migrate_20_to_30(schedule) {
const days = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun'];
async function migrate20to30(schedule) {
const days = ['mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun']
const persons = await getCollective();
const person = createMap(i => i.id, persons);
const persons = await getCollective()
const person = createMap(i => i.id, persons)
const week = week => days
const week = week => days
.map(day => week[day] || [])
.map(lessons => lessons.map(lesson));
.map(lessons => lessons.map(lesson))
const lesson = i => ({
time: i.time,
course: course(i.lesson),
teacher: teacher(i.teacher)
});
const lesson = i => ({
time: i.time,
course: course(i.lesson),
teacher: teacher(i.teacher)
})
const teacher = id => ({
id: id,
url: `/teacher/${id}`,
name: personName(id)
});
const teacher = id => ({
id: id,
url: `/teacher/${id}`,
name: personName(id)
})
const personName = id => person.has(id) ? person.get(id).name : null;
const personName = id => person.has(id) ? person.get(id).name : null
const course = id => ({
id: id,
url: null,
title: getCourseName(id)
});
const course = id => ({
id: id,
url: null,
title: getCourseName(id)
})
return Object.assign(schedule, {
version: '3.0',
groups: schedule.groups
return Object.assign(schedule, {
version: '3.0',
groups: schedule.groups
.map(group => ({
name: group.name,
time: group.time,
week: week(group.week)
}))
});
name: group.name,
time: group.time,
week: week(group.week)
}))
})
}