vsmov 1.0.0

This commit is contained in:
Clemencia John
2026-04-15 21:11:19 -07:00
parent 311c74228c
commit 68260d170a
147 changed files with 12113 additions and 0 deletions

View File

@@ -0,0 +1,39 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMenusTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('menus', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 100);
$table->string('type', 20)->nullable();
$table->string('link', 255)->nullable();
$table->integer('parent_id')->unsigned()->nullable();
$table->integer('lft')->unsigned()->nullable();
$table->integer('rgt')->unsigned()->nullable();
$table->integer('depth')->unsigned()->nullable();
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('menus');
}
}

View File

@@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateSettingsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('settings', function (Blueprint $table) {
$table->increments('id');
$table->string('key')->unique();
$table->string('name');
$table->string('description')->nullable();
$table->text('value')->nullable();
$table->text('field');
$table->string('group')->nullable()->index();
$table->boolean('active')->index();
$table->timestamps();
$table->index(['group', 'active']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('settings');
}
}

View File

@@ -0,0 +1,54 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class RemoveBackpackuserModel extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
// establish the table names
$model_has_roles = config('permission.table_names.model_has_roles');
$model_has_permissions = config('permission.table_names.model_has_permissions');
// replace the BackpackUser model with User
if (\Illuminate\Support\Facades\Schema::hasTable($model_has_roles)) {
$this->replaceModels($model_has_roles);
}
if (\Illuminate\Support\Facades\Schema::hasTable($model_has_permissions)) {
$this->replaceModels($model_has_permissions);
}
}
public function replaceModels($table_name)
{
Log::info('Replacing BackpackUser model in '.$table_name);
// if you've ended up with duplicate entries (both for App\User and App\Models\BackpackUser)
// we can just delete them
$userEntries = DB::table($table_name)
->where('model_type', "App\User")
->get();
foreach ($userEntries as $entry) {
DB::table($table_name)
->where('role_id', $entry->role_id)
->where('model_type', 'App\Models\BackpackUser')
->where('model_id', $entry->model_id)
->delete();
}
// for the rest of them, we can just replace the BackpackUser model with User
DB::table($table_name)
->where('model_type', "App\Models\BackpackUser")
->update([
'model_type' => "App\User",
]);
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class CreateThemesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('themes', function (Blueprint $table) {
$table->id();
$table->string('name')->index();
$table->string('display_name');
$table->string('preview_image')->nullable();
$table->string('author');
$table->string('package_name');
$table->text('value')->nullable();
$table->boolean('active')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('themes');
}
}

View File

@@ -0,0 +1,141 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Spatie\Permission\PermissionRegistrar;
class CreatePermissionTables extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$tableNames = config('permission.table_names');
$columnNames = config('permission.column_names');
$teams = config('permission.teams');
if (empty($tableNames)) {
throw new \Exception('Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.');
}
if ($teams && empty($columnNames['team_foreign_key'] ?? null)) {
throw new \Exception('Error: team_foreign_key on config/permission.php not loaded. Run [php artisan config:clear] and try again.');
}
Schema::create($tableNames['permissions'], function (Blueprint $table) {
$table->bigIncrements('id'); // permission id
$table->string('name'); // For MySQL 8.0 use string('name', 125);
$table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);
$table->timestamps();
$table->unique(['name', 'guard_name']);
});
Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) {
$table->bigIncrements('id'); // role id
if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing
$table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable();
$table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index');
}
$table->string('name'); // For MySQL 8.0 use string('name', 125);
$table->string('guard_name'); // For MySQL 8.0 use string('guard_name', 125);
$table->timestamps();
if ($teams || config('permission.testing')) {
$table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']);
} else {
$table->unique(['name', 'guard_name']);
}
});
Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $teams) {
$table->unsignedBigInteger(PermissionRegistrar::$pivotPermission);
$table->string('model_type');
$table->unsignedBigInteger($columnNames['model_morph_key']);
$table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index');
$table->foreign(PermissionRegistrar::$pivotPermission)
->references('id') // permission id
->on($tableNames['permissions'])
->onDelete('cascade');
if ($teams) {
$table->unsignedBigInteger($columnNames['team_foreign_key']);
$table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index');
$table->primary([$columnNames['team_foreign_key'], PermissionRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
'model_has_permissions_permission_model_type_primary');
} else {
$table->primary([PermissionRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'],
'model_has_permissions_permission_model_type_primary');
}
});
Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $teams) {
$table->unsignedBigInteger(PermissionRegistrar::$pivotRole);
$table->string('model_type');
$table->unsignedBigInteger($columnNames['model_morph_key']);
$table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index');
$table->foreign(PermissionRegistrar::$pivotRole)
->references('id') // role id
->on($tableNames['roles'])
->onDelete('cascade');
if ($teams) {
$table->unsignedBigInteger($columnNames['team_foreign_key']);
$table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index');
$table->primary([$columnNames['team_foreign_key'], PermissionRegistrar::$pivotRole, $columnNames['model_morph_key'], 'model_type'],
'model_has_roles_role_model_type_primary');
} else {
$table->primary([PermissionRegistrar::$pivotRole, $columnNames['model_morph_key'], 'model_type'],
'model_has_roles_role_model_type_primary');
}
});
Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {
$table->unsignedBigInteger(PermissionRegistrar::$pivotPermission);
$table->unsignedBigInteger(PermissionRegistrar::$pivotRole);
$table->foreign(PermissionRegistrar::$pivotPermission)
->references('id') // permission id
->on($tableNames['permissions'])
->onDelete('cascade');
$table->foreign(PermissionRegistrar::$pivotRole)
->references('id') // role id
->on($tableNames['roles'])
->onDelete('cascade');
$table->primary([PermissionRegistrar::$pivotPermission, PermissionRegistrar::$pivotRole], 'role_has_permissions_permission_id_role_id_primary');
});
app('cache')
->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
->forget(config('permission.cache.key'));
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
$tableNames = config('permission.table_names');
if (empty($tableNames)) {
throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.');
}
Schema::drop($tableNames['role_has_permissions']);
Schema::drop($tableNames['model_has_roles']);
Schema::drop($tableNames['model_has_permissions']);
Schema::drop($tableNames['roles']);
Schema::drop($tableNames['permissions']);
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class CreateCategoriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name')->unique();
$table->string('slug')->unique()->index();
$table->string('seo_title')->nullable();
$table->string('seo_des')->nullable();
$table->string('seo_key')->nullable();
$table->unsignedBigInteger('user_id')->nullable()->index();
$table->string('user_name')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('categories');
}
}

View File

@@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateActorsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('actors', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('name_md5')->unique();
$table->string('slug')->index();
$table->enum('gender', ['male', 'female', 'other'])->nullable();
$table->string('bio')->nullable();
$table->string('thumb_url', 2048)->nullable();
$table->string('seo_title')->nullable();
$table->string('seo_des')->nullable();
$table->string('seo_key')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('actors');
}
}

View File

@@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateDirectorsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('directors', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('name_md5')->unique();
$table->string('slug')->index();
$table->enum('gender', ['male', 'female', 'other'])->nullable();
$table->string('bio')->nullable();
$table->string('thumb_url', 2048)->nullable();
$table->string('seo_title')->nullable();
$table->string('seo_des')->nullable();
$table->string('seo_key')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('directors');
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class CreateRegionsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('regions', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name')->unique();
$table->string('slug')->unique()->index();
$table->string('seo_title')->nullable();
$table->string('seo_des')->nullable();
$table->string('seo_key')->nullable();
$table->unsignedBigInteger('user_id')->nullable()->index();
$table->string('user_name')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('regions');
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateStudiosTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('studios', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('name_md5')->unique();
$table->string('slug')->index();
$table->string('thumb_url', 2048)->nullable();
$table->string('seo_title')->nullable();
$table->string('seo_des')->nullable();
$table->string('seo_key')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('studios');
}
}

View File

@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTagsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tags', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('name_md5')->unique();
$table->string('slug')->index();
$table->string('seo_title')->nullable();
$table->string('seo_des')->nullable();
$table->string('seo_key')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tags');
}
}

View File

@@ -0,0 +1,69 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class CreateMoviesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('movies', function (Blueprint $table) {
$table->id();
$table->string('name', 1024);
$table->string('origin_name', 1024);
$table->string('slug')->unique();
$table->text('content')->nullable();
$table->string('thumb_url', 2048)->nullable();
$table->string('poster_url', 2048)->nullable();
$table->enum('type', ['single', 'series']);
$table->enum('status', ['trailer', 'ongoing', 'completed']);
$table->string('trailer_url', 2048)->nullable();
$table->string('episode_time')->nullable();
$table->string('episode_current')->nullable();
$table->string('episode_total')->nullable();
$table->string('quality')->nullable()->default('HD');
$table->string('language')->nullable()->default('Vietsub');
$table->string('notify', 512)->nullable();
$table->string('showtimes', 512)->nullable();
$table->integer('publish_year')->index()->nullable();
$table->boolean('is_shown_in_theater')->default(false);
$table->boolean('is_recommended')->default(false);
$table->boolean('is_copyright')->default(false);
$table->boolean('is_sensitive_content')->default(false);
$table->integer('episode_server_count')->default(0);
$table->integer('episode_data_count')->default(0);
$table->integer('view_total')->default(0);
$table->integer('view_day')->default(0);
$table->integer('view_week')->default(0);
$table->integer('view_month')->default(0);
$table->integer('rating_count')->default(0);
$table->decimal('rating_star', 3, 1)->default(0);
$table->string('update_handler', 1024)->nullable();
$table->string('update_identity', 2048)->nullable();
$table->string('update_checksum', 2048)->nullable();
$table->unsignedBigInteger('user_id')->nullable()->index();
$table->string('user_name')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('movies');
}
}

View File

@@ -0,0 +1,44 @@
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\Schema;
class CreateEpisodesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('episodes', function (Blueprint $table) {
$table->bigIncrements('id');
$table->unsignedBigInteger('movie_id')->index();
$table->foreign('movie_id')->references('id')->on('movies')->onDelete('cascade');
$table->string('server');
$table->string('name');
$table->string('slug');
$table->string('type');
$table->string('link')->nullable();
$table->boolean('has_report')->default(false);
$table->string('report_message', 512)->nullable();
$table->timestamps();
$table->index(['movie_id', 'slug']);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('episodes');
}
}

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateActorMovieTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('actor_movie', function (Blueprint $table) {
$table->unsignedBigInteger('movie_id')->index();
$table->foreign('movie_id')->references('id')->on('movies')->onDelete('cascade');
$table->unsignedBigInteger('actor_id')->index();
$table->foreign('actor_id')->references('id')->on('actors')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('actor_movie');
}
}

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCategoryMovieTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('category_movie', function (Blueprint $table) {
$table->unsignedBigInteger('movie_id')->index();
$table->foreign('movie_id')->references('id')->on('movies')->onDelete('cascade');
$table->unsignedBigInteger('category_id')->index();
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('category_movie');
}
}

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateDirectorMovieTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('director_movie', function (Blueprint $table) {
$table->unsignedBigInteger('movie_id')->index();
$table->foreign('movie_id')->references('id')->on('movies')->onDelete('cascade');
$table->unsignedBigInteger('director_id')->index();
$table->foreign('director_id')->references('id')->on('directors')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('director_movie');
}
}

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMovieRegionTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('movie_region', function (Blueprint $table) {
$table->unsignedBigInteger('movie_id')->index();
$table->foreign('movie_id')->references('id')->on('movies')->onDelete('cascade');
$table->unsignedBigInteger('region_id')->index();
$table->foreign('region_id')->references('id')->on('regions')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('movie_region');
}
}

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMovieStudioTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('movie_studio', function (Blueprint $table) {
$table->unsignedBigInteger('movie_id')->index();
$table->foreign('movie_id')->references('id')->on('movies')->onDelete('cascade');
$table->unsignedBigInteger('studio_id')->index();
$table->foreign('studio_id')->references('id')->on('studios')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('movie_studio');
}
}

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateMovieTagTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('movie_tag', function (Blueprint $table) {
$table->unsignedBigInteger('movie_id')->index();
$table->foreign('movie_id')->references('id')->on('movies')->onDelete('cascade');
$table->unsignedBigInteger('tag_id')->index();
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('movie_tag');
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCatalogsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('catalogs', function (Blueprint $table) {
$table->id();
$table->string('name')->unique();
$table->string('slug')->unique()->index();
$table->integer('paginate')->default(20);
$table->string('value')->nullable();
$table->string('seo_title')->nullable();
$table->string('seo_des')->nullable();
$table->string('seo_key')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('catalogs');
}
}

View File

@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\DB;
class AddFulltextIndexToMovies extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
DB::statement('ALTER TABLE movies ADD FULLTEXT search_index (name, origin_name)');
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
DB::statement('ALTER TABLE movies DROP INDEX search_index');
}
}