feat: 从黄果 NET hgdjnet-server 9bfbafe 导入 HKDJ 官网后端

来源:hgdjnet-server 9bfbafe10d417deea959bd53117bc88a10e60a83
项目身份 HKDJ / JHA-216,独立官网仓库,Jenkins 守卫键 hkdjnet
测试目录 /server/hkdj_net,App/Web API 30331/30332

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-10-16 11:20:04 +08:00
co-authored by Claude Opus 4.7
parent 99a4854def
commit 85c0071fd8
653 changed files with 85000 additions and 0 deletions
+106
View File
@@ -0,0 +1,106 @@
package recomapi
import (
"encoding/json"
"fmt"
"hkdj-web-server/pub/common/log"
"hkdj-web-server/pub/common/srvdef"
"hkdj-web-server/pub/common/utils"
"net/http"
)
func InsertOneItem(url string, key string, itemInfo *RSItemInfo) *srvdef.SrvErr {
reqUrl := url + "/api/item"
resp := &APIResult{}
reqBody, _ := json.Marshal(itemInfo)
header := map[string]string{"X-API-Key": key}
code, err := utils.POSTJsonWithJResp(resp, reqUrl, header, reqBody)
if err != nil {
log.Error("recomapi:InsertOneItem POSTJsonWithJResp failed",
log.Any("reqUrl", reqUrl), log.E(err))
return srvdef.New(srvdef.Err, "", "")
}
if code != http.StatusOK {
log.Error("recomapi:InsertOneItem POSTJsonWithJResp code error.",
log.Any("reqUrl", reqUrl), log.Any("code", code))
return srvdef.New(srvdef.Err, "", "")
}
return nil
}
func InsertManyItems(url string, key string, itemInfos RSItemInfoList) *srvdef.SrvErr {
reqUrl := url + "/api/items"
reqBody, _ := json.Marshal(itemInfos)
header := map[string]string{"X-API-Key": key}
code, err := utils.POSTJsonWithJResp(nil, reqUrl, header, reqBody)
if err != nil {
log.Error("recomapi:InsertManyItems POSTJsonWithJResp failed",
log.Any("reqUrl", reqUrl), log.E(err))
return srvdef.New(srvdef.Err, "", "")
}
if code != http.StatusOK {
log.Error("recomapi:InsertManyItems POSTJsonWithJResp code error.",
log.Any("reqUrl", reqUrl), log.Any("code", code))
return srvdef.New(srvdef.Err, "", "")
}
return nil
}
func GetOneItem(url string, key string, itemId string) (*RSItemInfo, *srvdef.SrvErr) {
reqUrl := fmt.Sprintf("%s/api/item/%s", url, itemId)
resp := &RSItemInfo{}
header := map[string]string{"X-API-Key": key}
code, err := utils.GetWithJResp(resp, reqUrl, header, nil)
if err != nil {
log.Error("recomapi:GetOneItem GetWithJResp failed",
log.Any("reqUrl", reqUrl), log.E(err))
return nil, srvdef.New(srvdef.Err, "", "")
}
if code != http.StatusOK {
log.Error("recomapi:GetOneItem GetWithJResp code error.",
log.Any("reqUrl", reqUrl), log.Any("code", code))
return nil, srvdef.New(srvdef.Err, "", "")
}
log.Info("Test", log.Any("resp", resp))
return resp, nil
}
func GetManyItems(url string, key string, cursor string, size int64) (RSItemInfoList, string, *srvdef.SrvErr) {
reqUrl := fmt.Sprintf("%s/api/items?n=%d&cursor=%s", url, size, cursor)
type Resp struct {
Cursor string `json:"Cursor"`
Items RSItemInfoList `json:"Items"`
}
var resp Resp
header := map[string]string{"X-API-Key": key}
code, err := utils.GetWithJResp(&resp, reqUrl, header, nil)
if err != nil {
log.Error("recomapi:GetOneItem GetWithJResp failed",
log.Any("reqUrl", reqUrl), log.E(err))
return nil, "", srvdef.New(srvdef.Err, "", "")
}
if code != http.StatusOK {
log.Error("recomapi:GetOneItem GetWithJResp code error.",
log.Any("reqUrl", reqUrl), log.Any("code", code))
return nil, "", srvdef.New(srvdef.Err, "", "")
}
return resp.Items, resp.Cursor, nil
}
func DeleteOneItem(url string, key string, itemId string) (int64, *srvdef.SrvErr) {
reqUrl := fmt.Sprintf("%s/api/item/%s", url, itemId)
resp := &APIResult{}
header := map[string]string{"X-API-Key": key}
code, err := utils.DeleteWithJResp(resp, reqUrl, header, nil)
if err != nil {
log.Error("recomapi:DeleteOneItem DeleteWithJResp failed",
log.Any("reqUrl", reqUrl), log.E(err))
return 0, srvdef.New(srvdef.Err, "", "")
}
if code != http.StatusOK {
log.Error("recomapi:DeleteOneItem DeleteWithJResp code error.",
log.Any("reqUrl", reqUrl), log.Any("code", code))
return 0, srvdef.New(srvdef.Err, "", "")
}
return resp.RowAffected, nil
}