59 lines
1.9 KiB
JavaScript
59 lines
1.9 KiB
JavaScript
/*
|
|
* timers and cron for account related actions
|
|
* @flow
|
|
*/
|
|
|
|
import Sequelize from 'sequelize';
|
|
import Model from '../data/sequelize';
|
|
import RegUser from '../data/models/RegUser';
|
|
import logger from './logger';
|
|
|
|
import { MINUTE } from './constants';
|
|
import { DailyCron } from '../utils/cron';
|
|
|
|
class Ranks {
|
|
ranks: Array;
|
|
|
|
constructor() {
|
|
this.updateRanking = this.updateRanking.bind(this);
|
|
this.resetDailyRanking = this.resetDailyRanking.bind(this);
|
|
|
|
this.ranks = {};
|
|
setInterval(this.updateRanking, 5 * MINUTE);
|
|
DailyCron.hook(this.resetDailyRanking);
|
|
}
|
|
|
|
async updateRanking() {
|
|
// recalculate ranking column
|
|
await Model.query('SET @r=0; UPDATE Users SET ranking= @r:= (@r + 1) WHERE NOT id= 18 ORDER BY totalPixels DESC;');
|
|
await Model.query('SET @r=0; UPDATE Users SET dailyRanking= @r:= (@r + 1) WHERE NOT id= 18 ORDER BY dailyTotalPixels DESC;');
|
|
// populate dictionaries
|
|
const ranking = await RegUser.findAll({
|
|
attributes: ['name', 'totalPixels', 'ranking', 'dailyRanking', 'dailyTotalPixels', [Sequelize.fn('DATEDIFF', Sequelize.literal('CURRENT_TIMESTAMP'), Sequelize.col('createdAt')), 'age']],
|
|
limit: 100,
|
|
where: { id: { [Sequelize.Op.notIn]: [18, 51] } },
|
|
order: ['ranking'],
|
|
raw: true,
|
|
});
|
|
const dailyRanking = await RegUser.findAll({
|
|
attributes: ['name', 'totalPixels', 'ranking', 'dailyRanking', 'dailyTotalPixels', [Sequelize.fn('DATEDIFF', Sequelize.literal('CURRENT_TIMESTAMP'), Sequelize.col('createdAt')), 'age']],
|
|
limit: 100,
|
|
where: { id: { [Sequelize.Op.notIn]: [18, 51] } },
|
|
order: ['dailyRanking'],
|
|
raw: true,
|
|
});
|
|
this.ranks.ranking = ranking;
|
|
this.ranks.dailyRanking = dailyRanking;
|
|
}
|
|
|
|
async resetDailyRanking() {
|
|
logger.info('Resetting Daily Ranking');
|
|
await RegUser.update({ dailyTotalPixels: 0 }, { where: {} });
|
|
await this.updateRanking();
|
|
}
|
|
}
|
|
|
|
|
|
const rankings = new Ranks();
|
|
export default rankings;
|