Spaces:
Running
Running
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"] | |