from __future__ import annotations import sys from pathlib import Path import streamlit as st from jarca_ledger_mcp.adapters.streamlit import overview_gateway # Streamlit executes this file as a script, so ensure absolute dashboard imports # resolve identically to package imports used by tests. if __package__ in (None, ""): sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) st.set_page_config(page_title="Jarca Ledger", page_icon="๐Ÿ’ฐ", layout="wide") from dashboard.common import ( clear_cache, get_db_path, get_transfer_review_items, # noqa: F401 inject_app_css, render_dashboard_body, render_sidebar_nav, validate_dashboard_page, ) # noqa: F401 from dashboard.authentication import require_dashboard_authentication from dashboard.page_views.accounts import page_accounts from dashboard.page_views.assets import page_assets from dashboard.page_views.categories import page_categories from dashboard.page_views.cross_transfer_review import page_cross_transfer_review from dashboard.page_views.imports import page_imports from dashboard.page_views.monthly_settlement import page_monthly_settlement from dashboard.page_views.overview import page_overview from dashboard.page_views.rules import page_rules from dashboard.page_views.transactions import page_transactions from dashboard.page_views.uncategorized import page_uncategorized def main() -> None: if not require_dashboard_authentication(): return db_path = get_db_path() db_status = overview_gateway.get_ledger_db_status(db_path=db_path, include_hash=False, include_integrity=False) inject_app_css() if not db_status.get("success"): st.error("Ledger DB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: " + db_status.get("error", "ledger database is unavailable")) return pages = ["์›”์ •์‚ฐ", "์š”์•ฝ", "์ž์‚ฐ/๋งˆ๊ฐ", "๊ฑฐ๋ž˜๋‚ด์—ญ", "ํ™•์ธํ•„์š” ํ", "๋ฏธ๋ถ„๋ฅ˜", "๋ถ„๋ฅ˜ ๊ทœ์น™", "์นดํ…Œ๊ณ ๋ฆฌ", "๊ณ„์ขŒ", "Import"] query_page = st.query_params.get("page") page = validate_dashboard_page(query_page, pages) st.session_state["dashboard_page"] = page with st.sidebar: st.markdown("## ๐Ÿ’ฐ Jarca Ledger") st.caption("๊ฐ€๊ณ„๋ถ€ ยท ๋ถ„๋ฅ˜ ยท Import ์šด์˜ ์ฝ˜์†”") st.markdown('
๋ฉ”๋‰ด
', unsafe_allow_html=True) page = render_sidebar_nav(pages, page) if st.button("์ƒˆ๋กœ๊ณ ์นจ", key="refresh_button", use_container_width=True): clear_cache() st.rerun() dispatch = { "์›”์ •์‚ฐ": page_monthly_settlement, "์š”์•ฝ": page_overview, "์ž์‚ฐ/๋งˆ๊ฐ": page_assets, "๊ฑฐ๋ž˜๋‚ด์—ญ": page_transactions, "ํ™•์ธํ•„์š” ํ": page_cross_transfer_review, "๋ฏธ๋ถ„๋ฅ˜": page_uncategorized, "๋ถ„๋ฅ˜ ๊ทœ์น™": page_rules, "์นดํ…Œ๊ณ ๋ฆฌ": page_categories, "๊ณ„์ขŒ": page_accounts, "Import": page_imports, } render_dashboard_body(page, lambda: dispatch[page](db_path)) if __name__ == "__main__": main()