feat: Add scanner user association to tickets; update Ticket model, resource, migration, and tests
This commit is contained in:
@@ -24,6 +24,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|||||||
'starts_at',
|
'starts_at',
|
||||||
'expires_at',
|
'expires_at',
|
||||||
'used_at',
|
'used_at',
|
||||||
|
'scanner_user_id',
|
||||||
'user_id',
|
'user_id',
|
||||||
])]
|
])]
|
||||||
class Ticket extends Model
|
class Ticket extends Model
|
||||||
@@ -47,6 +48,7 @@ class Ticket extends Model
|
|||||||
'starts_at' => 'datetime',
|
'starts_at' => 'datetime',
|
||||||
'expires_at' => 'datetime',
|
'expires_at' => 'datetime',
|
||||||
'used_at' => 'datetime',
|
'used_at' => 'datetime',
|
||||||
|
'scanner_user_id' => 'integer',
|
||||||
'user_id' => 'integer',
|
'user_id' => 'integer',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -63,6 +65,12 @@ class Ticket extends Model
|
|||||||
return $this->belongsTo(User::class);
|
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> */
|
/** @return BelongsTo<Purchase, $this> */
|
||||||
public function sourcePurchase(): BelongsTo
|
public function sourcePurchase(): BelongsTo
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ class TicketResource extends JsonResource
|
|||||||
'starts_at' => $this->getEffectiveStartsAt(),
|
'starts_at' => $this->getEffectiveStartsAt(),
|
||||||
'expires_at' => $this->getEffectiveExpiresAt(),
|
'expires_at' => $this->getEffectiveExpiresAt(),
|
||||||
'used_at' => $this->used_at,
|
'used_at' => $this->used_at,
|
||||||
|
'scanner_user_id' => $this->scanner_user_id,
|
||||||
'is_valid' => $this->is_valid,
|
'is_valid' => $this->is_valid,
|
||||||
'is_expired' => $this->is_expired,
|
'is_expired' => $this->is_expired,
|
||||||
'is_used' => $this->is_used,
|
'is_used' => $this->is_used,
|
||||||
|
|||||||
@@ -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');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -29,6 +29,7 @@ class TicketTest extends TestCase
|
|||||||
'starts_at' => '2026-07-21 10:00:00',
|
'starts_at' => '2026-07-21 10:00:00',
|
||||||
'expires_at' => '2026-07-22 10:00:00',
|
'expires_at' => '2026-07-22 10:00:00',
|
||||||
'used_at' => null,
|
'used_at' => null,
|
||||||
|
'scanner_user_id' => '15',
|
||||||
'user_id' => '10',
|
'user_id' => '10',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@@ -39,9 +40,11 @@ class TicketTest extends TestCase
|
|||||||
$this->assertInstanceOf(Carbon::class, $ticket->starts_at);
|
$this->assertInstanceOf(Carbon::class, $ticket->starts_at);
|
||||||
$this->assertInstanceOf(Carbon::class, $ticket->expires_at);
|
$this->assertInstanceOf(Carbon::class, $ticket->expires_at);
|
||||||
$this->assertNull($ticket->used_at);
|
$this->assertNull($ticket->used_at);
|
||||||
|
$this->assertSame(15, $ticket->scanner_user_id);
|
||||||
$this->assertSame(10, $ticket->user_id);
|
$this->assertSame(10, $ticket->user_id);
|
||||||
$this->assertInstanceOf(Tenant::class, $ticket->tenant()->getRelated());
|
$this->assertInstanceOf(Tenant::class, $ticket->tenant()->getRelated());
|
||||||
$this->assertInstanceOf(User::class, $ticket->user()->getRelated());
|
$this->assertInstanceOf(User::class, $ticket->user()->getRelated());
|
||||||
|
$this->assertInstanceOf(User::class, $ticket->scannerUser()->getRelated());
|
||||||
$this->assertInstanceOf(CatalogItem::class, $ticket->sourceCatalogItem()->getRelated());
|
$this->assertInstanceOf(CatalogItem::class, $ticket->sourceCatalogItem()->getRelated());
|
||||||
$this->assertInstanceOf(Variant::class, $ticket->sourceVariant()->getRelated());
|
$this->assertInstanceOf(Variant::class, $ticket->sourceVariant()->getRelated());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user