Allow filtering for requested items by status

This commit is contained in:
2019-06-28 23:32:11 +02:00
parent 071fd54825
commit 3845000b3f

View File

@@ -13,7 +13,9 @@ class RequestRepository {
this.queries = { this.queries = {
add: 'insert into requests (id,title,year,poster_path,background_path,requested_by,ip,user_agent,type) values(?,?,?,?,?,?,?,?,?)', add: 'insert into requests (id,title,year,poster_path,background_path,requested_by,ip,user_agent,type) values(?,?,?,?,?,?,?,?,?)',
fetchAll: 'select * from requests where status != "downloaded" order by date desc LIMIT 25 OFFSET ?*25-25', fetchAll: 'select * from requests where status != "downloaded" order by date desc LIMIT 25 OFFSET ?*25-25',
fetchAllFilteredStatus: 'select * from requests where status = ? order by date desc LIMIT 25 offset ?*25-25',
totalRequests: 'select count(*) as totalRequests from requests where status != "downloaded"', totalRequests: 'select count(*) as totalRequests from requests where status != "downloaded"',
totalRequestsFilteredStatus: 'select count(*) as totalRequests from requests where status = ?',
fetchAllSort: `select id, type from request order by ? ?`, fetchAllSort: `select id, type from request order by ? ?`,
fetchAllFilter: `select id, type from request where ? is "?"`, fetchAllFilter: `select id, type from request where ? is "?"`,
fetchAllQuery: `select id, type from request where title like "%?%" or year like "%?%"`, fetchAllQuery: `select id, type from request where title like "%?%" or year like "%?%"`,
@@ -104,7 +106,6 @@ class RequestRepository {
* @returns {Promise} * @returns {Promise}
*/ */
getRequestByIdAndType(id, type) { getRequestByIdAndType(id, type) {
console.log('id & type', id, type)
return Promise.resolve() return Promise.resolve()
.then(() => this.database.get(this.queries.read, [id, type])) .then(() => this.database.get(this.queries.read, [id, type]))
.then(row => { .then(row => {
@@ -121,15 +122,27 @@ class RequestRepository {
* @param {String} query param to filter result on. Filters on title and year * @param {String} query param to filter result on. Filters on title and year
* @returns {Promise} * @returns {Promise}
*/ */
fetchAll(page, sort_by=undefined, sort_direction='asc', filter_param=undefined, query=undefined) { fetchAll(page=1, sort_by=undefined, sort_direction='asc', filter=undefined, query=undefined) {
// TODO implemented sort and filter // TODO implemented sort and filter
// console.log('hit', sort_by, sort_direction, filter_param, query) let fetchQuery = this.queries.fetchAll
let fetchTotalResults = this.queries.totalRequests
let fetchParams = [page]
if (filter && (filter === 'downloading' || filter === 'downloaded' || filter === 'requested')) {
console.log('tes')
fetchQuery = this.queries.fetchAllFilteredStatus
fetchTotalResults = this.queries.totalRequestsFilteredStatus
fetchParams = [filter, page]
} else {
filter = undefined
}
return Promise.resolve() return Promise.resolve()
.then((dbQuery) => this.database.all(this.queries.fetchAll, page)) .then((dbQuery) => this.database.all(fetchQuery, fetchParams))
.then(async (rows) => { .then(async (rows) => {
const sqliteResponse = await this.database.get(this.queries.totalRequests) const sqliteResponse = await this.database.get(fetchTotalResults, filter ? filter : undefined)
const totalRequests = sqliteResponse['totalRequests'] const totalRequests = sqliteResponse['totalRequests']
const totalPages = Math.ceil(totalRequests / 25) const totalPages = Math.ceil(totalRequests / 26)
return [ rows.map(item => { item.poster = item.poster_path; return item }), totalPages ] return [ rows.map(item => { item.poster = item.poster_path; return item }), totalPages ]
return Promise.all(this.mapToTmdbByType(rows)) return Promise.all(this.mapToTmdbByType(rows))