2025-06-03 12:12:48 +02:00
|
|
|
const { Db } = require('mongodb')
|
|
|
|
Server = require('mongodb').Server,
|
|
|
|
BSON = require('mongodb').BSONNative,
|
|
|
|
conf = require('../../config.js').database
|
|
|
|
|
|
|
|
const db = function(callback) {
|
|
|
|
this.rooms = false
|
|
|
|
const t = this
|
|
|
|
|
|
|
|
const db = new Db(conf.database, new Server(conf.hostname, conf.port), { native_parser: true })
|
|
|
|
db.open((err, db) => {
|
|
|
|
db.collection('rooms', (err, collection) => {
|
|
|
|
// make sure we have an index on name
|
|
|
|
collection.ensureIndex([['name', 1]], false, () => {})
|
|
|
|
t.rooms = collection
|
|
|
|
})
|
|
|
|
callback()
|
|
|
|
})
|
2011-03-12 19:30:22 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
db.prototype = {
|
2025-06-03 12:12:48 +02:00
|
|
|
clearRoom(room, callback) {
|
|
|
|
this.rooms.remove({ name: room }, callback)
|
|
|
|
},
|
|
|
|
|
|
|
|
// theme commands
|
|
|
|
setTheme(room, theme) {
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $set: { theme } }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
getTheme(room, callback) {
|
|
|
|
this.rooms.findOne(
|
|
|
|
{ name: room },
|
|
|
|
{ theme: true },
|
|
|
|
(err, room) => {
|
|
|
|
if (room) {
|
|
|
|
callback(room.theme)
|
|
|
|
} else {
|
|
|
|
callback()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
// revision commands
|
|
|
|
setRevisions(room, revisions) {
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $set: { revisions } }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
getRevisions(room, callback) {
|
|
|
|
this.rooms.findOne(
|
|
|
|
{ name: room },
|
|
|
|
{ revisions: true },
|
|
|
|
(err, room) => {
|
|
|
|
if (room) {
|
|
|
|
callback(room.revisions)
|
|
|
|
} else {
|
|
|
|
callback()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
// Column commands
|
|
|
|
createColumn(room, name, callback) {
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $push: { columns: name } },
|
|
|
|
{ upsert: true },
|
|
|
|
callback
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
getAllColumns(room, callback) {
|
|
|
|
this.rooms.findOne({ name: room }, { columns: true }, (err, room) => {
|
|
|
|
if (room) {
|
|
|
|
callback(room.columns)
|
|
|
|
} else {
|
|
|
|
callback()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
deleteColumn(room) {
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $pop: { columns: 1 } }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
setColumns(room, columns) {
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $set: { columns } },
|
|
|
|
{ upsert: true }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
// Card commands
|
|
|
|
createCard(room, id, card) {
|
|
|
|
const doc = {}
|
|
|
|
doc[`cards.${id}`] = card
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $set: doc },
|
|
|
|
{ upsert: true }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
getAllCards(room, callback) {
|
|
|
|
this.rooms.findOne({ name: room }, { cards: true }, (err, room) => {
|
|
|
|
if (room) {
|
|
|
|
callback(room.cards)
|
|
|
|
} else {
|
|
|
|
callback()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
|
|
|
|
cardEdit(room, id, text) {
|
|
|
|
const doc = {}
|
|
|
|
doc[`cards.${id}.text`] = text
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $set: doc }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
cardSetXY(room, id, x, y) {
|
|
|
|
const doc = {}
|
|
|
|
doc[`cards.${id}.x`] = x
|
|
|
|
doc[`cards.${id}.y`] = y
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $set: doc }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
deleteCard(room, id) {
|
|
|
|
const doc = {}
|
|
|
|
doc[`cards.${id}`] = true
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $unset: doc }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
|
|
|
|
addSticker(room, cardId, stickerId) {
|
|
|
|
const doc = {}
|
|
|
|
doc[`cards.${cardId}.sticker`] = stickerId
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $set: doc }
|
|
|
|
)
|
|
|
|
},
|
|
|
|
getBoardSize(room, callback) {
|
|
|
|
this.rooms.findOne(
|
|
|
|
{ name: room },
|
|
|
|
(err, room) => {
|
|
|
|
if (room) {
|
|
|
|
callback(room.size)
|
|
|
|
} else {
|
|
|
|
callback()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
},
|
|
|
|
setBoardSize(room, size) {
|
|
|
|
this.rooms.update(
|
|
|
|
{ name: room },
|
|
|
|
{ $set: { size } }
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
exports.db = db
|