Skip to content

Commit

Permalink
added filters
Browse files Browse the repository at this point in the history
  • Loading branch information
mgcountss committed Jul 26, 2023
1 parent 4d8592c commit ce58940
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 75 deletions.
26 changes: 17 additions & 9 deletions functions/addUser.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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
}
}
Expand Down
68 changes: 22 additions & 46 deletions functions/db.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) => {
Expand Down
12 changes: 6 additions & 6 deletions functions/updateUser.js
Original file line number Diff line number Diff line change
Expand Up @@ -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: {
Expand Down Expand Up @@ -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: {
Expand Down
Binary file modified images/avatar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
9 changes: 2 additions & 7 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,20 +94,15 @@ 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,
order1: req.body.order1 ? req.body.order1 : 'desc',
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));
})
Expand Down
74 changes: 67 additions & 7 deletions js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 => {
Expand Down Expand Up @@ -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 = `<tr>
<th>Logo</th>
<th>Name</th>
Expand All @@ -121,11 +120,43 @@ function search() {
<th>Views (24H Gain)</th>
<th>Videos (24H Gain)</th>
</tr>`;
} 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();
Expand Down Expand Up @@ -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 = `<select class="filterType" onchange="changeFilter(this)">
<option value="subscribers">Subscribers</option>
<option value="views">Views</option>
<option value="videos">Videos</option>
<option value="country">Country</option>
<option value="joined">Joined (year, month, day)</option>
<option value="subscribers24">Subscribers (24H Gain)</option>
<option value="views24">Views (24H Gain)</option>
<option value="videos24">Videos (24H Gain)</option>
</select>
<select class="filterOperator">
<option value="=">=</option>
<option value=">">></option>
<option value="<"><</option>
<option value=">=">>=</option>
<option value="<="><=</option>
</select>
<input type="text" class="filterValue" placeholder="Value">
<button class="removeFilter" onclick="removeFilter(this)">X</button>`
document.querySelector('.filters').appendChild(filter);
}

function removeFilter(that) {
that.parentElement.remove();
}

setInterval(() => {
fetch('/api/totals', {
Expand All @@ -423,4 +480,7 @@ setInterval(() => {
document.getElementById('totalViews').innerHTML = data.totalViews
document.getElementById('totalVideos').innerHTML = data.totalVideos
}).catch(err => console.error(err));
},5000)
}, 5000)

changeTheme('init')
changeMode('init')
6 changes: 6 additions & 0 deletions views/index.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@
<option value="subscribers24">24 Hour Gain (Subscribers)</option>
<option value="views24">24 Hour Gain (Views)</option>
<option value="videos24">24 Hour Gain (Videos)</option>
<option value="name">Name</option>
<option value="description">Description</option>
</select>
<select id="order1" autocomplete="off">
<option value="desc">Descending</option>
Expand All @@ -100,11 +102,15 @@
<option value="subscribers24">24 Hour Gain (Subscribers)</option>
<option value="views24">24 Hour Gain (Views)</option>
<option value="videos24">24 Hour Gain (Videos)</option>
<option value="name">Name</option>
<option value="description">Description</option>
</select>
<select id="order2" autocomplete="off">
<option value="desc">Descending</option>
<option value="asc">Ascending</option>
</select>
<div class="filters"></div>
<button onclick="addFilter()" class="addFilter">Add Filter</button>
<button onclick="search()" class="search">Search</button>
<button style="float: right;" onclick="settings()">Settings</button>
</div>
Expand Down

0 comments on commit ce58940

Please sign in to comment.