repuve-backend-v1/app/Http/Controllers/Repuve/CatalogController.php
Juan Felipe Zapata Moreno 31746867b8 feat: Agrega validaciones de autorización y nuevas clases Request
- Se agregó autorización basada en permisos en múltiples Requests.
- Nuevos Requests para motivos de cancelación y tags con validación y autorización.
- Se añadieron métodos de roles al modelo User (isDeveloper, isAdmin, isPrimary).
- Se actualizó el acceso a Telescope usando validación por roles.
- Mejora en el manejo de excepciones de autorización.
- Actualización de RoleSeeder con nuevas convenciones de permisos.
- Actualización de dependencias (composer.lock).
2026-02-23 13:05:53 -06:00

121 lines
3.3 KiB
PHP

<?php
namespace App\Http\Controllers\Repuve;
/**
* @copyright (c) 2025 Notsoweb Software (https://notsoweb.com) - All Rights Reserved
*/
use App\Http\Controllers\Controller;
use App\Http\Requests\Repuve\CatalogCancellationReasonStoreRequest;
use App\Http\Requests\Repuve\CatalogCancellationReasonUpdateRequest;
use App\Models\CatalogCancellationReason;
use Illuminate\Http\Request;
use Notsoweb\ApiResponse\Enums\ApiResponse;
use Illuminate\Routing\Controllers\HasMiddleware;
/**
* Descripción
*/
class CatalogController extends Controller implements HasMiddleware
{
/**
* Middleware
*/
public static function middleware(): array
{
return [
self::can('catalogs.cancellation_reasons.index', ['index']),
self::can('catalogs.cancellation_reasons.show', ['show']),
self::can('catalogs.cancellation_reasons.destroy', ['destroy']),
];
}
public function index(Request $request)
{
$type = $request->query('type');
$query = CatalogCancellationReason::query();
if ($type === 'cancelacion') {
$query->forCancellation();
} elseif ($type === 'sustitucion') {
$query->forSubstitution();
} else {
$query->orderBy('id');
}
$reasons = $query->get(['id', 'code', 'name', 'description', 'applies_to']);
return ApiResponse::OK->response([
'message' => 'Razones de cancelación obtenidas exitosamente',
'data' => $reasons,
]);
}
public function show($id)
{
$reason = CatalogCancellationReason::find($id);
if (!$reason) {
return ApiResponse::NOT_FOUND->response([
'message' => 'Razón de cancelación no encontrada',
]);
}
return ApiResponse::OK->response([
'message' => 'Razón de cancelación obtenida exitosamente',
'data' => $reason,
]);
}
public function store(CatalogCancellationReasonStoreRequest $request)
{
$validated = $request->validated();
$reason = CatalogCancellationReason::create($validated);
return ApiResponse::CREATED->response([
'message' => 'Razón de cancelación creada exitosamente',
'data' => $reason,
]);
}
public function update(CatalogCancellationReasonUpdateRequest $request, $id)
{
$reason = CatalogCancellationReason::find($id);
if (!$reason) {
return ApiResponse::NOT_FOUND->response([
'message' => 'Razón de cancelación no encontrada',
]);
}
$validated = $request->validated();
$reason->update($validated);
return ApiResponse::OK->response([
'message' => 'Razón de cancelación actualizada exitosamente',
'data' => $reason,
]);
}
public function destroy($id)
{
$reason = CatalogCancellationReason::find($id);
if (!$reason) {
return ApiResponse::NOT_FOUND->response([
'message' => 'Razón de cancelación no encontrada',
]);
}
$reason->delete();
return ApiResponse::OK->response([
'message' => 'Razón de cancelación eliminada exitosamente',
]);
}
}