feat: Add scanner user association to tickets; update Ticket model, resource, migration, and tests

This commit is contained in:
2026-08-05 09:17:09 -03:00
parent 2a15dc92be
commit e17d1fa15e
4 changed files with 39 additions and 0 deletions

View File

@@ -24,6 +24,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
'starts_at',
'expires_at',
'used_at',
'scanner_user_id',
'user_id',
])]
class Ticket extends Model
@@ -47,6 +48,7 @@ class Ticket extends Model
'starts_at' => 'datetime',
'expires_at' => 'datetime',
'used_at' => 'datetime',
'scanner_user_id' => 'integer',
'user_id' => 'integer',
];
}
@@ -63,6 +65,12 @@ class Ticket extends Model
return $this->belongsTo(User::class);
}
/** @return BelongsTo<User, $this> */
public function scannerUser(): BelongsTo
{
return $this->belongsTo(User::class, 'scanner_user_id');
}
/** @return BelongsTo<Purchase, $this> */
public function sourcePurchase(): BelongsTo
{

View File

@@ -23,6 +23,7 @@ class TicketResource extends JsonResource
'starts_at' => $this->getEffectiveStartsAt(),
'expires_at' => $this->getEffectiveExpiresAt(),
'used_at' => $this->used_at,
'scanner_user_id' => $this->scanner_user_id,
'is_valid' => $this->is_valid,
'is_expired' => $this->is_expired,
'is_used' => $this->is_used,

View File

@@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('tickets', function (Blueprint $table): void {
$table->foreignId('scanner_user_id')
->nullable()
->after('used_at')
->constrained('users')
->cascadeOnUpdate()
->nullOnDelete();
});
}
public function down(): void
{
Schema::table('tickets', function (Blueprint $table): void {
$table->dropConstrainedForeignId('scanner_user_id');
});
}
};

View File

@@ -29,6 +29,7 @@ class TicketTest extends TestCase
'starts_at' => '2026-07-21 10:00:00',
'expires_at' => '2026-07-22 10:00:00',
'used_at' => null,
'scanner_user_id' => '15',
'user_id' => '10',
]);
@@ -39,9 +40,11 @@ class TicketTest extends TestCase
$this->assertInstanceOf(Carbon::class, $ticket->starts_at);
$this->assertInstanceOf(Carbon::class, $ticket->expires_at);
$this->assertNull($ticket->used_at);
$this->assertSame(15, $ticket->scanner_user_id);
$this->assertSame(10, $ticket->user_id);
$this->assertInstanceOf(Tenant::class, $ticket->tenant()->getRelated());
$this->assertInstanceOf(User::class, $ticket->user()->getRelated());
$this->assertInstanceOf(User::class, $ticket->scannerUser()->getRelated());
$this->assertInstanceOf(CatalogItem::class, $ticket->sourceCatalogItem()->getRelated());
$this->assertInstanceOf(Variant::class, $ticket->sourceVariant()->getRelated());
}