Add sorting to API
parent
b968f054d5
commit
28d5ce09dd
43
src/app.ts
43
src/app.ts
|
@ -46,16 +46,34 @@ app.get("/api/getRequests", async (request, response) => {
|
||||||
await validateApiToken(request.session);
|
await validateApiToken(request.session);
|
||||||
var requestCount = ( request.query.count ? parseInt(request.query.count as string, 10) : 5 );
|
var requestCount = ( request.query.count ? parseInt(request.query.count as string, 10) : 5 );
|
||||||
var requestOffset = ( request.query.offset ? parseInt(request.query.offset as string, 10) : 0 );
|
var requestOffset = ( request.query.offset ? parseInt(request.query.offset as string, 10) : 0 );
|
||||||
|
var sortDirection = ( request.query.sortDirection == "asc" ? "ASC" : "DESC" );
|
||||||
|
switch (request.query.sort) {
|
||||||
|
case undefined:
|
||||||
|
case "score":
|
||||||
|
var requestSort = `score ${sortDirection}, reqTimestamp ASC`;
|
||||||
|
break;
|
||||||
|
case "timestamp":
|
||||||
|
var requestSort = `reqTimestamp ${sortDirection}`;
|
||||||
|
break;
|
||||||
|
case "alpha":
|
||||||
|
var requestSort = `title ${sortDirection}`
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
response.status(400);
|
||||||
|
response.send("Invalid sort");
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
console.log('foo')
|
||||||
var requestsTotal = await requests.getRequestsTotal();
|
var requestsTotal = await requests.getRequestsTotal();
|
||||||
if (request.session.user) {
|
if (request.session.user) {
|
||||||
requests.getRequestsVoted(requestCount,requestOffset,request.session.user.id)
|
requests.getRequestsVoted(requestCount,requestOffset,requestSort,request.session.user.id)
|
||||||
.then((val: Array<any>) => response.send({
|
.then((val: Array<any>) => response.send({
|
||||||
total: requestsTotal,
|
total: requestsTotal,
|
||||||
requests: val
|
requests: val
|
||||||
}))
|
}))
|
||||||
.catch((e: any) => errorHandler(request,response,e));
|
.catch((e: any) => errorHandler(request,response,e));
|
||||||
} else {
|
} else {
|
||||||
requests.getRequests(requestCount,requestOffset)
|
requests.getRequests(requestCount,requestOffset,requestSort)
|
||||||
.then((val: Array<any>) => response.send({
|
.then((val: Array<any>) => response.send({
|
||||||
total: requestsTotal,
|
total: requestsTotal,
|
||||||
requests: val
|
requests: val
|
||||||
|
@ -69,16 +87,33 @@ app.get("/api/getAllRequests", async (request, response) => {
|
||||||
await validateApiToken(request.session);
|
await validateApiToken(request.session);
|
||||||
var requestCount = ( request.query.count ? parseInt(request.query.count as string, 10) : 5 );
|
var requestCount = ( request.query.count ? parseInt(request.query.count as string, 10) : 5 );
|
||||||
var requestOffset = ( request.query.offset ? parseInt(request.query.offset as string, 10) : 0 );
|
var requestOffset = ( request.query.offset ? parseInt(request.query.offset as string, 10) : 0 );
|
||||||
|
var sortDirection = ( request.query.sortDirection == "asc" ? "ASC" : "DESC" );
|
||||||
|
switch (request.query.sort) {
|
||||||
|
case undefined:
|
||||||
|
case "score":
|
||||||
|
var requestSort = `score ${sortDirection}, reqTimestamp ASC`;
|
||||||
|
break;
|
||||||
|
case "timestamp":
|
||||||
|
var requestSort = `reqTimestamp ${sortDirection}`;
|
||||||
|
break;
|
||||||
|
case "alpha":
|
||||||
|
var requestSort = `title ${sortDirection}`
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
response.status(400);
|
||||||
|
response.send("Invalid sort");
|
||||||
|
return;
|
||||||
|
}
|
||||||
var requestsTotal = await requests.getAllRequestsTotal();
|
var requestsTotal = await requests.getAllRequestsTotal();
|
||||||
if (request.session.user) {
|
if (request.session.user) {
|
||||||
requests.getAllRequestsVoted(requestCount,requestOffset,request.session.user.id)
|
requests.getAllRequestsVoted(requestCount,requestOffset,requestSort,request.session.user.id)
|
||||||
.then((val: Array<any>) => response.send({
|
.then((val: Array<any>) => response.send({
|
||||||
total: requestsTotal,
|
total: requestsTotal,
|
||||||
requests: val
|
requests: val
|
||||||
}))
|
}))
|
||||||
.catch((e: any) => errorHandler(request,response,e));
|
.catch((e: any) => errorHandler(request,response,e));
|
||||||
} else {
|
} else {
|
||||||
requests.getAllRequests(requestCount,requestOffset)
|
requests.getAllRequests(requestCount,requestOffset,requestSort)
|
||||||
.then((val: Array<any>) => response.send({
|
.then((val: Array<any>) => response.send({
|
||||||
total: requestsTotal,
|
total: requestsTotal,
|
||||||
requests: val
|
requests: val
|
||||||
|
|
|
@ -52,39 +52,12 @@ export const updateVotePoints = {
|
||||||
text: "CALL update_vote_points($1,$2,$3)"
|
text: "CALL update_vote_points($1,$2,$3)"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Request-related queries
|
|
||||||
export const getRequests = {
|
|
||||||
name: "getRequests",
|
|
||||||
text: "SELECT * FROM requests_vw \
|
|
||||||
JOIN states ON requests_vw.state = states.state WHERE active \
|
|
||||||
ORDER BY score DESC, reqTimestamp ASC LIMIT $1 OFFSET $2"
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getRequestsVoted = {
|
|
||||||
name: "getRequestsVoted",
|
|
||||||
text: "SELECT * FROM get_requests_voted($3) \
|
|
||||||
JOIN states ON get_requests_voted.state = states.state WHERE active \
|
|
||||||
ORDER BY score DESC, reqTimestamp ASC LIMIT $1 OFFSET $2"
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getRequestsTotal = {
|
export const getRequestsTotal = {
|
||||||
name: "getRequestsTotal",
|
name: "getRequestsTotal",
|
||||||
text: "SELECT COUNT(*) FROM requests_vw \
|
text: "SELECT COUNT(*) FROM requests_vw \
|
||||||
JOIN states ON requests_vw.state = states.state WHERE active"
|
JOIN states ON requests_vw.state = states.state WHERE active"
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getAllRequests = {
|
|
||||||
name: "getAllRequests",
|
|
||||||
text: "SELECT * FROM requests_vw \
|
|
||||||
ORDER BY score DESC, reqTimestamp ASC LIMIT $1 OFFSET $2"
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getAllRequestsVoted = {
|
|
||||||
name: "getAllRequestsVoted",
|
|
||||||
text: "SELECT * FROM get_requests_voted($3) \
|
|
||||||
ORDER BY score DESC, reqTimestamp ASC LIMIT $1 OFFSET $2"
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getAllRequestsTotal = {
|
export const getAllRequestsTotal = {
|
||||||
name: "getAllRequestsTotal",
|
name: "getAllRequestsTotal",
|
||||||
text: "SELECT COUNT(*) FROM requests_vw"
|
text: "SELECT COUNT(*) FROM requests_vw"
|
||||||
|
|
|
@ -4,14 +4,24 @@ import { log, LogLevel } from "./logging"
|
||||||
import pg from "pg";
|
import pg from "pg";
|
||||||
import db from "./db";
|
import db from "./db";
|
||||||
|
|
||||||
export async function getRequests(count: number, offset: number) {
|
export async function getRequests(count: number, offset: number, sort: string) {
|
||||||
var query = Object.assign(queries.getRequests, { values: [count,offset] });
|
var query = {
|
||||||
|
text: "SELECT * FROM requests_vw \
|
||||||
|
JOIN states ON requests_vw.state = states.state WHERE active \
|
||||||
|
ORDER BY " + sort + " LIMIT $1 OFFSET $2",
|
||||||
|
values: [count,offset]
|
||||||
|
};
|
||||||
return db.query(query)
|
return db.query(query)
|
||||||
.then((result: pg.QueryResult) => result.rows);
|
.then((result: pg.QueryResult) => result.rows);
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function getRequestsVoted(count: number, offset: number, user: number) {
|
export async function getRequestsVoted(count: number, offset: number, sort: string, user: number) {
|
||||||
var query = Object.assign(queries.getRequestsVoted, { values: [count,offset,user] });
|
var query = {
|
||||||
|
text: "SELECT * FROM get_requests_voted($3) \
|
||||||
|
JOIN states ON get_requests_voted.state = states.state WHERE active \
|
||||||
|
ORDER BY " + sort + " LIMIT $1 OFFSET $2",
|
||||||
|
values: [count,offset,user]
|
||||||
|
};
|
||||||
return db.query(query)
|
return db.query(query)
|
||||||
.then((result: pg.QueryResult) => result.rows);
|
.then((result: pg.QueryResult) => result.rows);
|
||||||
};
|
};
|
||||||
|
@ -21,14 +31,22 @@ export async function getRequestsTotal() {
|
||||||
.then((result: pg.QueryResult) => result.rows[0]["count"]);
|
.then((result: pg.QueryResult) => result.rows[0]["count"]);
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function getAllRequests(count: number, offset: number) {
|
export async function getAllRequests(count: number, offset: number, sort: string) {
|
||||||
var query = Object.assign(queries.getAllRequests, { values: [count,offset] });
|
var query = {
|
||||||
|
text: "SELECT * FROM requests_vw \
|
||||||
|
ORDER BY " + sort + " LIMIT $1 OFFSET $2",
|
||||||
|
values: [count,offset]
|
||||||
|
};
|
||||||
return db.query(query)
|
return db.query(query)
|
||||||
.then((result: pg.QueryResult) => result.rows);
|
.then((result: pg.QueryResult) => result.rows);
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function getAllRequestsVoted(count: number, offset: number, user: number) {
|
export async function getAllRequestsVoted(count: number, offset: number, sort: string, user: number) {
|
||||||
var query = Object.assign(queries.getAllRequestsVoted, { values: [count,offset,user] });
|
var query = {
|
||||||
|
text: "SELECT * FROM get_requests_voted($3) \
|
||||||
|
ORDER BY " + sort + " LIMIT $1 OFFSET $2",
|
||||||
|
values: [count,offset,user]
|
||||||
|
};
|
||||||
return db.query(query)
|
return db.query(query)
|
||||||
.then((result: pg.QueryResult) => result.rows);
|
.then((result: pg.QueryResult) => result.rows);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue