From ce589409db899492f397a961bf95b99edeb6c968 Mon Sep 17 00:00:00 2001 From: AJ Date: Tue, 25 Jul 2023 22:23:39 -0500 Subject: [PATCH] added filters --- functions/addUser.js | 26 +++++++++----- functions/db.js | 68 ++++++++++++------------------------ functions/updateUser.js | 12 +++---- images/avatar.png | Bin 11359 -> 1272 bytes index.js | 9 ++--- js/main.js | 74 ++++++++++++++++++++++++++++++++++++---- views/index.ejs | 6 ++++ 7 files changed, 120 insertions(+), 75 deletions(-) diff --git a/functions/addUser.js b/functions/addUser.js index 335a302..8249e8a 100644 --- a/functions/addUser.js +++ b/functions/addUser.js @@ -79,9 +79,17 @@ const addUser = async (userId, ids) => { } }, stats: { - views: parseInt(response.data.items[0].statistics.viewCount), - subscribers: parseInt(response.data.items[0].statistics.subscriberCount), - videos: parseInt(response.data.items[0].statistics.videoCount) + views: parseInt(response.data.items[0].statistics.viewCount ? response.data.items[0].statistics.viewCount : 0), + subscribers: parseInt(response.data.items[0].statistics.subscriberCount ? response.data.items[0].statistics.subscriberCount : 0), + videos: parseInt(response.data.items[0].statistics.videoCount ? response.data.items[0].statistics.videoCount : 0) + }, + history: { + [new Date().toString().split(' ').slice(0, 4).join(' ')]: { + views: parseInt(response.data.items[0].statistics.viewCount ? response.data.items[0].statistics.viewCount : 0), + subscribers: parseInt(response.data.items[0].statistics.subscriberCount ? response.data.items[0].statistics.subscriberCount : 0), + videos: parseInt(response.data.items[0].statistics.videoCount ? response.data.items[0].statistics.videoCount : 0), + name: response.data.items[0].snippet.title + } } }); return { @@ -154,15 +162,15 @@ const addUser = async (userId, ids) => { } }, stats: { - views: parseInt(response.data.items[i].statistics.viewCount), - subscribers: parseInt(response.data.items[i].statistics.subscriberCount), - videos: parseInt(response.data.items[i].statistics.videoCount) + views: parseInt(response.data.items[i].statistics.viewCount ? response.data.items[i].statistics.viewCount : 0), + subscribers: parseInt(response.data.items[i].statistics.subscriberCount ? response.data.items[i].statistics.subscriberCount : 0), + videos: parseInt(response.data.items[i].statistics.videoCount ? response.data.items[i].statistics.videoCount : 0) }, history: { [dateString]: { - views: parseInt(response.data.items[i].statistics.viewCount), - subscribers: parseInt(response.data.items[i].statistics.subscriberCount), - videos: parseInt(response.data.items[i].statistics.videoCount), + views: parseInt(response.data.items[i].statistics.viewCount ? response.data.items[i].statistics.viewCount : 0), + subscribers: parseInt(response.data.items[i].statistics.subscriberCount ? response.data.items[i].statistics.subscriberCount : 0), + videos: parseInt(response.data.items[i].statistics.videoCount ? response.data.items[i].statistics.videoCount : 0), name: response.data.items[i].snippet.title } } diff --git a/functions/db.js b/functions/db.js index 18b8af1..4c2b58a 100644 --- a/functions/db.js +++ b/functions/db.js @@ -75,63 +75,39 @@ const removeDuplicates = async () => { removeDuplicates() +const sortMap = { + subscribers24: "gains.subscribers.daily", + subscribers7: "gains.subscribers.weekly", + subscribers30: "gains.subscribers.monthly", + views24: "gains.views.daily", + views7: "gains.views.weekly", + views30: "gains.views.monthly", + videos24: "gains.videos.daily", + videos7: "gains.videos.weekly", + videos30: "gains.videos.monthly", + nameLength: "nameLength", + descriptionLength: "descriptionLength", +}; + +const getMappedSort = (sortOption) => { + return sortMap[sortOption] || (sortOption === "views" || sortOption === "subscribers" || sortOption === "videos" ? `stats.${sortOption}` : `user.${sortOption}`); +}; + const getall2 = async (options) => { try { - if (options.sort1 === "subscribers24") { - options.sort1 = "gains.subscribers.daily"; - } else if (options.sort1 === "subscribers7") { - options.sort1 = "gains.subscribers.weekly"; - } else if (options.sort1 === "subscribers30") { - options.sort1 = "gains.subscribers.monthly"; - } else if (options.sort1 === "views24") { - options.sort1 = "gains.views.daily"; - } else if (options.sort1 === "views7") { - options.sort1 = "gains.views.weekly"; - } else if (options.sort1 === "views30") { - options.sort1 = "gains.views.monthly"; - } else if (options.sort1 === "videos24") { - options.sort1 = "gains.videos.daily"; - } else if (options.sort1 === "videos7") { - options.sort1 = "gains.videos.weekly"; - } else if (options.sort1 === "videos30") { - options.sort1 = "gains.videos.monthly"; - } else { - options.sort1 = options.sort1 === "views" || options.sort1 === "subscribers" || options.sort1 === "videos" ? `stats.${options.sort1}` : `user.${options.sort1}`; - } - if (options.sort2 === "subscribers24") { - options.sort2 = "gains.subscribers.daily"; - } else if (options.sort2 === "subscribers7") { - options.sort2 = "gains.subscribers.weekly"; - } else if (options.sort2 === "subscribers30") { - options.sort2 = "gains.subscribers.monthly"; - } else if (options.sort2 === "views24") { - options.sort2 = "gains.views.daily"; - } else if (options.sort2 === "views7") { - options.sort2 = "gains.views.weekly"; - } else if (options.sort2 === "views30") { - options.sort2 = "gains.views.monthly"; - } else if (options.sort2 === "videos24") { - options.sort2 = "gains.videos.daily"; - } else if (options.sort2 === "videos7") { - options.sort2 = "gains.videos.weekly"; - } else if (options.sort2 === "videos30") { - options.sort2 = "gains.videos.monthly"; - } else { - options.sort2 = options.sort2 === "views" || options.sort2 === "subscribers" || options.sort2 === "videos" ? `stats.${options.sort2}` : `user.${options.sort2}`; - } + options.sort1 = getMappedSort(options.sort1); + options.sort2 = getMappedSort(options.sort2); let documents = await User.find({ $or: [ - { "user.name": { $regex: options.search, $options: "i" } }, - { "id": { $regex: options.search, $options: "i" } }, - { "user.description": { $regex: options.search, $options: "i" } }, { "user.name": { $regex: options.search, $options: "i" } }, { "id": { $regex: options.search, $options: "i" } }, { "user.description": { $regex: options.search, $options: "i" } } ], + ...options.filters }) .sort({ [options.sort1]: options.order1 === "asc" ? 1 : -1, - [options.sort2]: options.order2 === "asc" ? 1 : -1, + [options.sort2]: options.order2 === "asc" ? 1 : -1 }).limit(options.limit).skip(options.offset); documents = JSON.parse(JSON.stringify(documents)); documents = documents.map((document) => { diff --git a/functions/updateUser.js b/functions/updateUser.js index 601e85e..524a6ff 100644 --- a/functions/updateUser.js +++ b/functions/updateUser.js @@ -31,9 +31,9 @@ const updateUser = async (userId, ids) => { description: response.data.items[0].snippet.description }, stats: { - views: parseInt(response.data.items[0].statistics.viewCount), - subscribers: parseInt(response.data.items[0].statistics.subscriberCount), - videos: parseInt(response.data.items[0].statistics.videoCount), + views: parseInt(response.data.items[0].statistics.viewCount ? response.data.items[0].statistics.viewCount : 0), + subscribers: parseInt(response.data.items[0].statistics.subscriberCount ? response.data.items[0].statistics.subscriberCount : 0), + videos: parseInt(response.data.items[0].statistics.videoCount ? response.data.items[0].statistics.videoCount : 0), }, history: user.history, gains: { @@ -120,9 +120,9 @@ const updateUser = async (userId, ids) => { description: response.data.items[j].snippet.description }, stats: { - views: parseInt(response.data.items[j].statistics.viewCount), - subscribers: parseInt(response.data.items[j].statistics.subscriberCount), - videos: parseInt(response.data.items[j].statistics.videoCount) + views: parseInt(response.data.items[j].statistics.viewCount ? response.data.items[j].statistics.viewCount : 0), + subscribers: parseInt(response.data.items[j].statistics.subscriberCount ? response.data.items[j].statistics.subscriberCount : 0), + videos: parseInt(response.data.items[j].statistics.videoCount ? response.data.items[j].statistics.videoCount : 0), }, history: user.history, gains: { diff --git a/images/avatar.png b/images/avatar.png index 53aa6515efdadb99b30121b629287d0223861b99..47c502f5548b274b387f49827628b58c3136174f 100644 GIT binary patch literal 1272 zcmeAS@N?(olHy`uVBq!ia0vp^5g^RL1SJ1`U!Dx47>k44ofy`glX(f`u%tWsIx;Y9 z?C1WI$O`0h7I;J!GcfQS24TkI`72U@YI;3g978JN-p-25zwIW_;MsM>aqh=J=R)P> zeRFqMM%jOB5SZg0|*2Ze{-8 znay_asp&G2%AZva@2xE|n>(Se#l=DUMn#fEUdP9RluM_?%a<=GO*q3@-TvnL(y#Y> zwz~JO5M$6_V!bXeJ)uQ9POyOSySZO^T$w@N(Q|q1lL~e}5dBzi`p4_3y$3lQggjaq z`FoV&Ou8G}a4RUnik$50Pmo~_if}n_Lo6o7EQle~)9rruhYpLBpKFlCh8vy$G(t2M*jR5nH9uzSREuDl0j| z15@U>9yt^$D`mj8#39O~k5N-c$;5Z(&VVBgA|9u|JZx6gEcl)_^Uq-xm6k0M0f$wU zCWq~dovRk}(?QFFBhzqMo3_4z{q)_Neae{M>r7QtWaBaDVh9V@^5$mcaZ9LNxZzhO zE3;gMt3&m_w9;Rjqo3Z0W#MxAxZbn+=Ke$4Obz${|MYsgdwtsGnI}pe1vNO1&Q$&5 zTqNHZt6vlL{?ETZcRuUa?_Rs|)Z3+(P9+&Oy6<50%;#p{-rfG~p7!q_Ysx=vuFz6F z%(bg5bidvDW^S9=9G=}3-V)!=`_^v=WO3T@nKf2dG^F*hV-m+PwWLcPTYmZ)Ik70Y zC_I)_{p-)rgk~8dz_!x)*slw=`zAbcxRS zH*EK2&wRAMq0{;NvaU+g^{Wl0`h;H!ep+I7c=zfaZqu&eo3xQxRuRdg{K2`+nTUwdzz ze8j%G z!s6Y!{CPKR*RAz+-c+H>Z{;>K@6q%Y#e~P6pP#d-$yc!ITs}Vv|lGHnJfOd#@aeYvt|+zmKmktFZ~6{5SD#hTFX(qLD`m7hivOAwO}^)1&h`-JOLak6eu8?^m1Q zX8dV_WTeZUg&K)$>;EeWruY0%=+t@S?Aqbb!r?-Y=rH%VbbpfYl{&TX#W#SZ6@#a% KpUXO@geCyf&_Fl< literal 11359 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 diff --git a/index.js b/index.js index 9e57647..7896b73 100644 --- a/index.js +++ b/index.js @@ -94,12 +94,6 @@ app.post('/api/update', async (req, res) => { app.post('/api/channels', async (req, res) => { let sort1 = req.body.sort1 ? req.body.sort1 : 'subscribers'; let sort2 = req.body.sort2 ? req.body.sort2 : 'name'; - if (sort1 == "") { - sort1 = 'subscribers'; - } - if (sort2 == "") { - sort2 = 'name'; - } let options = { sort1: sort1, sort2: sort2, @@ -107,7 +101,8 @@ app.post('/api/channels', async (req, res) => { order2: req.body.order2 ? req.body.order2 : 'desc', limit: 5, offset: req.body.offset ? req.body.offset : 0, - search: req.body.search ? req.body.search : '' + search: req.body.search ? req.body.search : '', + filters: req.body.filters ? req.body.filters : {} } res.send(await sendChannels(options)); }) diff --git a/js/main.js b/js/main.js index 1babbd0..9462bfc 100644 --- a/js/main.js +++ b/js/main.js @@ -5,13 +5,14 @@ let sort1 = 'subscribers'; let sort2 = 'subscribers'; let order1 = 'desc'; let order2 = 'desc'; +let filters = {}; async function getChannels() { fetch('/api/channels', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ offset: offset, sort1: sort1, sort2: sort2, search: document.getElementById('search').value, order1: order1, order2: order2 }) + body: JSON.stringify({ offset: offset, sort1: sort1, sort2: sort2, search: document.getElementById('search').value, order1: order1, order2: order2, filters: filters }) }) .then(res => res.json()) .then(data => { @@ -106,9 +107,7 @@ function search() { ids = []; channels = []; end = false; - if (localStorage.getItem('mode') == 'grid') { - document.querySelector('.channels').innerHTML = ''; - } else { + if (localStorage.getItem('mode') == 'list') { document.getElementById('table').innerHTML = ` Logo Name @@ -121,11 +120,43 @@ function search() { Views (24H Gain) Videos (24H Gain) `; + } else { + document.querySelector('.channels').innerHTML = ''; } sort1 = document.getElementById('sort1').value; sort2 = document.getElementById('sort2').value; order1 = document.getElementById('order1').value; order2 = document.getElementById('order2').value; + filters = {}; + let filter = document.querySelectorAll('.filter'); + for (let q = 0; q < filter.length; q++) { + let type = filter[q].querySelector('.filterType').value; + let operator = filter[q].querySelector('.filterOperator').value; + let value = filter[q].querySelector('.filterValue').value; + if (type == 'subscribers' || type == 'views' || type == 'videos' || type == 'subscribers24' || type == 'views24' || type == 'videos24') { + value = parseInt(value); + type = 'stats.' + type; + } else if (type == 'joined' || type == 'country') { + type = 'user.' + type; + } else { + type = 'gains.' + type; + } + if (type == 'stats.subscribers' || type == 'stats.views' || type == 'stats.videos' || type == 'gains.subscribers24' || type == 'gains.views24' || type == 'gains.videos24' || type == 'user.joined' || type == 'user.country') { + if (operator == '=') { + filters[type] = value; + } else if (operator == '>') { + filters[type] = { $gt: value }; + } else if (operator == '<') { + filters[type] = { $lt: value }; + } else if (operator == '>=') { + filters[type] = { $gte: value }; + } else if (operator == '<=') { + filters[type] = { $lte: value }; + } + } else if (type == 'country') { + filters[type] = value; + } + } document.getElementById('loader').style.display = "block"; searching = true; getChannels(); @@ -407,8 +438,34 @@ function updateUser() { }).catch(err => console.error(err)); } -changeTheme('init') -changeMode('init') +function addFilter() { + let filter = document.createElement('div'); + filter.classList.add('filter'); + filter.innerHTML = ` + + +` + document.querySelector('.filters').appendChild(filter); +} + +function removeFilter(that) { + that.parentElement.remove(); +} setInterval(() => { fetch('/api/totals', { @@ -423,4 +480,7 @@ setInterval(() => { document.getElementById('totalViews').innerHTML = data.totalViews document.getElementById('totalVideos').innerHTML = data.totalVideos }).catch(err => console.error(err)); -},5000) \ No newline at end of file +}, 5000) + +changeTheme('init') +changeMode('init') \ No newline at end of file diff --git a/views/index.ejs b/views/index.ejs index ab0fbfe..9a83906 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -84,6 +84,8 @@ + + +
+