mirror of
https://github.com/Drop-OSS/drop.git
synced 2025-11-16 09:41:13 +10:00
* First iteration on the new PieChart component * #128 Adds new admin home page * Fixes code after merging conflicts * Removes empty file * Uses real data for admin home page, and improves style * Reverts debugging code * Defines missing variable * Caches user stats data for admin home page * Typo * Styles improvements * Invalidates cache on signup/signin * Implements top 5 biggest games * Improves styling * Improves style * Using generateManifest to get the proper size * Reading data from cache * Removes unnecessary import * Improves caching mechanism for game sizes * Removes lint errors * Replaces piechart tooltip with colors in legend * Fixes caching * Fixes caching and slight improvement on pie chart colours * Fixes a few bugs related to caching * Fixes bug where app signin didn't refresh cache * feat: style improvements * fix: lint --------- Co-authored-by: DecDuck <declanahofmeyr@gmail.com>
This commit is contained in:
68
server/internal/userstats/index.ts
Normal file
68
server/internal/userstats/index.ts
Normal file
@ -0,0 +1,68 @@
|
||||
/*
|
||||
Handles managing collections
|
||||
*/
|
||||
|
||||
import cacheHandler from "../cache";
|
||||
import prisma from "../db/database";
|
||||
import { DateTime } from "luxon";
|
||||
|
||||
class UserStatsManager {
|
||||
// Caches the user's core library
|
||||
private userStatsCache = cacheHandler.createCache<number>("userStats");
|
||||
|
||||
async cacheUserSessions() {
|
||||
const activeSessions =
|
||||
(
|
||||
await prisma.client.groupBy({
|
||||
by: ["userId"],
|
||||
where: {
|
||||
id: { not: "system" },
|
||||
lastConnected: {
|
||||
gt: DateTime.now().minus({ months: 1 }).toISO(),
|
||||
},
|
||||
},
|
||||
})
|
||||
).length || 0;
|
||||
await this.userStatsCache.set("activeSessions", activeSessions);
|
||||
}
|
||||
|
||||
private async cacheUserCount() {
|
||||
const userCount =
|
||||
(await prisma.user.count({
|
||||
where: { id: { not: "system" } },
|
||||
})) || 0;
|
||||
await this.userStatsCache.set("userCount", userCount);
|
||||
}
|
||||
|
||||
async cacheUserStats() {
|
||||
await this.cacheUserSessions();
|
||||
await this.cacheUserCount();
|
||||
}
|
||||
|
||||
async getUserStats() {
|
||||
let activeSessions = await this.userStatsCache.get("activeSessions");
|
||||
let userCount = await this.userStatsCache.get("userCount");
|
||||
|
||||
if (activeSessions === null || userCount === null) {
|
||||
await this.cacheUserStats();
|
||||
activeSessions = (await this.userStatsCache.get("activeSessions")) || 0;
|
||||
userCount = (await this.userStatsCache.get("userCount")) || 0;
|
||||
}
|
||||
|
||||
return { activeSessions, userCount };
|
||||
}
|
||||
|
||||
async addUser() {
|
||||
const userCount = (await this.userStatsCache.get("userCount")) || 0;
|
||||
await this.userStatsCache.set("userCount", userCount + 1);
|
||||
}
|
||||
|
||||
async deleteUser() {
|
||||
const userCount = (await this.userStatsCache.get("userCount")) || 1;
|
||||
await this.userStatsCache.set("userCount", userCount - 1);
|
||||
await this.cacheUserSessions();
|
||||
}
|
||||
}
|
||||
|
||||
export const manager = new UserStatsManager();
|
||||
export default manager;
|
||||
Reference in New Issue
Block a user