feat: activity log system

This commit is contained in:
2026-03-23 21:05:37 +01:00
parent 50d8662904
commit c7ef3e9d27
11 changed files with 408 additions and 4 deletions

View File

@@ -0,0 +1,52 @@
import * as z from 'zod';
export const actionTypeSchema = z.enum([
'config_update',
'server_start',
'server_stop',
'server_restart',
'leaderboard_update'
]);
export type ActionType = z.infer<typeof actionTypeSchema>;
export const activityLogSchema = z.object({
id: z.string(),
serverId: z.string(),
userId: z.string(),
username: z.string(),
action: actionTypeSchema,
details: z.string(),
createdAt: z.string()
});
export type ActivityLog = z.infer<typeof activityLogSchema>;
export const lastActivityInfoSchema = z.object({
updatedAt: z.string(),
username: z.string(),
action: actionTypeSchema
});
export type LastActivityInfo = z.infer<typeof lastActivityInfoSchema>;
export const activityLogFilterSchema = z.object({
page: z.number().optional(),
page_size: z.number().optional(),
sort_by: z.string().optional(),
sort_desc: z.boolean().optional(),
user_id: z.string().optional(),
action: actionTypeSchema.optional(),
start_date: z.string().optional(),
end_date: z.string().optional()
});
export type ActivityLogFilter = z.infer<typeof activityLogFilterSchema>;
export const ACTION_TYPE_LABELS: Record<ActionType, string> = {
config_update: 'Config Update',
server_start: 'Server Start',
server_stop: 'Server Stop',
server_restart: 'Server Restart',
leaderboard_update: 'Leaderboard Update'
};

View File

@@ -16,7 +16,8 @@ export enum ServerTab {
event = 'event',
eventRules = 'eventRules',
settings = 'settings',
leaderboard = 'leaderboard'
leaderboard = 'leaderboard',
activityLog = 'activityLog'
}
export const serverTabSchema = z.enum(ServerTab);

View File

@@ -4,3 +4,4 @@ export * from './config';
export * from './statistics';
export * from './lookups';
export * from './leaderboard';
export * from './activityLog';

View File

@@ -1,4 +1,5 @@
import * as z from 'zod';
import { lastActivityInfoSchema } from './activityLog';
export enum ServiceStatus {
Unknown,
@@ -57,7 +58,8 @@ export const serverSchema = z.object({
id: z.uuid(),
name: z.string().min(1),
status: z.enum(ServiceStatus),
state: stateSchema.optional().nullable()
state: stateSchema.optional().nullable(),
lastActivity: lastActivityInfoSchema.optional().nullable()
});
export type Server = z.infer<typeof serverSchema>;