filled('search')) { $query->where('nombre', 'like', '%' . $request->search . '%'); } if ($request->filled('activo')) { $query->where('activo', $request->boolean('activo')); } if ($request->filled('publico')) { $query->where('publico', $request->boolean('publico')); } if ($request->filled('tipo_proceso')) { $query->where('tipo_proceso', $request->tipo_proceso); } $procesos = $query ->orderBy('created_at', 'desc') ->paginate($request->get('per_page', 10)); return response()->json($procesos); } public function store(Request $request) { $data = $request->validate([ 'nombre' => 'required|string|max:255', 'descripcion' => 'nullable|string', 'estado' => 'nullable|string|max:50', 'duracion' => 'nullable|integer|min:1', 'intentos_maximos' => 'nullable|integer|min:1', 'requiere_pago' => 'boolean', 'precio' => 'nullable|numeric|min:0', 'calificacion_id' => 'nullable|exists:calificaciones,id', 'tipo_simulacro' => 'nullable|string|max:50', 'tipo_proceso' => 'nullable|string|max:50', 'activo' => 'boolean', 'publico' => 'boolean', 'fecha_inicio' => 'nullable|date', 'fecha_fin' => 'nullable|date|after_or_equal:fecha_inicio', 'tiempo_por_pregunta' => 'nullable|integer|min:1', ]); $data['slug'] = Str::slug($data['nombre']) . '-' . uniqid(); $proceso = Proceso::create($data); return response()->json([ 'message' => 'Proceso creado correctamente', 'data' => $proceso ], 201); } public function show($id) { $proceso = Proceso::findOrFail($id); return response()->json($proceso); } public function update(Request $request, $id) { $proceso = Proceso::findOrFail($id); $data = $request->validate([ 'nombre' => 'required|string|max:255', 'descripcion' => 'nullable|string', 'estado' => 'nullable|string|max:50', 'duracion' => 'nullable|integer|min:1', 'intentos_maximos' => 'nullable|integer|min:1', 'requiere_pago' => 'boolean', 'precio' => 'nullable|numeric|min:0', 'calificacion_id' => 'nullable|exists:calificaciones,id', 'tipo_simulacro' => 'nullable|string|max:50', 'tipo_proceso' => 'nullable|string|max:50', 'activo' => 'boolean', 'publico' => 'boolean', 'fecha_inicio' => 'nullable|date', 'fecha_fin' => 'nullable|date|after_or_equal:fecha_inicio', 'tiempo_por_pregunta' => 'nullable|integer|min:1', ]); if ($data['nombre'] !== $proceso->nombre) { $data['slug'] = Str::slug($data['nombre']) . '-' . uniqid(); } $proceso->update($data); return response()->json([ 'message' => 'Proceso actualizado correctamente', 'data' => $proceso ]); } public function destroy($id) { $proceso = Proceso::findOrFail($id); $proceso->delete(); return response()->json([ 'message' => 'Proceso eliminado correctamente' ]); } public function toggleActivo($id) { $proceso = Proceso::findOrFail($id); $proceso->activo = !$proceso->activo; $proceso->save(); return response()->json([ 'message' => 'Estado actualizado', 'activo' => $proceso->activo ]); } }