108 lines
2.1 KiB
JavaScript
108 lines
2.1 KiB
JavaScript
const { getDB } = require('../../utils/mongo')
|
|
|
|
let db = null
|
|
|
|
const connect = async () => {
|
|
db = await getDB('stc-21-03')
|
|
}
|
|
|
|
const _idToId = (data) => {
|
|
const { _id, ...rest } = data
|
|
|
|
return {
|
|
id: _id, ...rest,
|
|
}
|
|
}
|
|
|
|
const FILM_TOMATOS_COLL = 'films-tomatos'
|
|
const getFilmData = async (filmId) => {
|
|
if (db === null) throw new Error('no db connection')
|
|
|
|
const filmsCollection = db.collection(FILM_TOMATOS_COLL)
|
|
const data = await filmsCollection.find({
|
|
filmId,
|
|
}).toArray()
|
|
|
|
if (data.length === 0) {
|
|
const newData = {
|
|
filmId,
|
|
views: 0,
|
|
ratings: [],
|
|
likes: 0,
|
|
}
|
|
|
|
filmsCollection.insertMany([newData])
|
|
|
|
return _idToId(newData)
|
|
}
|
|
const filmData = data[0]
|
|
filmsCollection.updateOne({
|
|
filmId,
|
|
}, [
|
|
{
|
|
$set: {
|
|
views: ++filmData.views,
|
|
},
|
|
},
|
|
])
|
|
return _idToId(filmData)
|
|
}
|
|
|
|
const setLike = async (filmId) => {
|
|
if (db === null) throw new Error('no db connection')
|
|
|
|
const filmsCollection = db.collection(FILM_TOMATOS_COLL)
|
|
const data = await filmsCollection.find({
|
|
filmId,
|
|
}).toArray()
|
|
|
|
if (data.length === 0) {
|
|
throw new Error('no film data')
|
|
}
|
|
|
|
const filmData = data[0]
|
|
filmsCollection.updateOne({
|
|
filmId,
|
|
}, [
|
|
{
|
|
$set: {
|
|
likes: ++filmData.likes,
|
|
},
|
|
},
|
|
])
|
|
return _idToId(filmData)
|
|
}
|
|
|
|
const setRating = async ({ filmId, rating }) => {
|
|
if (db === null) throw new Error('no db connection')
|
|
|
|
const filmsCollection = db.collection(FILM_TOMATOS_COLL)
|
|
const data = await filmsCollection.find({
|
|
filmId,
|
|
}).toArray()
|
|
|
|
if (data.length === 0) {
|
|
throw new Error('no film data')
|
|
}
|
|
|
|
const filmData = data[0]
|
|
filmData.ratings = [...filmData.ratings, rating]
|
|
filmsCollection.updateOne({
|
|
filmId,
|
|
}, [
|
|
{
|
|
$set: {
|
|
ratings: filmData.ratings,
|
|
},
|
|
},
|
|
])
|
|
return _idToId(filmData)
|
|
}
|
|
|
|
module.exports = {
|
|
connect,
|
|
getFilmData,
|
|
setLike,
|
|
setRating,
|
|
}
|