Video merge feature, default avatar, video-redirects table, misc UI tweaks

Bundled pre-existing changes on the branch:
- Video merge: controller, service, admin merge modal, and a repair
  console command; new video_redirects table (with source_folder)
  so merged/moved videos keep resolving under their old keys.
- Default avatar SVG for users without a profile picture.
- Assorted view tweaks across profile, video actions/comments/insights,
  admin layout, video-details, and the app layout.
- Small touch-ups in SuperAdminController, User model, NasSyncService.

Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
ghassanandClaude Opus 4.7 committed 2026-07-31 02:42:43 +03:00
1 parent ba8ab11ce4
commit 8d27520bdb
17 files changed
+736 -13

No files matched your search

@@ -0,0 +1,23 @@
<?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('video_redirects', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('source_id')->unique();
$table->foreignId('target_id')->constrained('videos')->cascadeOnDelete();
$table->timestamp('created_at')->nullable();
$table->index('target_id');
});
}
public function down(): void
{
Schema::dropIfExists('video_redirects');
}
};
@@ -0,0 +1,21 @@
<?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('video_redirects', function (Blueprint $table) {
$table->string('source_folder', 500)->nullable()->after('target_id');
});
}
public function down(): void
{
Schema::table('video_redirects', function (Blueprint $table) {
$table->dropColumn('source_folder');
});
}
};