feat: 新增命令和迁移以优化抽奖数据管理

- 新增 `LotteryDevPruneDrawBacklogCommand` 命令,用于按营业日区间删除积压的抽奖期号,并支持干运行和级联删除相关数据。
- 添加多个迁移文件以同步数据库结构,包括重命名重复的迁移文件、添加用户名字段、迁移抽奖状态到领域字典、合并显示名称字段、扩展审计日志目标类型字段,以及细化后台权限管理。
- 更新 `AdminRbacAndUserSeeder` 以包含角色代码字段,确保一致性与可维护性。
This commit is contained in:
2026-05-25 15:33:33 +08:00
parent e27a00f260
commit 6a8cdbe3b8
9 changed files with 258 additions and 4 deletions

View File

@@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
/**
* 将历史上重复时间戳的 migration 文件名同步到 migrations 表,避免重命名后被视为未执行。
*
* 新装库UPDATE 命中 0 行,无影响。
* 已有库:把旧文件名改为新文件名,与重命名后的 PHP 文件一致。
*
* 若从旧文件名升级且 `php artisan migrate` 报「列已存在」等重复执行错误,请先单独执行本文件再全量 migrate
* php artisan migrate --path=database/migrations/2026_05_09_119999_rename_duplicate_migration_filenames_in_table.php
* php artisan migrate
*/
return new class extends Migration
{
/** @var array<string, string> */
private const RENAMES = [
'2026_05_09_120000_add_username_and_nullable_email_to_admin_users' => '2026_05_09_120001_add_username_and_nullable_email_to_admin_users',
'2026_05_09_120000_migrate_draw_status_to_domain_dict' => '2026_05_09_120002_migrate_draw_status_to_domain_dict',
'2026_05_25_120000_consolidate_play_display_name_columns' => '2026_05_25_120001_consolidate_play_display_name_columns',
'2026_05_25_120000_expand_audit_logs_target_type' => '2026_05_25_120002_expand_audit_logs_target_type',
'2026_05_25_120000_refine_admin_permission_granularity' => '2026_05_25_120003_refine_admin_permission_granularity',
];
public function up(): void
{
foreach (self::RENAMES as $from => $to) {
DB::table('migrations')->where('migration', $from)->update(['migration' => $to]);
}
}
public function down(): void
{
foreach (self::RENAMES as $from => $to) {
DB::table('migrations')->where('migration', $to)->update(['migration' => $from]);
}
}
};

View File

@@ -0,0 +1,25 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
/**
* admin_api_resources.code 最长可达 128;中间件将完整 code 写入 audit_logs.target_type。
*/
return new class extends Migration
{
public function up(): void
{
Schema::table('audit_logs', function (Blueprint $table): void {
$table->string('target_type', 128)->nullable()->change();
});
}
public function down(): void
{
Schema::table('audit_logs', function (Blueprint $table): void {
$table->string('target_type', 32)->nullable()->change();
});
}
};