diff --git a/backend/app/Model/Store.php b/backend/app/Model/Store.php new file mode 100644 index 0000000..c132a5a --- /dev/null +++ b/backend/app/Model/Store.php @@ -0,0 +1,68 @@ + 'integer', + 'company_id' => 'integer', + 'platform_id' => 'integer', + 'warehouse_id' => 'integer', + 'currency_id' => 'integer', + 'enabled' => 'boolean', + 'ext' => 'array', + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + ]; +} diff --git a/backend/migrations/2025_11_10_073400_create_companies_table.php b/backend/migrations/2025_11_10_073400_create_companies_table.php index 361e033..d0cb429 100644 --- a/backend/migrations/2025_11_10_073400_create_companies_table.php +++ b/backend/migrations/2025_11_10_073400_create_companies_table.php @@ -3,6 +3,7 @@ use Hyperf\Database\Schema\Schema; use Hyperf\Database\Schema\Blueprint; use Hyperf\Database\Migrations\Migration; +use Hyperf\DbConnection\Db; return new class extends Migration { @@ -16,9 +17,17 @@ return new class extends Migration $table->string('name')->unique()->comment('公司名 英文'); $table->string('label')->nullable()->default('null')->comment('公司名 中文'); $table->boolean('enabled')->default('true')->comment('激活状态'); - $table->text('ext')->default('null')->comment('额外信息'); + $table->jsonb('ext')->nullable()->comment('额外信息'); $table->timestampsTz(); + + // 索引 + $table->index('enabled', 'idx_companies_enabled'); + $table->index('created_at', 'idx_companies_created_at'); + $table->index('updated_at', 'idx_companies_updated_at'); }); + + // 为 JSONB 字段创建 GIN 索引,支持高效的 JSON 查询 + Db::statement('CREATE INDEX idx_companies_ext ON companies USING GIN (ext)'); } /** diff --git a/backend/migrations/2025_11_13_050115_create_platforms_table.php b/backend/migrations/2025_11_13_050115_create_platforms_table.php new file mode 100644 index 0000000..1217ab9 --- /dev/null +++ b/backend/migrations/2025_11_13_050115_create_platforms_table.php @@ -0,0 +1,74 @@ +integer('id')->primary()->comment('主键 - 平台 ID'); + $table->string('name', 100)->unique()->comment('平台名称'); + $table->string('label', 100)->nullable()->comment('平台名称 EN'); + $table->boolean('enabled')->default(true)->comment('平台状态'); + + $table->timestampsTz(); + + // 索引 + $table->index('name', 'idx_platforms_name'); + $table->index('created_at', 'idx_platforms_created_at'); + $table->index('updated_at', 'idx_platforms_updated_at'); + }); + + // 填充初始数据 + $platforms = [ + ['id' => 1, 'name' => 'JD'], + ['id' => 2, 'name' => 'Tmall'], + ['id' => 3, 'name' => 'RedBook'], + ['id' => 4, 'name' => 'Rakuten'], + ['id' => 5, 'name' => 'Kaola'], + ['id' => 6, 'name' => 'PDD'], + ['id' => 7, 'name' => 'Wechat'], + ['id' => 9, 'name' => '1688'], + ['id' => 10, 'name' => 'ERP'], + ['id' => 11, 'name' => 'DeWu'], + ['id' => 17, 'name' => 'Amazon Japan'], + ['id' => 18, 'name' => 'LAZADA'], + ['id' => 19, 'name' => 'Shopify'], + ['id' => 20, 'name' => 'DouYin'], + ['id' => 21, 'name' => 'YouZan'], + ['id' => 22, 'name' => 'Yahoo Japan'], + ['id' => 23, 'name' => 'Coupang'], + ['id' => 24, 'name' => 'Offline'], + ['id' => 25, 'name' => 'Shopee'], + ['id' => 26, 'name' => 'Naver'], + ['id' => 27, 'name' => 'Wechat Video'], + ['id' => 28, 'name' => 'VIP'], + ['id' => 29, 'name' => 'Goofish'], + ]; + + foreach ($platforms as $platform) { + Db::table('platforms')->insert([ + 'id' => $platform['id'], + 'name' => $platform['name'], + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ]); + } + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('platforms'); + } +};