homo #8
@@ -1249,7 +1249,7 @@
|
||||
"name": "Ticket",
|
||||
"item": [
|
||||
{
|
||||
"name": "List Ticket",
|
||||
"name": "List Scan Attempt",
|
||||
"request": {
|
||||
"method": "GET",
|
||||
"header": [
|
||||
@@ -5998,9 +5998,9 @@
|
||||
"type": "text"
|
||||
}
|
||||
],
|
||||
"description": "Ruta Laravel: `GET /api/v1/scanner/tickets`\n\nControlador: `App\\Domains\\Ticket\\Controllers\\Scanner\\TicketController@index`\n\nRequiere autenticación Sanctum.",
|
||||
"description": "Ruta Laravel: `GET /api/v1/scanner/attempts`\n\nControlador: `App\\Domains\\Ticket\\Controllers\\Scanner\\ScanAttemptController`\n\nRequiere autenticación Sanctum.",
|
||||
"url": {
|
||||
"raw": "{{base_url}}/api/v1/scanner/tickets?page=1&per_page=20",
|
||||
"raw": "{{base_url}}/api/v1/scanner/attempts?page=1&per_page=20",
|
||||
"host": [
|
||||
"{{base_url}}"
|
||||
],
|
||||
@@ -6008,7 +6008,7 @@
|
||||
"api",
|
||||
"v1",
|
||||
"scanner",
|
||||
"tickets"
|
||||
"attempts"
|
||||
],
|
||||
"query": [
|
||||
{
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace App\Domains\Ticket\Controllers\Scanner;
|
||||
|
||||
use App\Domains\Auth\Models\User;
|
||||
use App\Domains\Ticket\Requests\ScanAttemptIndexRequest;
|
||||
use App\Domains\Ticket\Resources\Scanner\ScanAttemptResource;
|
||||
use App\Domains\Ticket\Services\ScannerTicketService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
||||
|
||||
class ScanAttemptController extends Controller
|
||||
{
|
||||
public function __construct(private readonly ScannerTicketService $ticketService) {}
|
||||
|
||||
public function __invoke(ScanAttemptIndexRequest $request): AnonymousResourceCollection
|
||||
{
|
||||
/** @var User $scanner */
|
||||
$scanner = $request->user();
|
||||
|
||||
return ScanAttemptResource::collection(
|
||||
$this->ticketService->attemptsBy($scanner, $request->validated())
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -3,28 +3,15 @@
|
||||
namespace App\Domains\Ticket\Controllers\Scanner;
|
||||
|
||||
use App\Domains\Auth\Models\User;
|
||||
use App\Domains\Ticket\Requests\ScanAttemptIndexRequest;
|
||||
use App\Domains\Ticket\Resources\Scanner\ScanAttemptResource;
|
||||
use App\Domains\Ticket\Resources\TicketResource;
|
||||
use App\Domains\Ticket\Services\ScannerTicketService;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
|
||||
|
||||
class TicketController extends Controller
|
||||
{
|
||||
public function __construct(private readonly ScannerTicketService $ticketService) {}
|
||||
|
||||
public function index(ScanAttemptIndexRequest $request): AnonymousResourceCollection
|
||||
{
|
||||
/** @var User $scanner */
|
||||
$scanner = $request->user();
|
||||
|
||||
return ScanAttemptResource::collection(
|
||||
$this->ticketService->attemptsBy($scanner, $request->validated())
|
||||
);
|
||||
}
|
||||
|
||||
public function show(Request $request, string $ticketUuid): TicketResource
|
||||
{
|
||||
/** @var User $scanner */
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
<?php
|
||||
|
||||
use App\Domains\Ticket\Controllers\Scanner\ScanAttemptController;
|
||||
use App\Domains\Ticket\Controllers\Scanner\TicketController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::prefix('v1/scanner/tickets')
|
||||
->middleware(['auth:sanctum', 'scanner.tenant'])
|
||||
Route::middleware(['auth:sanctum', 'scanner.tenant'])
|
||||
->group(function (): void {
|
||||
Route::get('/', [TicketController::class, 'index']);
|
||||
Route::post('scan', [TicketController::class, 'scan']);
|
||||
Route::get('{ticketUuid}', [TicketController::class, 'show'])
|
||||
->whereUuid('ticketUuid');
|
||||
Route::get('v1/scanner/attempts', ScanAttemptController::class);
|
||||
|
||||
Route::prefix('v1/scanner/tickets')->group(function (): void {
|
||||
Route::post('scan', [TicketController::class, 'scan']);
|
||||
Route::get('{ticketUuid}', [TicketController::class, 'show'])
|
||||
->whereUuid('ticketUuid');
|
||||
});
|
||||
});
|
||||
|
||||
@@ -202,7 +202,7 @@ function queryFor(string $uri): array
|
||||
['key' => 'page', 'value' => '1'],
|
||||
['key' => 'per_page', 'value' => '20'],
|
||||
],
|
||||
'api/v1/scanner/tickets' => [['key' => 'q', 'value' => '', 'disabled' => true], ['key' => 'page', 'value' => '1'], ['key' => 'per_page', 'value' => '20']],
|
||||
'api/v1/scanner/attempts' => [['key' => 'q', 'value' => '', 'disabled' => true], ['key' => 'page', 'value' => '1'], ['key' => 'per_page', 'value' => '20']],
|
||||
'api/storage-test/s3/temporary-url' => [['key' => 'path', 'value' => '{{s3_path}}'], ['key' => 'expires_in_minutes', 'value' => '60']],
|
||||
default => [],
|
||||
};
|
||||
|
||||
@@ -52,14 +52,14 @@ class ScannerTicketControllerTest extends TestCase
|
||||
|
||||
public function test_scanner_routes_require_authentication_and_scan_permission(): void
|
||||
{
|
||||
$this->getJson('/api/v1/scanner/tickets')->assertUnauthorized();
|
||||
$this->getJson('/api/v1/scanner/attempts')->assertUnauthorized();
|
||||
|
||||
Sanctum::actingAs(User::factory()->create([
|
||||
'rol_codigo' => RoleCode::User->value,
|
||||
'tenant_codigo' => $this->tenant->codigo,
|
||||
]));
|
||||
|
||||
$this->getJson('/api/v1/scanner/tickets')->assertForbidden();
|
||||
$this->getJson('/api/v1/scanner/attempts')->assertForbidden();
|
||||
}
|
||||
|
||||
public function test_scanner_can_list_only_its_scan_attempts(): void
|
||||
@@ -82,7 +82,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
|
||||
Sanctum::actingAs($this->scanner);
|
||||
|
||||
$this->getJson('/api/v1/scanner/tickets')
|
||||
$this->getJson('/api/v1/scanner/attempts')
|
||||
->assertOk()
|
||||
->assertJsonCount(2, 'data')
|
||||
->assertJsonPath('data.0.id', $newer->id)
|
||||
@@ -102,7 +102,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
|
||||
Sanctum::actingAs($this->scanner);
|
||||
|
||||
$this->getJson('/api/v1/scanner/tickets?q=aaaaaaaa&per_page=1')
|
||||
$this->getJson('/api/v1/scanner/attempts?q=aaaaaaaa&per_page=1')
|
||||
->assertOk()
|
||||
->assertJsonCount(1, 'data')
|
||||
->assertJsonPath('data.0.data', $matching->data)
|
||||
@@ -118,7 +118,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
|
||||
Sanctum::actingAs($this->scanner);
|
||||
|
||||
$this->getJson("/api/v1/scanner/tickets?q={$matching->id}")
|
||||
$this->getJson("/api/v1/scanner/attempts?q={$matching->id}")
|
||||
->assertOk()
|
||||
->assertJsonCount(1, 'data')
|
||||
->assertJsonPath('data.0.id', $matching->id);
|
||||
@@ -135,7 +135,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
|
||||
Sanctum::actingAs($this->scanner);
|
||||
|
||||
$this->getJson('/api/v1/scanner/tickets?q=11%2F08%2F26')
|
||||
$this->getJson('/api/v1/scanner/attempts?q=11%2F08%2F26')
|
||||
->assertOk()
|
||||
->assertJsonCount(1, 'data')
|
||||
->assertJsonPath('data.0.id', $matching->id);
|
||||
@@ -350,7 +350,7 @@ class ScannerTicketControllerTest extends TestCase
|
||||
$ticket = $this->createTicket((string) Str::uuid());
|
||||
Sanctum::actingAs($admin);
|
||||
|
||||
$this->getJson('/api/v1/scanner/tickets')->assertForbidden();
|
||||
$this->getJson('/api/v1/scanner/attempts')->assertForbidden();
|
||||
$this->getJson("/api/v1/scanner/tickets/{$ticket->ticket}")->assertForbidden();
|
||||
$this->postJson('/api/v1/scanner/tickets/scan', ['data' => $ticket->ticket])->assertForbidden();
|
||||
$this->assertNull($ticket->fresh()->used_at);
|
||||
|
||||
Reference in New Issue
Block a user