# src/main.py # 감정 분석 메인 # app.py는 이제 사용안함 from flask import Blueprint, render_template, session, redirect, url_for, jsonify, request from . import db # 이제 __init__에서는 db만 가져옵니다. from .models import Diary, User from .emotion_engine import load_emotion_classifier, predict_emotion from .recommender import Recommender import random bp = Blueprint('main', __name__) print("AI 엔진 및 추천기를 로드합니다...") emotion_classifier = load_emotion_classifier() recommender = Recommender() print("AI 엔진 및 추천기 로드 완료.") emotion_emoji_map = { '기쁨': '😄', '행복': '😊', '사랑': '❤️', '불안': '😟', '슬픔': '😢', '상처': '💔', '분노': '😠', '혐오': '🤢', '짜증': '😤', '놀람': '😮', '중립': '😐', } @bp.route("/") def home(): # "로그인하지 않았다면" 로그인 페이지로 보내야 합니다. if 'user_id' not in session: return redirect(url_for('auth.login')) return render_template("emotion_homepage.html", username=session.get('username')) @bp.route("/api/recommend", methods=["POST"]) def api_recommend(): if 'user_id' not in session: return jsonify({"error": "로그인이 필요합니다."}), 401 user_diary = request.json.get("diary") if not user_diary: return jsonify({"error": "일기 내용이 없습니다."}), 400 predicted_emotion = predict_emotion(emotion_classifier, user_diary) try: user_id = session['user_id'] new_diary_entry = Diary(content=user_diary, emotion=predicted_emotion, user_id=user_id) db.session.add(new_diary_entry) db.session.commit() except Exception as e: print(f"DB 저장 오류: {e}") db.session.rollback() accept_recs = recommender.recommend(predicted_emotion, "수용") change_recs = recommender.recommend(predicted_emotion, "전환") accept_choice = random.choice(accept_recs) if accept_recs else "추천 없음" change_choice = random.choice(change_recs) if change_recs else "추천 없음" recommendation_text = ( f"[ 이 감정을 더 깊이 느끼고 싶다면... (수용) ]
" f"• {accept_choice}

" f"[ 이 감정에서 벗어나고 싶다면... (전환) ]
" f"• {change_choice}" ) response_data = { "emotion": predicted_emotion, "emoji": emotion_emoji_map.get(predicted_emotion, '🤔'), "recommendation": recommendation_text } return jsonify(response_data) @bp.route('/my_diary') def my_diary(): if 'user_id' not in session: return redirect(url_for('auth.login')) user_id = session['user_id'] user_diaries = Diary.query.filter_by(user_id=user_id).order_by(Diary.created_at.desc()).all() return render_template('my_diary.html', diaries=user_diaries)