-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathServices.js
81 lines (69 loc) · 2.48 KB
/
Services.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
const { Sequelize, Op } = require('sequelize')
const sequelize = new Sequelize(process.env.DATABASE_URL, { logging: process.env.DATABASE_SHOW_LOG === "true" })
const User = sequelize.define("users", {
authID: {
type: Sequelize.STRING, // ID given by Firebase when authenticating
primaryKey: true
},
authorized: {
type: Sequelize.BOOLEAN,
defaultValue: false // false for hugger but true for huggy
},
birthdate: Sequelize.BIGINT,
maxchild: {
type: Sequelize.INTEGER,
defaultValue: 3
},
name: Sequelize.STRING,
picture: Sequelize.STRING,
sex: Sequelize.STRING,
story: Sequelize.STRING,
type: Sequelize.STRING,
deviceToken: Sequelize.STRING
})
const Chat = sequelize.define("chats", {
user1: Sequelize.STRING,
user2: Sequelize.STRING
})
const Message = sequelize.define("messages", {
message: Sequelize.STRING
})
Chat.belongsTo(User, { foreignKey: "user1", as: "hugger" })
Chat.belongsTo(User, { foreignKey: "user2", as: "huggy" })
Chat.hasMany(Message, { foreignKey: "chat_id" })
Message.belongsTo(Chat, { foreignKey: "chat_id" })
User.hasMany(Message, { foreignKey: "sender_id" })
Message.belongsTo(User, { foreignKey: "sender_id" })
User.sync()
Chat.sync()
Message.sync()
exports.assignHuggerToHuggy = async (user_data) => { // TODO: Don't reach maxchild
if(user_data.type == "huggy"){
try {
const huggers = await User.findAll({ where: { type: "hugger", authorized: 1 } })
const chats = await Chat.findAll()
let pHuggers = [] // list of huggers' id with maxchild (potentialHuggers)
let chat_ids = []
for(const chat of chats){ // list all chat ids
chat_ids.push(chat.user1 + "_" + chat.user2)
}
for(const hugger of huggers){
pHuggers.push({
authID: hugger.authID,
appearance: chat_ids.filter($0 => $0.includes(hugger.authID)).length
})
}
pHuggers.sort((a, b) => a.appearance > b.appearance) // sort huggers to have the least handling one first
Chat.build({
user1: pHuggers[0].authID,
user2: user_data.authID,
})
.save()
.then((data) => {
console.log("[DEBUG] New huggy now linked to a hugger")
})
}catch(err) {
console.error(err)
}
}
}