diff --git a/server/marketserver/api/v1/market/marketsecondary.go b/server/marketserver/api/v1/market/marketsecondary.go new file mode 100644 index 00000000..c49e7282 --- /dev/null +++ b/server/marketserver/api/v1/market/marketsecondary.go @@ -0,0 +1,111 @@ +package market + +import ( + "f5" + "fmt" + "main/common" + "main/constant" + . "main/global" + "net/http" + "q5" + + "github.com/gin-gonic/gin" +) + +func (this *MarketApi) LockList(c *gin.Context) { + netId := q5.ToInt64(c.Param("net_id")) + owner := c.Param("owner_address") + reqJson := struct { + PageSize interface{} `json:"page_size"` + Cursor interface{} `json:"cursor"` + Search struct { + } `json:"search"` + Filter struct { + ItemIds []interface{} `json:"item_ids"` + } `json:"filter"` + Sort struct { + Fields [] struct { + } `json:"fields"` + } `json:"sort"` + }{} + if err := c.ShouldBindJSON(&reqJson); err != nil { + c.JSON(http.StatusOK, gin.H{ + "code": 1, + "message": err.Error(), + }) + return + } + + pageSize := q5.AdjustRangeValue(q5.SafeToInt32(reqJson.PageSize), 1, 20) + cursor := q5.SafeToInt64(reqJson.Cursor) + sql := fmt.Sprintf(` +SELECT * FROM t_nft WHERE idx > %d AND net_id = %d AND owner_address = '%s' AND owner_address = last_lock_address +`, + cursor, netId, owner) + + subFilters := []f5.DbQueryFilter{} + + { + itemIds := map[int32]int32{} + for _, val := range(reqJson.Filter.ItemIds) { + itemId := q5.SafeToInt32(val) + itemIds[itemId] = 1 + } + if len(itemIds) > 0 { + inSub := `item_id IN (` + i := 0 + for key, _ := range(itemIds) { + if i == 0 { + inSub += q5.ToString(key) + } else { + inSub += "," + q5.ToString(key) + } + i += 1 + } + inSub += ")" + q5.AppendSlice(&subFilters, f5.GetDbFilter().Custom(inSub).And()) + } + } + + rspObj := struct { + ErrCode int32 `json:"errcode"` + ErrMsg string `json:"errmsg"` + Page common.StreamPagination `json:"page"` + Rows []struct{ + Event interface{} `json:"event"` + Nft interface{} `json:"nft"` + } `json:"rows"` + }{} + q5.NewSlice(&rspObj.Rows, 0, 10) + nfts := []*common.NftDto{} + orderBy := "" + f5.GetGoStyleDb().StreamPageQuery( + constant.BCNFT_DB, + pageSize, + cursor, + sql, + []string{ + }, + f5.GetDbFilter().Comp(subFilters...), + orderBy, + func (err error, pagination *f5.StreamPagination) { + rspObj.Page.FillPage(pagination) + }, + func (ds *f5.DataSet) { + p := new(common.NftDto) + p.NetId = q5.ToInt32(ds.GetByName("net_id")) + p.ContractAddress = ds.GetByName("contract_address") + p.TokenId = ds.GetByName("token_id") + p.Payload = map[string]interface{}{} + q5.AppendSlice(&nfts, p) + }) + GetCacheMgr().GetNfts(nfts) + { + for _, val := range nfts { + p := q5.NewSliceElement(&rspObj.Rows) + p.Event = val.Payload + p.Nft = val.NftCache.GetJsonData() + } + } + c.JSON(200, rspObj) +} \ No newline at end of file diff --git a/server/marketserver/router/market/market.go b/server/marketserver/router/market/market.go index 26a099fc..162b8aa9 100644 --- a/server/marketserver/router/market/market.go +++ b/server/marketserver/router/market/market.go @@ -2,7 +2,7 @@ package market import ( "f5" - "main/api/v1" + v1 "main/api/v1" "main/middleware" ) @@ -23,4 +23,7 @@ func (this *MarketRouter) InitRouter() { f5.GetApp().GetGinEngine().GET("/api/market/product/goods/:net_id/:contract_address/:token_id", middleware.MaybeJwtAuth, api.MarketApi.Goods) + f5.GetApp().GetGinEngine().POST("/api/market/product/lock/:net_id/:owner_address/", + middleware.MaybeJwtAuth, + api.MarketApi.LockList) }