54 lines
1.9 KiB
TypeScript
54 lines
1.9 KiB
TypeScript
|
import * as twitch from "../twitch";
|
||
|
import { log, LogLevel } from "../logging"
|
||
|
import db from "../db";
|
||
|
|
||
|
export async function processFollows(streamer: twitch.StreamerUserIdTokenPair) {
|
||
|
var dbconn = await db.connect();
|
||
|
try {
|
||
|
await dbconn.query('BEGIN');
|
||
|
await dbconn.query("DELETE FROM follows");
|
||
|
// Insert the streamer as a follower
|
||
|
await dbconn.query({text: "INSERT INTO follows (userid) VALUES ($1)", values: [streamer.userid]})
|
||
|
var response = await twitch.streamerApiRequest(streamer,
|
||
|
`/users/follows?to_id=${streamer.userid}&first=100`);
|
||
|
log(LogLevel.DEBUG,"Follows API response:")
|
||
|
log(LogLevel.DEBUG,JSON.stringify(response,null,2));
|
||
|
while (true) {
|
||
|
var insertFollowQuery = "INSERT INTO follows (userid) VALUES ";
|
||
|
var followRow = 0; // Used for $1, $2, etc. in parameterized query
|
||
|
var followsArray: number[] = [];
|
||
|
if (Object.keys(response.data).length > 0) {
|
||
|
for (var follow of response.data) {
|
||
|
followRow++;
|
||
|
insertFollowQuery += `($${followRow}), `;
|
||
|
followsArray.push(follow.from_id as number);
|
||
|
}
|
||
|
insertFollowQuery = insertFollowQuery.slice(0,-2); // Cut last `, ` off of the end
|
||
|
var followQueryConfig = {
|
||
|
text: insertFollowQuery,
|
||
|
values: followsArray
|
||
|
};
|
||
|
log(LogLevel.DEBUG,"followQueryConfig object:")
|
||
|
log(LogLevel.DEBUG,JSON.stringify(followQueryConfig,null,2))
|
||
|
await dbconn.query(followQueryConfig);
|
||
|
}
|
||
|
if (response.pagination.cursor) {
|
||
|
response = await twitch.streamerApiRequest(streamer,
|
||
|
`/users/follows?to_id=${streamer.userid}&after=${response.pagination.cursor}&first=100`);
|
||
|
log(LogLevel.DEBUG,"Follow API response:");
|
||
|
log(LogLevel.DEBUG,JSON.stringify(response,null,2));
|
||
|
} else {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
await dbconn.query("CALL update_scores()");
|
||
|
await dbconn.query('COMMIT');
|
||
|
} catch (e) {
|
||
|
log(LogLevel.ERROR,"cronjobs.processFollows: Exception thrown; rolling back");
|
||
|
await dbconn.query('ROLLBACK');
|
||
|
throw(e);
|
||
|
} finally {
|
||
|
await dbconn.release();
|
||
|
}
|
||
|
}
|