import streamlit as st from app.db import supabase from app.chat import list_chat_sessions, create_chat_session, ensure_chat_session def restore_user_session_if_needed(): """Try to restore Supabase user session into st.session_state['user'] if missing.""" if st.session_state.get("user"): return try: current = supabase.auth.get_session() if current and getattr(current, "user", None): u = current.user st.session_state["user"] = {"id": u.id, "email": getattr(u, "email", None)} return if st.session_state.get("sb_session"): toks = st.session_state["sb_session"] if toks.get("access_token") and toks.get("refresh_token"): supabase.auth.set_session(toks["access_token"], toks["refresh_token"]) # may refresh ures = supabase.auth.get_user() user_obj = getattr(ures, "user", None) if user_obj: st.session_state["user"] = {"id": user_obj.id, "email": getattr(user_obj, "email", None)} except Exception: pass def ensure_active_session(user_id: str): """Ensure st.session_state['session_id'] points to an existing session; create one if needed.""" sid = st.session_state.get("session_id") if not sid: sessions = list_chat_sessions(user_id, limit=1) if sessions: sid = sessions[0]["id"] else: sid = create_chat_session(user_id, title="Percakapan Baru") st.session_state["session_id"] = sid try: ensure_chat_session(user_id, sid) # make sure exists in DB if missing except Exception: pass return st.session_state["session_id"]