|
|
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 |
|
|
|
|
|
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() |
|
|
|
|
|
migrate_database(app) |
|
|
|
|
|
create_admin_user() |
|
|
|
|
|
return app |
|
|
|
|
|
def migrate_database(app): |
|
|
"""๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ง์ด๊ทธ๋ ์ด์
""" |
|
|
try: |
|
|
|
|
|
db_uri = app.config['SQLALCHEMY_DATABASE_URI'] |
|
|
if db_uri.startswith('sqlite:///'): |
|
|
db_path = db_uri.replace('sqlite:///', '') |
|
|
|
|
|
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() |
|
|
|
|
|
|
|
|
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 ์ปฌ๋ผ ์ถ๊ฐ ์๋ฃ") |
|
|
|
|
|
|
|
|
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='uploaded_file'") |
|
|
if cursor.fetchone(): |
|
|
|
|
|
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 ์ปฌ๋ผ ์ถ๊ฐ ์๋ฃ") |
|
|
|
|
|
|
|
|
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}') |
|
|
|
|
|
|
|
|
|