package httpapi import ( "net/http" "github.com/easyai/easyai-ai-gateway/apps/api/internal/auth" "github.com/easyai/easyai-ai-gateway/apps/api/internal/store" ) func (s *Server) getWallet(w http.ResponseWriter, r *http.Request) { user, ok := auth.UserFromContext(r.Context()) if !ok { writeError(w, http.StatusUnauthorized, "unauthorized") return } summary, err := s.store.GetWalletSummary(r.Context(), user, r.URL.Query().Get("currency")) if err != nil { s.logger.Error("get wallet failed", "error", err) writeError(w, http.StatusInternalServerError, "get wallet failed") return } writeJSON(w, http.StatusOK, summary) } func (s *Server) listWalletTransactions(w http.ResponseWriter, r *http.Request) { user, ok := auth.UserFromContext(r.Context()) if !ok { writeError(w, http.StatusUnauthorized, "unauthorized") return } query := r.URL.Query() page, err := positiveQueryInt(query.Get("page"), 1) if err != nil { writeError(w, http.StatusBadRequest, "invalid page") return } pageSizeRaw := query.Get("pageSize") if pageSizeRaw == "" { pageSizeRaw = query.Get("limit") } pageSize, err := positiveQueryInt(pageSizeRaw, 50) if err != nil { writeError(w, http.StatusBadRequest, "invalid pageSize") return } createdFrom, err := parseTaskListTime(query.Get("createdFrom"), query.Get("from")) if err != nil { writeError(w, http.StatusBadRequest, "invalid createdFrom") return } createdTo, err := parseTaskListTime(query.Get("createdTo"), query.Get("to")) if err != nil { writeError(w, http.StatusBadRequest, "invalid createdTo") return } result, err := s.store.ListWalletTransactions(r.Context(), user, store.WalletTransactionListFilter{ Query: firstNonEmpty(query.Get("q"), query.Get("query")), Direction: query.Get("direction"), TransactionType: query.Get("transactionType"), CreatedFrom: createdFrom, CreatedTo: createdTo, Page: page, PageSize: pageSize, }) if err != nil { s.logger.Error("list wallet transactions failed", "error", err) writeError(w, http.StatusInternalServerError, "list wallet transactions failed") return } writeJSON(w, http.StatusOK, map[string]any{ "items": result.Items, "total": result.Total, "page": result.Page, "pageSize": result.PageSize, }) }