daShangDao_psiWebApp/verifyTool/internal/handler/token_handler.go
97694731 44ba8a631c
Some checks failed
CI / build (20.x) (push) Waiting to run
CI / lint (push) Waiting to run
CI / test (push) Waiting to run
CI / deploy-preview (push) Blocked by required conditions
CI / security (push) Waiting to run
CI / build (18.x) (push) Has been cancelled
1
2026-06-15 18:09:39 +08:00

195 lines
4.9 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package handler
import (
"encoding/json"
"log"
"net/http"
"strconv"
"kfz-goods-pricing/internal/repository"
)
// TokenHandler Token处理器
type TokenHandler struct {
tokenRepo *repository.TokenRepository
}
// NewTokenHandler 创建Token处理器实例
func NewTokenHandler(tokenRepo *repository.TokenRepository) *TokenHandler {
return &TokenHandler{
tokenRepo: tokenRepo,
}
}
// TokenResponse Token响应结构
type TokenResponse struct {
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,omitempty"`
}
// TokenInput Token输入结构
type TokenInput struct {
Username string `json:"username"`
Token string `json:"token"`
}
// BatchAddTokens 批量添加TokenJSON数组: [{"username":"","token":""},...]
func (h *TokenHandler) BatchAddTokens(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusOK)
return
}
var inputs []TokenInput
if err := json.NewDecoder(r.Body).Decode(&inputs); err != nil {
log.Printf("BatchAddTokens - decode error: %v", err)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(TokenResponse{Code: 400, Message: "invalid request body"})
return
}
log.Printf("BatchAddTokens - received %d tokens", len(inputs))
if len(inputs) == 0 {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(TokenResponse{Code: 400, Message: "empty array"})
return
}
// 逐条插入
var failed []TokenInput
for _, input := range inputs {
if input.Username == "" || input.Token == "" {
failed = append(failed, input)
continue
}
_, err := h.tokenRepo.Insert(input.Username, input.Token, true)
if err != nil {
log.Printf("BatchAddTokens - insert error: %v", err)
failed = append(failed, input)
}
}
w.Header().Set("Content-Type", "application/json")
if len(failed) > 0 {
json.NewEncoder(w).Encode(TokenResponse{
Code: 207,
Message: "partial success",
Data: map[string]interface{}{"failed": failed},
})
return
}
json.NewEncoder(w).Encode(TokenResponse{Code: 200, Message: "success"})
}
// GetAllTokens 查询所有Token
func (h *TokenHandler) GetAllTokens(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusOK)
return
}
records, err := h.tokenRepo.GetAll()
if err != nil {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(TokenResponse{Code: 500, Message: err.Error()})
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(TokenResponse{Code: 200, Message: "success", Data: records})
}
// DeleteToken 删除Token
func (h *TokenHandler) DeleteToken(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusOK)
return
}
// 解析 form-data 或 URL 参数
r.ParseMultipartForm(32 << 20)
r.ParseForm()
idStr := r.PostForm.Get("id")
if idStr == "" {
// 尝试从URL获取
idStr = r.URL.Query().Get("id")
}
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
http.Error(w, "invalid id", http.StatusBadRequest)
return
}
err = h.tokenRepo.Delete(id)
if err != nil {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(TokenResponse{Code: 500, Message: err.Error()})
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(TokenResponse{Code: 200, Message: "success"})
}
// UpdateToken 修改Token
func (h *TokenHandler) UpdateToken(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusOK)
return
}
// 解析 form-data
r.ParseMultipartForm(32 << 20)
r.ParseForm()
idStr := r.PostForm.Get("id")
username := r.PostForm.Get("username")
token := r.PostForm.Get("token")
isEnableStr := r.PostForm.Get("is_enable")
id, err := strconv.ParseInt(idStr, 10, 64)
if err != nil {
http.Error(w, "invalid id", http.StatusBadRequest)
return
}
isEnable := true
if isEnableStr == "0" || isEnableStr == "false" {
isEnable = false
}
err = h.tokenRepo.Update(id, username, token, isEnable)
if err != nil {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(TokenResponse{Code: 500, Message: err.Error()})
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(TokenResponse{Code: 200, Message: "success"})
}
// GetEnabledTokens 获取所有启用的Token
func (h *TokenHandler) GetEnabledTokens(w http.ResponseWriter, r *http.Request) {
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusOK)
return
}
records, err := h.tokenRepo.GetEnabledTokens()
if err != nil {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(TokenResponse{Code: 500, Message: err.Error()})
return
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(TokenResponse{Code: 200, Message: "success", Data: records})
}