-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcallider.js
111 lines (95 loc) · 2.99 KB
/
callider.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
var _ = require("lodash"),
util = require("util"),
Sequelize = require("sequelize"),
Chainer = Sequelize.Utils.QueryChainer,
Promise = Sequelize.Promise,
// Q = require("Q"),
models = require("./models");
var db = models.db,
callider_db = models.callider_db,
Schedule = models.Schedule,
Shift = models.Shift,
User = models.User,
Graph = models.Graph,
CUser = models.CUser;
function getPortionalData(schedules, limit, offset) {
return Graph.findAll({attributes: _.keys(Graph.rawAttributes), offset: offset, limit: limit, order: "id"}, {raw: true});
}
function makeSchedSync(shed) {
var schedules = shed;
function write(graph_items) {
var objs = [];
_.forEach(graph_items, function (val, key) {
function mkDate(day, time) {
if (!(day && time)) {
return null;
}
var timeParts = time.split("-");
var start = new Date(day);
var end = new Date(day);
start.setHours.apply(start, timeParts[0].split(':'));
end.setHours.apply(end, timeParts[1].split(':'));
if (end.getTime() < start.getTime()) {
end.setDate(end.getDate() + 1); // Shift realy ends on the next day
}
return {
start: start,
end: end
};
}
function mkShift(sched, shift_) {
var shift = _.clone(shift_);
shift.userId = shift.user_id;
shift.Schedule = sched;
shift.scheduleId = sched.id;
return shift;
}
console.log("Making: " + val.id);
var graph_sched = schedules[0];
var wish_sched = schedules[1];
var reg_sched = schedules[2];
var graph_shift = mkDate(val.date, val.time);
var wish_shift = mkDate(val.date, val.wish_time);
var reg_shift = mkDate(val.date, val.registration);
if (graph_shift) {
objs.push(mkShift(graph_sched, graph_shift));
}
if (wish_shift) {
objs.push(mkShift(wish_sched, wish_shift));
}
if (reg_shift) {
objs.push(mkShift(reg_sched, reg_shift));
}
});
return Shift.bulkCreate(objs);
}
var block = 1000;
return Graph.count().then(function (total) {
console.log(total);
var i = 0;
var adder = getPortionalData(shed, block, 0).then(write);
for (i = block; i < total - 1; i += block) {
adder.then(_.partial(getPortionalData, shed, block, i))
.then(write);
}
return adder;
});
}
var syncUsers = exports.syncUsers = function(callider_db, db) {
return CUser.findAll()
.then(function (users) {
util.log("Got users");
var adder = new Chainer();
_.each(users, function (user) {
adder.add(User.create({id: user.id, login: user.login}));
})
return adder.run();
})
}
var syncSchedule = exports.syncSchedule = function (callider_db, db) {
return new Chainer().add(Schedule.create({name: "main"}))
.add(Schedule.create({name: "wishes"}))
.add(Schedule.create({name: "registration"}))
.run()
.then(makeSchedSync);
}