Files
sam-kd/voice_ai/fix_meeting_db.php

115 lines
4.4 KiB
PHP

<?php
// fix_meeting_db.php
// meeting_logs 테이블의 id 컬럼에 AUTO_INCREMENT 속성을 추가하고
// 중복된 id=0 레코드를 수정하는 스크립트
error_reporting(E_ALL);
ini_set('display_errors', 1);
// DB 연결 설정
$host = '127.0.0.1';
$dbname = 'checker'; // .env를 로드하지 못할 경우를 대비한 기본값
$username = 'root';
$password = 'root';
echo "Database Fix Script for meeting_logs\n";
echo "=====================================\n";
// 1. .env 파일 로드 시도
$envPath = __DIR__ . '/../.env';
if (file_exists($envPath)) {
echo "Loading .env file...\n";
$lines = file($envPath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($lines as $line) {
if (strpos($line, '#') === 0) continue;
list($name, $value) = explode('=', $line, 2);
$_ENV[trim($name)] = trim($value);
}
if (isset($_ENV['DB_HOST'])) $host = $_ENV['DB_HOST'];
if (isset($_ENV['DB_NAME'])) $dbname = $_ENV['DB_NAME'];
if (isset($_ENV['DB_USER'])) $username = $_ENV['DB_USER'];
if (isset($_ENV['DB_PASSWORD'])) $password = $_ENV['DB_PASSWORD'];
} else {
echo "Warning: .env file not found. Using default credentials.\n";
}
// 2. DB 연결
try {
echo "Connecting to database ($host, $dbname)...\n";
$pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully.\n";
// 3. 중복된 ID 확인 (id=0)
echo "Checking for duplicate id=0 in meeting_logs...\n";
$stmt = $pdo->query("SELECT COUNT(*) FROM meeting_logs WHERE id = 0");
$count = $stmt->fetchColumn();
echo "Found $count records with id=0.\n";
if ($count > 0) {
// 4. MAX(id) 확인
$stmt = $pdo->query("SELECT MAX(id) FROM meeting_logs");
$maxId = $stmt->fetchColumn();
if (!$maxId) $maxId = 0;
echo "Current MAX(id) is $maxId.\n";
// 5. id=0인 레코드들 업데이트
$stmt = $pdo->query("SELECT * FROM meeting_logs WHERE id = 0");
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
$newId = $maxId + 1;
foreach ($rows as $row) {
// 중복된 id=0 레코드를 삭제하고 새로운 ID로 다시 삽입하는 것이 안전함
// (PRIMARY KEY 제약 조건 때문에 UPDATE가 실패할 수 있음)
// 데이터 복사
$insertSql = "INSERT INTO meeting_logs (tenant_id, user_id, title, audio_file_path, transcript_text, summary_text, created_at, file_expiry_date)
VALUES (:tenant_id, :user_id, :title, :audio_file_path, :transcript_text, :summary_text, :created_at, :file_expiry_date)";
$insertStmt = $pdo->prepare($insertSql);
$insertStmt->execute([
':tenant_id' => $row['tenant_id'],
':user_id' => $row['user_id'],
':title' => $row['title'],
':audio_file_path' => $row['audio_file_path'],
':transcript_text' => $row['transcript_text'],
':summary_text' => $row['summary_text'],
':created_at' => $row['created_at'],
':file_expiry_date' => $row['file_expiry_date']
]);
echo "Moved record (old id=0) to new id=" . $pdo->lastInsertId() . "\n";
}
// 원래 id=0 레코드 삭제
$pdo->exec("DELETE FROM meeting_logs WHERE id = 0");
echo "Deleted old records with id=0.\n";
}
// 6. AUTO_INCREMENT 속성 추가
echo "Applying AUTO_INCREMENT to meeting_logs.id...\n";
try {
$pdo->exec("ALTER TABLE meeting_logs MODIFY id INT AUTO_INCREMENT PRIMARY KEY");
echo "Success: AUTO_INCREMENT applied.\n";
} catch (PDOException $e) {
// 이미 설정되어 있거나 다른 문제가 있는 경우
echo "Note: " . $e->getMessage() . "\n";
// PRIMARY KEY가 이미 있다면 MODIFY만 시도
try {
$pdo->exec("ALTER TABLE meeting_logs MODIFY id INT AUTO_INCREMENT");
echo "Success: Mofified column to AUTO_INCREMENT.\n";
} catch (PDOException $e2) {
echo "Error applying AUTO_INCREMENT: " . $e2->getMessage() . "\n";
}
}
echo "Done.\n";
} catch (PDOException $e) {
echo "Database Error: " . $e->getMessage() . "\n";
exit(1);
}
?>