Something went wrong. Try again.
VueTube is a YouTube clone built with nodejs, expressjs & mongodb. This is the RESTful API repository.
Something went wrong. Try again.
2.5 kB · 86 lines
JavaScript
at master
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687const asyncHandler = require('../middleware/async')const ErrorResponse = require('../utils/errorResponse')const advancedResultsFunc = require('../utils/advancedResultsFunc')
const Video = require('../models/Video')const Subscription = require('../models/Subscription')
// @desc Get all subscribers// @route GET /api/v1/subscriptions/subscribers// @access Privateexports.getSubscribers = asyncHandler(async (req, res, next) => { res.status(200).json(res.advancedResults)})
// @desc Get all channels subscribed to// @route GET /api/v1/subscriptions/channels// @access Privateexports.getChannels = asyncHandler(async (req, res, next) => { res.status(200).json(res.advancedResults)})
// @desc Check subscription// @route POST /api/v1/subscriptions/check// @access Privateexports.checkSubscription = asyncHandler(async (req, res, next) => { const channel = await Subscription.findOne({ channelId: req.body.channelId, subscriberId: req.user._id })
if (!channel) { return res.status(200).json({ success: true, data: {} }) }
return res.status(200).json({ success: true, data: channel })})
// @desc Create subscriber// @route Post /api/v1/subscriptions// @access Privateexports.createSubscriber = asyncHandler(async (req, res, next) => { const { channelId } = req.body
if (channelId.toString() == req.user._id.toString()) { return next(new ErrorResponse(`You can't subscribe to your own channle`)) }
let subscription = await Subscription.findOne({ channelId: channelId, subscriberId: req.user._id })
if (subscription) { await subscription.remove() return res.status(200).json({ success: true, data: {} }) } else { subscription = await Subscription.create({ subscriberId: req.user._id, channelId: channelId }) }
res.status(200).json({ success: true, data: subscription })})
// @desc Get subscribed videos// @route GET /api/v1/subscriptions/videos// @access Privateexports.getSubscribedVideos = asyncHandler(async (req, res, next) => { const channels = await Subscription.find({ subscriberId: req.user._id })
if(channels.length === 0) return res.status(200).json({ success: true, data: {} })
const channelsId = channels.map((channel) => { return { userId: channel.channelId.toString() } })
const populates = [{ path: 'userId', select: 'photoUrl channelName' }] advancedResultsFunc(req, res, Video, populates, 'public', channelsId)})