activity logging middleware

This commit is contained in:
yohlo
2025-09-30 10:47:02 -05:00
parent 8b1bbe213d
commit 63ea515a31
11 changed files with 311 additions and 16 deletions

View File

@@ -4,6 +4,7 @@ import { createTournamentsService } from "./services/tournaments";
import { createTeamsService } from "./services/teams";
import { createMatchesService } from "./services/matches";
import { createReactionsService } from "./services/reactions";
import { createActivitiesService } from "./services/activities";
import dotenv from 'dotenv';
dotenv.config();
@@ -35,6 +36,7 @@ class PocketBaseAdminClient {
Object.assign(this, createTournamentsService(this.pb));
Object.assign(this, createMatchesService(this.pb));
Object.assign(this, createReactionsService(this.pb));
Object.assign(this, createActivitiesService(this.pb));
});
}
@@ -54,7 +56,8 @@ interface AdminClient
ReturnType<typeof createTeamsService>,
ReturnType<typeof createTournamentsService>,
ReturnType<typeof createMatchesService>,
ReturnType<typeof createReactionsService> {
ReturnType<typeof createReactionsService>,
ReturnType<typeof createActivitiesService> {
authPromise: Promise<void>;
}

View File

@@ -0,0 +1,56 @@
import PocketBase from "pocketbase";
export interface Activity {
id: string;
name: string;
player?: string;
duration: number;
success: boolean;
error?: string;
arguments?: any;
user_agent?: string;
created: string;
updated: string;
}
export interface ActivityInput {
name: string;
player?: string;
duration: number;
success: boolean;
error?: string;
arguments?: any;
user_agent?: string;
}
export function createActivitiesService(pb: PocketBase) {
return {
async createActivity(data: ActivityInput): Promise<Activity> {
const result = await pb.collection("activities").create<Activity>(data);
return result;
},
async getRecentActivities(limit: number = 100): Promise<Activity[]> {
const result = await pb.collection("activities").getList<Activity>(1, limit, {
sort: "-created",
});
return result.items;
},
async getActivitiesByUser(userId: string, limit: number = 50): Promise<Activity[]> {
const result = await pb.collection("activities").getList<Activity>(1, limit, {
filter: `user_id = "${userId}"`,
sort: "-created",
});
return result.items;
},
async getActivitiesByFunction(functionName: string, limit: number = 50): Promise<Activity[]> {
const result = await pb.collection("activities").getList<Activity>(1, limit, {
filter: `function_name = "${functionName}"`,
sort: "-created",
});
return result.items;
},
};
}