You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.3 KiB

5 months ago
<?php
namespace Database\Seeders;
use App\Models\Competition;
use App\Models\CompetitionTrack;
2 months ago
use App\Support\DefaultTrackScoringSheets;
1 month ago
use App\Support\SignupFieldI18n;
5 months ago
use Illuminate\Database\Seeder;
/**
1 month ago
* 与最新原型 user-form / event-site 四个细分赛道对齐。
5 months ago
*
* php artisan db:seed --class=CompetitionDefaultTracksSeeder
*/
class CompetitionDefaultTracksSeeder extends Seeder
{
1 month ago
/** 历史赛道编码,同步时停用 */
private const LEGACY_TRACK_CODES = [
'tese_xiaofei',
'jiankang_xiaofei',
'shang_wen_lv',
'xiaofei_ai',
];
5 months ago
public function run(): void
{
2 months ago
$envId = (int) env('DEFAULT_TRACKS_COMPETITION_ID', 0);
$competitions = $envId > 0
? Competition::query()->whereKey($envId)->get()
: Competition::query()->orderBy('id')->get();
if ($competitions->isEmpty()) {
$this->command?->warn('No competition found, skip tracks seed.');
5 months ago
return;
}
2 months ago
foreach ($competitions as $competition) {
1 month ago
CompetitionTrack::query()
->where('competition_id', $competition->id)
->whereIn('track_code', self::LEGACY_TRACK_CODES)
->update(['is_enabled' => false]);
1 month ago
foreach (SignupFieldI18n::prototypeTracks() as $row) {
2 months ago
$sheet = DefaultTrackScoringSheets::forTrackCode($row['track_code'], $row['title']);
CompetitionTrack::query()->updateOrCreate(
[
'competition_id' => $competition->id,
'track_code' => $row['track_code'],
],
[
'title' => $row['title'],
1 month ago
'title_en' => SignupFieldI18n::trackTitlesEn()[$row['title']] ?? null,
2 months ago
'description' => $row['description'],
1 month ago
'description_en' => SignupFieldI18n::trackDescriptionsEn()[$row['title']] ?? null,
2 months ago
'sort' => $row['sort'],
'is_enabled' => true,
'scoring_sheet_json' => $sheet,
]
);
}
$this->command?->info(
1 month ago
'Synced '.count(SignupFieldI18n::prototypeTracks())." tracks for competition #{$competition->id}."
5 months ago
);
}
}
}