File size: 1,721 Bytes
daa81fb
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3de8e98
daa81fb
 
 
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
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"]