File size: 4,795 Bytes
b55a977
9d377df
 
b55a977
9d377df
 
 
 
 
 
 
 
 
 
 
b55a977
 
 
 
 
 
 
 
9fa456d
b55a977
 
9d377df
b55a977
 
 
 
 
 
9d377df
 
 
 
b55a977
 
 
9d377df
9fa456d
9d377df
 
 
 
 
 
 
 
 
 
9fa456d
9d377df
 
 
 
 
 
 
9fa456d
9d377df
9fa456d
 
9d377df
 
9fa456d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9d377df
 
9fa456d
9d377df
9fa456d
 
 
9d377df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
from flask import Flask
from flask_login import LoginManager
from app.database import db, User
import os
import sqlite3
from pathlib import Path

login_manager = LoginManager()
login_manager.login_view = 'main.login'
login_manager.login_message = '๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.'
login_manager.login_message_category = 'info'

@login_manager.user_loader
def load_user(user_id):
    return User.query.get(int(user_id))

def create_app():
    # ํ…œํ”Œ๋ฆฟ ํด๋” ๊ฒฝ๋กœ ๋ช…์‹œ์  ์„ค์ •
    template_folder = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'templates')
    app = Flask(__name__, template_folder=template_folder)
    app.config['SECRET_KEY'] = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production')
    app.config['SQLALCHEMY_DATABASE_URI'] = os.getenv('DATABASE_URL', 'sqlite:///finance_analysis.db')
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024  # 100MB ํŒŒ์ผ ํฌ๊ธฐ ์ œํ•œ
    
    db.init_app(app)
    login_manager.init_app(app)
    
    from app.routes import main_bp
    app.register_blueprint(main_bp)
    
    with app.app_context():
        db.create_all()
        # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (nickname ์ปฌ๋Ÿผ ์ถ”๊ฐ€)
        migrate_database(app)
        # ์ดˆ๊ธฐ ๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑ
        create_admin_user()
    
    return app

def migrate_database(app):
    """๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜"""
    try:
        # ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค URI์—์„œ ๊ฒฝ๋กœ ์ถ”์ถœ
        db_uri = app.config['SQLALCHEMY_DATABASE_URI']
        if db_uri.startswith('sqlite:///'):
            db_path = db_uri.replace('sqlite:///', '')
            # ์ƒ๋Œ€ ๊ฒฝ๋กœ์ธ ๊ฒฝ์šฐ instance ํด๋” ๊ธฐ์ค€์œผ๋กœ ์ฒ˜๋ฆฌ
            if not os.path.isabs(db_path):
                db_path = os.path.join(app.instance_path, db_path)
            
            if not os.path.exists(db_path):
                print(f"[๋งˆ์ด๊ทธ๋ ˆ์ด์…˜] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค: {db_path}")
                return
            
            conn = sqlite3.connect(db_path)
            cursor = conn.cursor()
            
            # user ํ…Œ์ด๋ธ”์— nickname ์ปฌ๋Ÿผ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
            cursor.execute("PRAGMA table_info(user)")
            user_columns = [column[1] for column in cursor.fetchall()]
            
            if 'nickname' not in user_columns:
                print("[๋งˆ์ด๊ทธ๋ ˆ์ด์…˜] user ํ…Œ์ด๋ธ”์— nickname ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์ค‘...")
                cursor.execute("ALTER TABLE user ADD COLUMN nickname VARCHAR(80)")
                conn.commit()
                print("[๋งˆ์ด๊ทธ๋ ˆ์ด์…˜] user.nickname ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์™„๋ฃŒ")
            
            # uploaded_file ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
            cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='uploaded_file'")
            if cursor.fetchone():
                # uploaded_file ํ…Œ์ด๋ธ”์— uploaded_by ์ปฌ๋Ÿผ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
                cursor.execute("PRAGMA table_info(uploaded_file)")
                uploaded_file_columns = [column[1] for column in cursor.fetchall()]
                
                if 'uploaded_by' not in uploaded_file_columns:
                    print("[๋งˆ์ด๊ทธ๋ ˆ์ด์…˜] uploaded_file ํ…Œ์ด๋ธ”์— uploaded_by ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์ค‘...")
                    cursor.execute("ALTER TABLE uploaded_file ADD COLUMN uploaded_by INTEGER")
                    conn.commit()
                    print("[๋งˆ์ด๊ทธ๋ ˆ์ด์…˜] uploaded_file.uploaded_by ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์™„๋ฃŒ")
                
                # uploaded_file ํ…Œ์ด๋ธ”์— parent_file_id ์ปฌ๋Ÿผ์ด ์žˆ๋Š”์ง€ ํ™•์ธ
                if 'parent_file_id' not in uploaded_file_columns:
                    print("[๋งˆ์ด๊ทธ๋ ˆ์ด์…˜] uploaded_file ํ…Œ์ด๋ธ”์— parent_file_id ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์ค‘...")
                    cursor.execute("ALTER TABLE uploaded_file ADD COLUMN parent_file_id INTEGER")
                    conn.commit()
                    print("[๋งˆ์ด๊ทธ๋ ˆ์ด์…˜] uploaded_file.parent_file_id ์ปฌ๋Ÿผ ์ถ”๊ฐ€ ์™„๋ฃŒ")
            
            conn.close()
            print("[๋งˆ์ด๊ทธ๋ ˆ์ด์…˜] ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์™„๋ฃŒ")
    except Exception as e:
        print(f"[๋งˆ์ด๊ทธ๋ ˆ์ด์…˜] ์˜ค๋ฅ˜ ๋ฐœ์ƒ: {e}")
        import traceback
        traceback.print_exc()

def create_admin_user():
    """์ดˆ๊ธฐ ๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑ"""
    admin_username = 'soymedia'
    admin_password = 's0ymedi@1@34'
    
    admin = User.query.filter_by(username=admin_username).first()
    if not admin:
        admin = User(username=admin_username, is_admin=True, is_active=True)
        admin.set_password(admin_password)
        db.session.add(admin)
        db.session.commit()
        print(f'๊ด€๋ฆฌ์ž ๊ณ„์ •์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค: {admin_username}')