Skip to content

Commit 006b7d5

Browse files
author
rinaldo stevenazzi
committed
improve score management
1 parent d11653c commit 006b7d5

File tree

5 files changed

+63
-54
lines changed

5 files changed

+63
-54
lines changed

constants/events.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
module.exports = Object.freeze({
33
USER_ALREADY_EXIST: 'userAlreadyExist',
44
USER_CREATED: 'userCreated',
5-
REMOVE_USER: 'removeUser'
5+
REMOVE_USER: 'removeUser',
6+
SCORE_REJECTED: 'scoreRejected',
7+
SCORED: 'scored'
68
})
79

controllers/Global.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,29 +32,38 @@ class Global {
3232
}
3333

3434
addUser (user) {
35-
const { email } = user
35+
const { email, score } = user
3636
return new Promise(async (resolve, reject) => {
37+
38+
if(!score) {
39+
return reject()
40+
}
41+
3742
const oldUser = await this.users.isUserAlreadyExist(email)
3843
if (oldUser) {
39-
resolve({message: EVENTS.USER_ALREADY_EXIST})
44+
return resolve({message: EVENTS.USER_ALREADY_EXIST})
4045
}
4146

4247
this.users.addUser(user)
43-
.then(() => {
44-
resolve({message: EVENTS.USER_CREATED})
45-
}).catch(e => {
48+
.then((result) => {
49+
return resolve({ message: EVENTS.USER_CREATED, list: result})
50+
})
51+
.catch(e => {
4652
console.log('Global Controller - addUser failed !!!')
47-
reject()
53+
return reject()
4854
})
4955
})
5056
}
5157

5258
checkScore (score = 123) {
5359
return new Promise((resolve, reject) => {
5460
this.scores.checkScores(score)
55-
.then(() => {
56-
console.log('Global Controller - checkScore')
57-
resolve()
61+
.then((result) => {
62+
console.log('Global Controller - checkScore', result)
63+
if(result) {
64+
return resolve({ message: EVENTS.SCORED})
65+
}
66+
return resolve({ message: EVENTS.SCORE_REJECTED})
5867
}).catch(result => {
5968
console.log('Global Controller - checkScore failed !!!')
6069
reject(result)

index.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,12 @@ app.get('/', (req, res) => {
2020

2121
app.post('/score', (req, res) => {
2222
const {score} = req.body
23-
24-
globalController.checkScore(score).then(() => {
25-
res.send()
23+
globalController.checkScore(score).then((result) => {
24+
if (result.message === EVENTS.SCORED) {
25+
res.status(200).send()
26+
} else {
27+
res.status(409).send()
28+
}
2629
}).catch((result) => {
2730
res.status(406).send(result)
2831
})
@@ -34,11 +37,13 @@ app.post('/adduser', (req, res) => {
3437

3538
globalController.addUser({username, score, email, password})
3639
.then((result) => {
37-
console.log('index - adduser result', result)
3840
if (result.message === EVENTS.USER_ALREADY_EXIST) {
3941
res.status(409).send("User Already Exist.")
42+
} else if(result.message === EVENTS.USER_CREATED) {
43+
res.status(200).send(JSON.stringify(result.list))
44+
} else {
45+
res.send()
4046
}
41-
res.send()
4247
})
4348
.catch((result) => {
4449
console.log('index - response 406')

services/Scores.js

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
const {getCollectionPropertyValue} = require("../utils/array");
22

3+
// EXAMPLES MONGODB QUERY
4+
// - list complete decroissant : const collection = this.collection.find({}).sort({score:-1}).toArray()
5+
// - list complete : this.collection.find().toArray()
6+
// - list query : this.collection.findOne({'name' : 'b'})
7+
38
class Scores {
49
constructor(){
510
console.log('Scores Class Constructor')
@@ -8,7 +13,7 @@ class Scores {
813

914
init (db) {
1015
console.log('Scores Class - init')
11-
this.collection = db.collection("Users")
16+
this.collection = db.collection("users")
1217
}
1318

1419
async getSmallerScores (score) {
@@ -17,51 +22,38 @@ class Scores {
1722
return Math.min(...scores)
1823
}
1924

20-
// TODO : create a Capped Collections with a fixed size to 20
21-
// https://www.mongodb.com/docs/manual/core/capped-collections/#behavior
25+
async getHigherScores (score) {
26+
const collection = await this.collection.find().toArray()
27+
const scores = getCollectionPropertyValue(collection, 'score')
28+
return Math.max(...scores)
29+
}
30+
2231
async checkScores (score) {
2332
return new Promise(async (resolve, reject) => {
2433

25-
26-
//
27-
//
28-
// this.collection.findOne({'name' : 'b'})
29-
// .then((result) => {
30-
// console.log('findOne name b', result)
31-
// })
32-
33-
// const collection = this.collection.find({}).sort({score:-1}).toArray()
3434
let collection
3535
let scores
3636
try {
3737
collection = await this.collection.find().toArray()
38-
scores = this.getCollectionPropertyValue(collection, 'score')
39-
40-
console.log('collection')
38+
scores = getCollectionPropertyValue(collection, 'score')
39+
console.log('User score --> ', score)
40+
console.log('-- checkScores - collection User --------------')
4141
console.log('length', collection.length)
4242
console.log('min', Math.min(...scores))
4343
console.log('max', Math.max(...scores))
44-
44+
console.log('---------------------------')
4545

4646

4747
if(score > Math.min(...scores)) {
4848
console.log('score is higher', score)
49-
resolve()
49+
resolve(true)
5050
}
51-
reject(collection)
51+
// TODO : send message with resolve method to explain that the score is to low
52+
resolve(false)
5253
} catch (error) {
5354
console.log('checkScores - ERROR', error)
5455
reject()
5556
}
56-
57-
58-
// this.collection.find({}).sort({score:-1}).toArray()
59-
// .then((result) => {
60-
// console.log('length', result.length)
61-
// console.log('min', Math.min(...this.getCollectionScore(result)))
62-
// console.log('max', Math.max(...this.getCollectionScore(result)))
63-
// })
64-
6557
})
6658
}
6759
}

services/Users.js

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,26 +20,26 @@ class Users {
2020
addUser (user) {
2121
return new Promise(async (resolve, reject) => {
2222

23-
const collection = await this.collection.find().toArray()
24-
2523
// limit the base at 10 items by removing the smaller score
26-
if(collection.length >= 9) {
27-
console.log('collection > 9')
24+
const collectionCount = await this.collection.count()
25+
if(collectionCount >= 10) {
26+
console.log('User - addUser - delete user')
27+
const collection = await this.collection.find().toArray()
2828
const scores = getCollectionPropertyValue(collection, 'score')
2929
await this.deleteUser({score: Math.min(...scores)})
3030
}
3131

3232
// encrypt user password
3333
user.password = await bcrypt.hash(user.password, 10)
3434

35-
// insert the new user with encrypted password
35+
// insert the new user with encrypted password and send back final list
3636
this.collection.insertOne(user)
37-
.then((result) => {
38-
console.log('Users - addUser', result)
39-
resolve(result)
37+
.then(async () => {
38+
const collection = await this.collection.find().toArray()
39+
resolve(collection)
4040
})
4141
.catch(e => {
42-
console.log('Users - addUser failed !!!')
42+
console.log('Users - addUser failed !!!', e)
4343
reject(e)
4444
})
4545
})
@@ -53,7 +53,7 @@ class Users {
5353
resolve(user)
5454
})
5555
.catch(e => {
56-
console.log('Users - addUser failed !!!')
56+
console.log('Users - getUser failed !!!', e)
5757
reject(e)
5858
})
5959
})
@@ -64,8 +64,9 @@ class Users {
6464
this.collection.deleteOne(query).then((result) => {
6565
console.log('Users - deleteUser done', result);
6666
resolve()
67-
}).catch((err) => {
68-
reject(err)
67+
}).catch((e) => {
68+
console.log('Users - deleteUser failed !!!', e);
69+
reject(e)
6970
})
7071
})
7172

0 commit comments

Comments
 (0)