36 lines
1.6 KiB
JavaScript
36 lines
1.6 KiB
JavaScript
const { Sequelize, QueryTypes } = require('sequelize');
|
|
const { Type } = require('../../addon/lib/types');
|
|
|
|
const DATABASE_URI = process.env.DATABASE_URI;
|
|
|
|
const database = new Sequelize(DATABASE_URI, { logging: false });
|
|
|
|
async function getIds(providers, type, startDate, endDate) {
|
|
const idName = type === Type.ANIME ? 'kitsuId' : 'imdbId';
|
|
const episodeCondition = type === Type.SERIES
|
|
? 'AND files."imdbSeason" IS NOT NULL AND files."imdbEpisode" IS NOT NULL'
|
|
: '';
|
|
const dateCondition = startDate && endDate
|
|
? `AND "uploadDate" BETWEEN '${startDate}' AND '${endDate}'`
|
|
: '';
|
|
const providersCondition = providers && providers.length
|
|
? `AND provider in (${providers.map(it => `'${it}'`).join(',')})`
|
|
: '';
|
|
const titleCondition = type === Type.MOVIE
|
|
? 'AND torrents.title NOT LIKE \'%[Erotic]%\''
|
|
: '';
|
|
const sortCondition = type === Type.MOVIE ? 'sum(torrents.seeders)' : 'max(torrents.seeders)';
|
|
const query = `SELECT files."${idName}"
|
|
FROM (SELECT torrents."infoHash", torrents.seeders FROM torrents
|
|
WHERE seeders > 0 AND type = '${type}' ${providersCondition} ${dateCondition} ${titleCondition}
|
|
) as torrents
|
|
JOIN files ON torrents."infoHash" = files."infoHash"
|
|
WHERE files."${idName}" IS NOT NULL ${episodeCondition}
|
|
GROUP BY files."${idName}"
|
|
ORDER BY ${sortCondition} DESC
|
|
LIMIT 5000`
|
|
const results = await database.query(query, { type: QueryTypes.SELECT });
|
|
return results.map(result => `${result.imdbId || result.kitsuId}`);
|
|
}
|
|
|
|
module.exports = { getIds }; |