reworked the guest pwa, modernized start and gallery page. added share link functionality.

This commit is contained in:
Codex Agent
2025-11-10 22:25:25 +01:00
parent 1e8810ca51
commit 1cec116933
22 changed files with 1208 additions and 476 deletions

View File

@@ -0,0 +1,29 @@
<?php
namespace Database\Factories;
use App\Models\Photo;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Support\Str;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\PhotoShareLink>
*/
class PhotoShareLinkFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'photo_id' => Photo::factory(),
'slug' => Str::lower(Str::random(32)),
'expires_at' => now()->addDay(),
'created_by_device_id' => $this->faker->unique()->uuid(),
'created_ip' => $this->faker->ipv4(),
];
}
}

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('photo_share_links', function (Blueprint $table) {
$table->id();
$table->foreignId('photo_id')->constrained()->cascadeOnDelete();
$table->string('slug', 64)->unique();
$table->string('created_by_device_id')->nullable();
$table->string('created_ip', 45)->nullable();
$table->timestamp('expires_at');
$table->timestamp('last_accessed_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('photo_share_links');
}
};