Update: Playlist.update
This commit is contained in:
parent
88670b9c18
commit
fd5d9505b0
1 changed files with 84 additions and 12 deletions
|
|
@ -1,6 +1,8 @@
|
||||||
const db = require("../models/mongodb.model");
|
const db = require("../models/mongodb.model");
|
||||||
const {sendError, sendMessage} = require ("../config/response.config");
|
const {sendError, sendMessage} = require ("../config/response.config");
|
||||||
const {checkLogin} = require("../config/sessionJWT.config");
|
const {checkLogin} = require("../config/sessionJWT.config");
|
||||||
|
const {youtube, dailymotion} = require("../config/host.config");
|
||||||
|
const {asyncRequest} = require("../config/functions.config");
|
||||||
const ObjectId = require('mongoose').Types.ObjectId;
|
const ObjectId = require('mongoose').Types.ObjectId;
|
||||||
const Playlist = db.playlists;
|
const Playlist = db.playlists;
|
||||||
|
|
||||||
|
|
@ -50,7 +52,7 @@ exports.findAll = (req, res) => {
|
||||||
condition = playlistId ? playlistId : undefined;
|
condition = playlistId ? playlistId : undefined;
|
||||||
query._id = condition;
|
query._id = condition;
|
||||||
|
|
||||||
const userId = req.query.userId;
|
const userId = token.id;
|
||||||
condition = userId ? userId : undefined;
|
condition = userId ? userId : undefined;
|
||||||
query.userId = condition;
|
query.userId = condition;
|
||||||
|
|
||||||
|
|
@ -113,13 +115,76 @@ exports.findOne = (req, res) => {
|
||||||
if(token && typeof req.params.id !== 'undefined') {
|
if(token && typeof req.params.id !== 'undefined') {
|
||||||
const id = req.params.id;
|
const id = req.params.id;
|
||||||
if(id && ObjectId.isValid(id)){
|
if(id && ObjectId.isValid(id)){
|
||||||
Playlist.findById(id, {})
|
Playlist.aggregate([
|
||||||
.then(data => {
|
{$match: {_id: new ObjectId(id), userId: token.id, isActive: true}},
|
||||||
if(data){
|
{$unwind: '$videoIds'},
|
||||||
return sendMessage(res, 23, data, token);
|
{$project: {
|
||||||
} else {
|
userId: true,
|
||||||
return sendError(res,404,105,`Playlist not found with id=${id}`, token);
|
name: true,
|
||||||
|
isActive: true,
|
||||||
|
createdAt: true,
|
||||||
|
updatedAt: true,
|
||||||
|
videoIds: {$toObjectId: '$videoIds'}
|
||||||
|
}},
|
||||||
|
{$lookup: {
|
||||||
|
from: 'videos',
|
||||||
|
localField: 'videoIds',
|
||||||
|
foreignField: '_id',
|
||||||
|
as: 'videos'
|
||||||
|
}},
|
||||||
|
{$unwind: '$videos'},
|
||||||
|
{$group: {
|
||||||
|
_id: '$_id',
|
||||||
|
userId: {$first: "$userId"},
|
||||||
|
name: {$first: "$name"},
|
||||||
|
isActive: {$first: "$isActive"},
|
||||||
|
createdAt: {$first: "$createdAt"},
|
||||||
|
updatedAt: {$first: "$updatedAt"},
|
||||||
|
videos: {$push: "$videos"}
|
||||||
|
}}
|
||||||
|
])
|
||||||
|
.then(async data => {
|
||||||
|
let yt_results = [];
|
||||||
|
let dm_results = [];
|
||||||
|
let yt_videoIds = "";
|
||||||
|
let dm_videoIds = "";
|
||||||
|
|
||||||
|
for (const i in data[0].videos) {
|
||||||
|
if (data[0].videos[i].source === youtube.name) {
|
||||||
|
yt_videoIds = yt_videoIds + data[0].videos[i].videoId + ",";
|
||||||
|
} else if (data[0].videos[i].source === dailymotion.name) {
|
||||||
|
dm_videoIds = dm_videoIds + data[0].videos[i].videoId + ",";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (yt_videoIds !== "") {
|
||||||
|
const uri = youtube.baseAPIUrl + '/videos' + '?part=snippet&part=statistics&id=' + yt_videoIds.slice(0, -1) + '&key=' + youtube.YOUTUBE_API_KEY;
|
||||||
|
const dataVideos = await asyncRequest(uri, {});
|
||||||
|
if (dataVideos.response.statusCode === 200 && dataVideos.body.items.length > 0) {
|
||||||
|
yt_results = dataVideos.body.items;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dm_videoIds !== "") {
|
||||||
|
const uri = dailymotion.baseAPIUrl + '/videos?ids=' + dm_videoIds.slice(0, -1) + '&fields=thumbnail_480_url%2Ctitle%2Cid';
|
||||||
|
const data = await asyncRequest(uri, {});
|
||||||
|
const response = data.response;
|
||||||
|
const jsonBody = data.body;
|
||||||
|
if (response.statusCode === 200) {
|
||||||
|
dm_results = jsonBody.list;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const i in data[0].videos) {
|
||||||
|
if (data[0].videos[i].source === youtube.name) {
|
||||||
|
const obj = yt_results.filter(obj => obj.id === data[0].videos[i].videoId);
|
||||||
|
data[0].videos[i].imageUrl = obj[0].snippet.thumbnails.medium.url ? obj[0].snippet.thumbnails.medium.url : null;
|
||||||
|
data[0].videos[i].title = obj[0].snippet.title ? obj[0].snippet.title : null;
|
||||||
|
} else if (data[0].videos[i].source === dailymotion.name) {
|
||||||
|
const obj = dm_results.filter(obj => obj.id === data[0].videos[i].videoId);
|
||||||
|
data[0].videos[i].imageUrl = obj[0].thumbnail_480_url ? obj[0].thumbnail_480_url : null;
|
||||||
|
data[0].videos[i].title = obj[0].title ? obj[0].title : null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sendMessage(res, 12, data[0], token)
|
||||||
})
|
})
|
||||||
.catch(err => {
|
.catch(err => {
|
||||||
return sendError(res,500,100,err.message || `Some error occurred while finding the Playlist with id=${id}`, token);
|
return sendError(res,500,100,err.message || `Some error occurred while finding the Playlist with id=${id}`, token);
|
||||||
|
|
@ -148,8 +213,12 @@ exports.update = (req, res) => {
|
||||||
update.name = condition;
|
update.name = condition;
|
||||||
|
|
||||||
const videoIds = req.body.videoIds;
|
const videoIds = req.body.videoIds;
|
||||||
condition = videoIds ? {videoIds: videoIds} : undefined;
|
if(typeof videoIds !== 'undefined' && videoIds !== null){
|
||||||
update.$push = condition;
|
condition = videoIds ? {videoIds: videoIds} : undefined;
|
||||||
|
} else {
|
||||||
|
condition = undefined;
|
||||||
|
}
|
||||||
|
update.$addToSet = condition;
|
||||||
|
|
||||||
const isActive = req.body.isActive;
|
const isActive = req.body.isActive;
|
||||||
if(typeof isActive !== 'undefined'){
|
if(typeof isActive !== 'undefined'){
|
||||||
|
|
@ -163,11 +232,14 @@ exports.update = (req, res) => {
|
||||||
Object.keys(update).forEach(key => update[key] === undefined ? delete update[key] : {});
|
Object.keys(update).forEach(key => update[key] === undefined ? delete update[key] : {});
|
||||||
|
|
||||||
if(id && ObjectId.isValid(id)){
|
if(id && ObjectId.isValid(id)){
|
||||||
Playlist.updateOne({_id: id, userId: token.id}, update)
|
Playlist.findOneAndUpdate({_id: id, userId: token.id}, update, {new: false})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if(data) {
|
if(data) {
|
||||||
//Object.keys(update).forEach(key => data[key] = update[key]);
|
if(!data.videoIds.includes(videoIds)){
|
||||||
return sendMessage(res, 24, update, token);
|
return sendMessage(res, 24, update, token);
|
||||||
|
} else {
|
||||||
|
return sendError(res, 500, -1, `Video in Playlist ${data.name} already exists.`, token);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return sendError(res, 404, -1, `Playlist not found with id=${id}`, token);
|
return sendError(res, 404, -1, `Playlist not found with id=${id}`, token);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Reference in a new issue