package handlers import ( "net/http" "os" "boc/ledger" ) // FinanceHandlerV2 uses RobustClient for ledger integration type FinanceHandlerV2 struct { ledgerClient *ledger.RobustClient } // NewFinanceHandlerV2 creates a new finance handler with ledger integration func NewFinanceHandlerV2() *FinanceHandlerV2 { ledgerDBURL := os.Getenv("LEDGER_DB_URL") if ledgerDBURL == "" { ledgerDBURL = "postgres://postgres:postgres@localhost:5432/aamos_ledger?sslmode=disable" } client, err := ledger.NewRobustClient(ledgerDBURL) if err != nil { // Fallback: create handler without ledger return &FinanceHandlerV2{} } return &FinanceHandlerV2{ledgerClient: client} } func (h *FinanceHandlerV2) GetBalanceSheet(w http.ResponseWriter, r *http.Request) { if h.ledgerClient == nil { writeError(w, http.StatusServiceUnavailable, "ledger not available") return } period := r.URL.Query().Get("period") bs, err := h.ledgerClient.GetBalanceSheet(r.Context(), period) if err != nil { writeError(w, http.StatusInternalServerError, "failed to get balance sheet") return } writeJSON(w, http.StatusOK, map[string]interface{}{ "ok": true, "report": bs, }) } func (h *FinanceHandlerV2) GetIncomeStatement(w http.ResponseWriter, r *http.Request) { if h.ledgerClient == nil { writeError(w, http.StatusServiceUnavailable, "ledger not available") return } period := r.URL.Query().Get("period") is, err := h.ledgerClient.GetIncomeStatement(r.Context(), period) if err != nil { writeError(w, http.StatusInternalServerError, "failed to get income statement") return } writeJSON(w, http.StatusOK, map[string]interface{}{ "ok": true, "report": is, }) } func (h *FinanceHandlerV2) GetMomsReport(w http.ResponseWriter, r *http.Request) { if h.ledgerClient == nil { writeError(w, http.StatusServiceUnavailable, "ledger not available") return } period := r.URL.Query().Get("period") report, err := h.ledgerClient.GetMomsReport(r.Context(), period) if err != nil { writeError(w, http.StatusInternalServerError, "failed to get moms report") return } writeJSON(w, http.StatusOK, map[string]interface{}{ "ok": true, "report": report, }) } func (h *FinanceHandlerV2) GetAccounts(w http.ResponseWriter, r *http.Request) { if h.ledgerClient == nil { writeError(w, http.StatusServiceUnavailable, "ledger not available") return } accounts, err := h.ledgerClient.GetAccounts(r.Context()) if err != nil { writeError(w, http.StatusInternalServerError, "failed to get accounts") return } writeJSON(w, http.StatusOK, map[string]interface{}{ "ok": true, "accounts": accounts, }) }