import { Controller, Get, Param, UseGuards } from "@nestjs/common"; import { JobStepsService } from "./job-steps.service"; import { AuthGuard } from "../auth/guards/auth.guard"; import { WorkspaceGuard, PermissionGuard } from "../common/guards"; import { Permission, RequirePermission } from "../common/decorators"; /** * Controller for job steps endpoints * All endpoints require authentication and workspace context * * Guards are applied in order: * 1. AuthGuard - Verifies user authentication * 2. WorkspaceGuard - Validates workspace access and sets RLS context * 3. PermissionGuard - Checks role-based permissions */ @Controller("runner-jobs/:jobId/steps") @UseGuards(AuthGuard, WorkspaceGuard, PermissionGuard) export class JobStepsController { constructor(private readonly jobStepsService: JobStepsService) {} /** * GET /api/runner-jobs/:jobId/steps * Get all steps for a job * Requires: Any workspace member */ @Get() @RequirePermission(Permission.WORKSPACE_ANY) async findAll(@Param("jobId") jobId: string) { return this.jobStepsService.findAllByJob(jobId); } /** * GET /api/runner-jobs/:jobId/steps/:stepId * Get a single step by ID * Requires: Any workspace member */ @Get(":stepId") @RequirePermission(Permission.WORKSPACE_ANY) async findOne(@Param("jobId") jobId: string, @Param("stepId") stepId: string) { return this.jobStepsService.findOne(stepId, jobId); } }