- 在管理面板中集成网络代理配置显示和平台代理设置 - 添加钱包摘要和交易列表API接口及数据管理 - 实现SSE流式响应中的错误处理机制 - 添加全局HTTP代理环境变量配置支持 - 更新平台表单以支持代理模式选择和自定义代理地址 - 集成钱包交易查询过滤和分页功能 - 优化API错误详情解析和显示格式
77 lines
2.3 KiB
Go
77 lines
2.3 KiB
Go
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,
|
|
})
|
|
}
|