Redesign database and implement voting

This commit is contained in:
Dessa Simpson 2020-08-07 21:32:06 -07:00
parent a0b65c7d5b
commit 80e9bc1bde
16 changed files with 376 additions and 41 deletions

View file

@ -23,15 +23,31 @@ app.use(session({
// API
app.get("/api/getRequests", async (request, response) => {
if (!request.session) {
throw new Error ("Missing request.session")
}
var requestCount = ( request.query.count ? parseInt(request.query.count as string, 10) : 5 );
requests.getRequests(requestCount).then((val: Array<any>) => response.send(val))
.catch((e: any) => errorHandler(request,response,e));
if (request.session.user) {
requests.getRequestsVoted(requestCount,request.session.user.id).then((val: Array<any>) => response.send(val))
.catch((e: any) => errorHandler(request,response,e));
} else {
requests.getRequests(requestCount).then((val: Array<any>) => response.send(val))
.catch((e: any) => errorHandler(request,response,e));
}
});
app.get("/api/getAllRequests", async (request, response) => {
if (!request.session) {
throw new Error ("Missing request.session")
}
var requestCount = ( request.query.count ? parseInt(request.query.count as string, 10) : 5 );
requests.getAllRequests(requestCount).then((val: Array<any>) => response.send(val))
.catch((e: any) => errorHandler(request,response,e));
if (request.session.user) {
requests.getAllRequestsVoted(requestCount,request.session.user.id).then((val: Array<any>) => response.send(val))
.catch((e: any) => errorHandler(request,response,e));
} else {
requests.getAllRequests(requestCount).then((val: Array<any>) => response.send(val))
.catch((e: any) => errorHandler(request,response,e));
}
});
app.post("/api/addRequest", async (request, response) => {
@ -44,10 +60,10 @@ app.post("/api/addRequest", async (request, response) => {
if (!request.body.url) {
response.status(400);
response.send("Missing url");
return
return;
}
var url = request.body.url as string;
var requester = request.session.user.display_name;
var requester = request.session.user.id;
requests.addRequest(url,requester).then((val: [number,string]) => {
response.status(val[0]);
response.send(val[1]);
@ -60,12 +76,12 @@ app.post("/api/updateRequestState", async (request, response) => {
if (!request.body.url) {
response.status(400);
response.send("Missing url");
return
return;
}
if (!request.body.state) {
response.status(400);
response.send("Missing scoreDiff");
return
return;
}
var url = request.body.url as string;
var state = request.body.state as string;
@ -81,12 +97,12 @@ app.post("/api/updateRequestScore", async (request, response) => {
if (!request.body.url) {
response.status(400);
response.send("Missing url");
return
return;
}
if (!request.body.scoreDiff) {
response.status(400);
response.send("Missing scoreDiff");
return
return;
}
var url = request.body.url as string;
var scoreDiff = parseInt(request.body.scoreDiff as string, 10);
@ -102,7 +118,7 @@ app.post("/api/deleteRequest", async (request, response) => {
if (!request.body.url) {
response.status(400);
response.send("Missing url");
return
return;
}
var url = request.body.url as string;
requests.deleteRequest(url).then((val: [number,string]) => {
@ -112,6 +128,48 @@ app.post("/api/deleteRequest", async (request, response) => {
.catch((e: any) => errorHandler(request,response,e));
});
app.post("/api/addVote", async (request,response) => {
response.type('text/plain');
if (!request.session || !request.session.user) {
response.status(401);
response.send("Must be logged in");
return;
}
if (!request.body.url) {
response.status(400);
response.send("Missing url");
return;
}
var url = request.body.url as string;
var user = request.session.user.id;
requests.addVote(url,user).then((val: [number,string]) => {
response.status(val[0]);
response.send(val[1]);
})
.catch((e: any) => errorHandler(request,response,e));
});
app.post("/api/deleteVote", async (request,response) => {
response.type('text/plain');
if (!request.session || !request.session.user) {
response.status(401);
response.send("Must be logged in");
return;
}
if (!request.body.url) {
response.status(400);
response.send("Missing url");
return;
}
var url = request.body.url as string;
var user = request.session.user.id;
requests.deleteVote(url,user).then((val: [number,string]) => {
response.status(val[0]);
response.send(val[1]);
})
.catch((e: any) => errorHandler(request,response,e));
});
// Twitch callback
app.get("/callback", async (request, response) => {
if (request.query.error) {
@ -131,6 +189,14 @@ app.get("/callback", async (request, response) => {
if (typeof tokenResponse == 'undefined') throw new Error('tokenResponse is undefined');
request.session.tokenpair = { access_token: tokenResponse.access_token, refresh_token: tokenResponse.refresh_token };
request.session.user = (await twitch.apiRequest(request.session.tokenpair,"GET","/users")).data[0];
const updateUserQuery = {
name: "updateUser",
text: "INSERT INTO users (userid,displayName,imageUrl) VALUES ($1,$2,$3)\
ON CONFLICT (userid) DO UPDATE SET displayName = $2, imageUrl = $3"
}
var query = Object.assign(updateUserQuery,{ values: [request.session.user.id,request.session.user.display_name,request.session.user.profile_image_url] });
db.query(query);
response.redirect(307, '/');
});