feat: Add comprehensive system enhancements

- Add version display above storage consumption in admin sidebar
- Fix storage consumption to stick to bottom of window using flexbox
- Add user upload settings to events (allow uploads, category selection)
- Enhance disk space tab to comprehensive system status view
- Add localized date formatting for German/English language support
- Remove quick actions from dashboard for cleaner interface
- Create user photo upload functionality for galleries
- Add database migration for user upload settings
- Update all TypeScript types and interfaces

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
This commit is contained in:
2025-07-08 22:47:04 +02:00
co-authored by Claude
parent 69b56ed582
commit 12ba91952e
24 changed files with 1210 additions and 128 deletions
+4
View File
@@ -11,6 +11,8 @@ interface CreateEventData {
welcome_message?: string;
color_theme?: string;
expiration_days: number;
allow_user_uploads?: boolean;
upload_category_id?: number | null;
}
interface UpdateEventData {
@@ -23,6 +25,8 @@ interface UpdateEventData {
color_theme?: string;
expires_at?: string;
is_active?: boolean;
allow_user_uploads?: boolean;
upload_category_id?: number | null;
}
interface EventsListResponse {
+46
View File
@@ -36,6 +36,46 @@ export interface StorageInfo {
storage_limit: number;
}
export interface SystemStatus {
database: {
size: number;
tables: {
events: number;
photos: number;
admins: number;
categories: number;
activityLogs: number;
};
};
emailQueue: {
pending: number;
sent: number;
failed: number;
};
system: {
platform: string;
arch: string;
hostname: string;
uptime: number;
nodeVersion: string;
memory: {
total: number;
free: number;
used: number;
};
cpu: {
model: string;
cores: number;
};
};
services: {
fileWatcher: { status: string };
expirationChecker: { status: string };
emailProcessor: { status: string };
};
timestamp: string;
}
export const settingsService = {
// Get all settings
async getAllSettings(): Promise<Record<string, any>> {
@@ -124,6 +164,12 @@ export const settingsService = {
return response.data;
},
// Get system status
async getSystemStatus(): Promise<SystemStatus> {
const response = await api.get<SystemStatus>('/api/admin/system/status');
return response.data;
},
// Format branding settings from raw data
formatBrandingSettings(rawSettings: Record<string, any>): BrandingSettings {
return {