-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathleaderBoardModel.js
More file actions
48 lines (41 loc) · 1.22 KB
/
Copy pathleaderBoardModel.js
File metadata and controls
48 lines (41 loc) · 1.22 KB
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
import db from './db'
import mongoose from 'mongoose'
import LeaderBoardSchema from './leaderBoardSchema'
const leaderBoardModel = (leaderBoard) => {
return LeaderBoardSchema.findOne({})
.then(data => writeDB(data, leaderBoard))
.catch(err => console.log(err))
}
function writeDB(data, leaderBoard) {
if (data) {
data.leaderBoard = merge(data.leaderBoard, leaderBoard)
} else {
// DB is empty, must have been reset on mLab
data = new LeaderBoardSchema()
data.leaderBoard = leaderBoard
}
data.save(function(err, fluffy) {
if (err)
return console.log(err)
})
return data
}
// returns new obj with leaderboards merged, sorted and top ten times for each N
const merge = (Mongo, Client) => {
const cleanTime = (time) => time.time.split(':').join('')
const leaderBoard = {}
for (let key in Mongo) {
let scores = leaderBoard[key] = []
Client[key].forEach((score, i) => {
scores.push(score)
if(Mongo[key][i]) {
if (!Client[key].find(score => score.time === Mongo[key][i].time)) {
scores.push(Mongo[key][i])
}
}
})
scores.sort((a, b) => cleanTime(a) - cleanTime(b)).splice(10)
}
return leaderBoard
}
export default leaderBoardModel