import { Controller, Get, Param, Post, Query, Req, UseGuards } from '@nestjs/common'; import { auditListQuerySchema, type AuditListQuery, type AuditListView, type JobTriggerResult, type StorageOverviewView, type SystemBackupView, type SystemJobView, } from '@dorfteich/shared'; import { AuthedRequest } from '../auth/auth.guard'; import { ZodValidationPipe } from '../common/zod-validation.pipe'; import { SiteAdminGuard } from './site-admin.guard'; import { SystemAdminService } from './system-admin.service'; /** Site-Admin system panel (issue #86): jobs, backup card, audit, storage. */ @Controller('admin/system') @UseGuards(SiteAdminGuard) export class SystemAdminController { constructor(private readonly system: SystemAdminService) {} @Get('jobs') async jobs(): Promise { return this.system.jobs(); } @Post('jobs/:name/run') async triggerJob( @Param('name') name: string, @Req() request: AuthedRequest, ): Promise { return this.system.triggerJob(request.user!, name); } @Get('backup') backup(): Promise { return this.system.backup(); } @Get('audit') async audit( @Query(new ZodValidationPipe(auditListQuerySchema)) query: AuditListQuery, ): Promise { return this.system.auditLog(query); } @Get('storage') async storage(): Promise { return this.system.storage(); } }