add Session entity, persistence, fake

Session: immutable holder of token, owning User, createdAt,
expiresAt. isExpired(now) compares >= expiresAt. SessionModel
keys on token (string primary, non-incrementing). migration adds
sessions table with foreign user_id (cascade on user delete) and
indexed expires_at for cleanup queries. EloquentSessionRepository
takes UserRepository to rehydrate the owning User on findByToken;
sessions for deleted users return null. FakeSessionRepository
mirrors with an in-memory map keyed by token, defensive copies on
read.
This commit is contained in:
yisroel 2026-05-06 15:12:07 +03:00
parent bb38e544ee
commit 05f935f275
Signed by: yisroelbaum
GPG key ID: 0FA60884F75520A9
7 changed files with 246 additions and 0 deletions

View file

@ -0,0 +1,25 @@
<?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::create('sessions', function (Blueprint $table) {
$table->string('token')->primary();
$table->foreignId('user_id')
->constrained('users')
->cascadeOnDelete();
$table->dateTime('created_at');
$table->dateTime('expires_at')->index();
});
}
public function down(): void
{
Schema::dropIfExists('sessions');
}
};