""" DB 업데이트 스크립트: User 테이블에 승인 관련 필드 추가 - is_approved: 가입 승인 여부 - approval_token: 승인 토큰 (텔레그램 버튼 콜백용) """ import sys import os # 프로젝트 루트를 sys.path에 추가 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from app import app from backend.models.user import db def update_user_table(): """User 테이블에 승인 관련 컬럼 추가""" with app.app_context(): try: # 컬럼 존재 여부 확인 inspector = db.inspect(db.engine) columns = [col['name'] for col in inspector.get_columns('user')] if 'is_approved' not in columns: print("✅ is_approved 컬럼 추가 중...") db.session.execute(db.text( "ALTER TABLE user ADD COLUMN is_approved BOOLEAN DEFAULT 0 NOT NULL" )) print("✅ is_approved 컬럼 추가 완료") else: print("ℹ️ is_approved 컬럼이 이미 존재합니다.") if 'approval_token' not in columns: print("✅ approval_token 컬럼 추가 중...") # SQLite는 UNIQUE 제약조건을 ALTER TABLE에서 직접 추가할 수 없음 # 먼저 컬럼만 추가하고, 나중에 인덱스로 UNIQUE 처리 db.session.execute(db.text( "ALTER TABLE user ADD COLUMN approval_token VARCHAR(100)" )) print("✅ approval_token 컬럼 추가 완료") # UNIQUE 인덱스 생성 try: db.session.execute(db.text( "CREATE UNIQUE INDEX idx_user_approval_token ON user(approval_token)" )) print("✅ approval_token UNIQUE 인덱스 생성 완료") except Exception as e: print(f"ℹ️ UNIQUE 인덱스 생성 스킵 (이미 존재하거나 NULL 값 때문): {e}") else: print("ℹ️ approval_token 컬럼이 이미 존재합니다.") # 기존 사용자들은 자동 승인 처리 print("✅ 기존 사용자 자동 승인 처리 중...") db.session.execute(db.text( "UPDATE user SET is_approved = 1 WHERE is_approved = 0" )) db.session.commit() print("✅ 데이터베이스 업데이트 완료!") except Exception as e: print(f"❌ 오류 발생: {e}") db.session.rollback() raise if __name__ == "__main__": update_user_table()