const { Sequelize } = require('sequelize'); const Op = Sequelize.Op; const DATABASE_URI = process.env.DATABASE_URI; const database = new Sequelize(DATABASE_URI, { logging: false }); const Torrent = database.define('torrent', { infoHash: { type: Sequelize.STRING(64), primaryKey: true }, provider: { type: Sequelize.STRING(32), allowNull: false }, torrentId: { type: Sequelize.STRING(128) }, title: { type: Sequelize.STRING(256), allowNull: false }, size: { type: Sequelize.BIGINT }, type: { type: Sequelize.STRING(16), allowNull: false }, uploadDate: { type: Sequelize.DATE, allowNull: false }, seeders: { type: Sequelize.SMALLINT }, trackers: { type: Sequelize.STRING(4096) }, languages: { type: Sequelize.STRING(256) }, resolution: { type: Sequelize.STRING(16) } } ); const File = database.define('file', { id: { type: Sequelize.BIGINT, autoIncrement: true, primaryKey: true }, infoHash: { type: Sequelize.STRING(64), allowNull: false, references: { model: Torrent, key: 'infoHash' }, onDelete: 'CASCADE' }, fileIndex: { type: Sequelize.INTEGER }, title: { type: Sequelize.STRING(256), allowNull: false }, size: { type: Sequelize.BIGINT }, imdbId: { type: Sequelize.STRING(32) }, imdbSeason: { type: Sequelize.INTEGER }, imdbEpisode: { type: Sequelize.INTEGER }, kitsuId: { type: Sequelize.INTEGER }, kitsuEpisode: { type: Sequelize.INTEGER } }, ); Torrent.hasMany(File, { foreignKey: 'infoHash', constraints: false }); File.belongsTo(Torrent, { foreignKey: 'infoHash', constraints: false }); function getImdbIdMovieEntries(imdbId) { return File.findAll({ where: { imdbId: { [Op.eq]: imdbId } }, include: [Torrent], limit: 500 }); } function getImdbIdSeriesEntries(imdbId, season, episode) { return File.findAll({ where: { imdbId: { [Op.eq]: imdbId }, imdbSeason: { [Op.eq]: season }, imdbEpisode: { [Op.eq]: episode } }, include: [Torrent], limit: 500 }); } function getKitsuIdMovieEntries(kitsuId) { return File.findAll({ where: { kitsuId: { [Op.eq]: kitsuId } }, include: [Torrent], limit: 500 }); } function getKitsuIdSeriesEntries(kitsuId, episode) { return File.findAll({ where: { kitsuId: { [Op.eq]: kitsuId }, kitsuEpisode: { [Op.eq]: episode } }, include: [Torrent], limit: 500 }); } module.exports = { getImdbIdMovieEntries, getImdbIdSeriesEntries, getKitsuIdMovieEntries, getKitsuIdSeriesEntries };