fix(core,board,page,ecommerce,basic,pay): FULLTEXT 게이트·검색 실패 표면화와 페이지네이션/접두사 결함 정비
- 공개 : MATCH 는 커버 인덱스가 있을 때만 조립 — 부재 시 LIKE 폴백 + 1회 경고, 카테고리 검색 예외를 categories_failed/search_failed 로 표면화하고 basic 템플릿이 오류 안내 렌더 - 공개 동근원: paginate page 명시 전달 (언어팩 check-updates, 상품 문의 목록) - 공개 동근원: raw SQL 접두사/별칭 하드코딩 정리 (board 시더, 7.0.6 업그레이드 스텝, 결제 3플러그인 컨트롤러 51지점 모델 파생 전환) - audit 룰 3종 신설 + repository-raw-hardcoded-table 컨트롤러 확대, 확장 TestCase 오토로더 중복 선언 가드 16지점, ja 언어팩 동기
This commit is contained in:
@@ -4,6 +4,7 @@ namespace App\Upgrades\Data\V7_0_6\Migrations;
|
||||
|
||||
use App\Extension\Upgrade\DataMigration;
|
||||
use App\Extension\UpgradeContext;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
/**
|
||||
@@ -20,20 +21,29 @@ use Illuminate\Support\Facades\Schema;
|
||||
* 대기합니다. 새 색인을 먼저 만들고 기존 색인을 나중에 지우므로, 중간에 중단되어도 조회가
|
||||
* 색인 없이 남는 구간은 없습니다.
|
||||
*
|
||||
* idempotent: 이미 교체된 대상은 건너뜁니다. V-1 안전: Facades\Schema 만 사용합니다.
|
||||
* idempotent: 이미 교체된 대상은 건너뜁니다. V-1 안전: Facades\Schema / Facades\DB 만 사용합니다.
|
||||
*/
|
||||
class AddTiebreakToCoreListIndexes implements DataMigration
|
||||
{
|
||||
/**
|
||||
* 대상 [테이블 => [신규 색인명, 컬럼, 교체 대상 기존 색인명(없으면 null)]]
|
||||
* 대상을 반환합니다: [테이블 => [신규 색인명, 컬럼, 교체 대상 기존 색인명(없으면 null)]]
|
||||
*
|
||||
* @var array<string, array{0: string, 1: array<int, string>, 2: string|null}>
|
||||
* activity_logs 의 기존 색인은 Laravel 자동 색인명(접두사 포함 테이블명에서 파생)이라
|
||||
* 리터럴 `g7_` 을 박으면 다른 접두사 설치에서 조용한 no-op(중복 색인 잔존)이 된다 —
|
||||
* `DB::getTablePrefix()` 로 동적 조립한다.
|
||||
*
|
||||
* @return array<string, array{0: string, 1: array<int, string>, 2: string|null}>
|
||||
*/
|
||||
private const TARGETS = [
|
||||
'activity_logs' => ['idx_activity_logs_created_id', ['created_at', 'id'], 'g7_activity_logs_created_at_index'],
|
||||
'notification_logs' => ['idx_notification_logs_created_id', ['created_at', 'id'], null],
|
||||
'users' => ['idx_users_created_id', ['created_at', 'id'], 'idx_users_created_at'],
|
||||
];
|
||||
private function targets(): array
|
||||
{
|
||||
$prefix = DB::getTablePrefix();
|
||||
|
||||
return [
|
||||
'activity_logs' => ['idx_activity_logs_created_id', ['created_at', 'id'], $prefix.'activity_logs_created_at_index'],
|
||||
'notification_logs' => ['idx_notification_logs_created_id', ['created_at', 'id'], null],
|
||||
'users' => ['idx_users_created_id', ['created_at', 'id'], 'idx_users_created_at'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 마이그레이션 식별자를 반환합니다.
|
||||
@@ -52,7 +62,7 @@ class AddTiebreakToCoreListIndexes implements DataMigration
|
||||
*/
|
||||
public function run(UpgradeContext $context): void
|
||||
{
|
||||
foreach (self::TARGETS as $table => [$newIndex, $columns, $oldIndex]) {
|
||||
foreach ($this->targets() as $table => [$newIndex, $columns, $oldIndex]) {
|
||||
if (! Schema::hasTable($table)) {
|
||||
$context->logger->info("[core:7.0.6] 테이블 부재 — 색인 교체 스킵: {$table}");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user