68 lines
2.7 KiB
Python
68 lines
2.7 KiB
Python
"""
|
||
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()
|