feat: Waves 3+4 — frontend wiring, NATS integration, stores (19 files)
All checks were successful
Test Asgard Runner / test (push) Successful in 2s
All checks were successful
Test Asgard Runner / test (push) Successful in 2s
Frontend:
- Wire Dashboard quick actions (start/stop/trigger wipe) + next wipe schedule
- Wire Console WebSocket streaming for real-time output
- Implement TOTP 2FA challenge flow in LoginView
- Wire Plugin load/unload toggle + uninstall buttons with confirmations
- Wire WipesView profile selector, disable trigger when no profiles
- Build full WipeProfiles create/edit modal with all config fields
- Wire MapsView file upload with multipart FormData
- Fix SettingsView empty catch blocks → toast error messages
- Fix stale localStorage token reads in CSV exports → auth store
- Fix auth store hardcoded permissions → JWT-decoded role permissions
- Fix wipe store onMounted lifecycle bug → explicit subscribe action
- Update EarlyAccessView from countdown to "Now Live" state
Backend:
- Wire wipe trigger to publish NATS cmd (corrosion.{id}.cmd.wipe)
- Wire plugin reload/uninstall to publish NATS cmd
- Expand NatsBridgeService: add files, wipe status, server status subs
- Add PATCH schedules/:id/toggle endpoint for task toggling
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -3,9 +3,11 @@ import {
|
||||
Get,
|
||||
Post,
|
||||
Put,
|
||||
Patch,
|
||||
Delete,
|
||||
Body,
|
||||
Param,
|
||||
ParseUUIDPipe,
|
||||
UseGuards,
|
||||
} from '@nestjs/common';
|
||||
import {
|
||||
@@ -85,6 +87,28 @@ export class SchedulesController {
|
||||
return await this.schedulesService.updateTask(licenseId, taskId, dto);
|
||||
}
|
||||
|
||||
@Patch('tasks/:id/toggle')
|
||||
@RequirePermission('schedules.manage')
|
||||
@ApiOperation({
|
||||
summary: 'Toggle a scheduled task',
|
||||
description: 'Enable or disable a scheduled task without deleting it',
|
||||
})
|
||||
@ApiResponse({
|
||||
status: 200,
|
||||
description: 'Task toggled successfully',
|
||||
})
|
||||
@ApiResponse({
|
||||
status: 404,
|
||||
description: 'Task not found',
|
||||
})
|
||||
async toggleTask(
|
||||
@CurrentTenant() licenseId: string,
|
||||
@Param('id', ParseUUIDPipe) taskId: string,
|
||||
@Body('enabled') enabled: boolean,
|
||||
) {
|
||||
return await this.schedulesService.toggleTask(licenseId, taskId, enabled);
|
||||
}
|
||||
|
||||
@Delete('tasks/:id')
|
||||
@RequirePermission('schedules.manage')
|
||||
@ApiOperation({
|
||||
@@ -101,7 +125,7 @@ export class SchedulesController {
|
||||
})
|
||||
async deleteTask(
|
||||
@CurrentTenant() licenseId: string,
|
||||
@Param('id') taskId: string,
|
||||
@Param('id', ParseUUIDPipe) taskId: string,
|
||||
) {
|
||||
return await this.schedulesService.deleteTask(licenseId, taskId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user