Merge branch 'develop' of https://gitee.com/fusenpack/fusenapi into develop
This commit is contained in:
commit
7bcdea36ce
server
home-user-auth/internal/types
product-template-tag/internal
product/internal
server_api
utils/s3url_to_s3id
|
@ -121,17 +121,17 @@ type RequestBasicInfoForm struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type RequestAddAddress struct {
|
type RequestAddAddress struct {
|
||||||
Id int64 `json:"id"` // address_id 地址id
|
Id int64 `json:"id,optional"` // address_id 地址id
|
||||||
IsDefault int64 `json:"is_default"` //是否默认
|
IsDefault int64 `json:"is_default"` //是否默认
|
||||||
Name string `json:"name"` //收货人
|
Name string `json:"name"` //收货人
|
||||||
FirstName string `json:"first_name"` //first_name
|
FirstName string `json:"first_name"` //first_name
|
||||||
LastName string `json:"last_name"` //last_name
|
LastName string `json:"last_name"` //last_name
|
||||||
Mobile string `json:"mobile"` //手机
|
Mobile string `json:"mobile"` //手机
|
||||||
ZipCode string `json:"zip_code"` //邮编
|
ZipCode string `json:"zip_code"` //邮编
|
||||||
Street string `json:"street"` //街道
|
Street string `json:"street"` //街道
|
||||||
Suite string `json:"suite"` //房号
|
Suite string `json:"suite"` //房号
|
||||||
City string `json:"city"` //城市
|
City string `json:"city"` //城市
|
||||||
State string `json:"state"` //州
|
State string `json:"state"` //州
|
||||||
}
|
}
|
||||||
|
|
||||||
type RequestOrderId struct {
|
type RequestOrderId struct {
|
||||||
|
|
|
@ -7,7 +7,7 @@ import (
|
||||||
"fusenapi/model/gmodel"
|
"fusenapi/model/gmodel"
|
||||||
"fusenapi/utils/auth"
|
"fusenapi/utils/auth"
|
||||||
"fusenapi/utils/basic"
|
"fusenapi/utils/basic"
|
||||||
|
"fusenapi/utils/s3url_to_s3id"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
|
||||||
"fusenapi/server/product-template-tag/internal/svc"
|
"fusenapi/server/product-template-tag/internal/svc"
|
||||||
|
@ -99,13 +99,32 @@ func (l *GetProductTemplateTagsLogic) GetProductTemplateTags(req *types.GetProdu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//资源id集合
|
||||||
|
resourceIds := make([]string, 0, 5)
|
||||||
|
for _, v := range productTemplateTags {
|
||||||
|
resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*v.Cover))
|
||||||
|
}
|
||||||
|
//根据resourceUrls找到对应的元数据
|
||||||
|
resourceMetadataList, err := l.svcCtx.AllModels.FsResource.FindAllByResourceIds(l.ctx, resourceIds)
|
||||||
|
if err != nil {
|
||||||
|
logx.Error(err)
|
||||||
|
return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get resource list")
|
||||||
|
}
|
||||||
|
mapResourceMetadata := make(map[string]map[string]interface{})
|
||||||
|
for _, v := range resourceMetadataList {
|
||||||
|
var metadata map[string]interface{}
|
||||||
|
if v.Metadata != nil {
|
||||||
|
_ = json.Unmarshal([]byte(*v.Metadata), &metadata)
|
||||||
|
}
|
||||||
|
mapResourceMetadata[*v.ResourceUrl] = metadata
|
||||||
|
}
|
||||||
list := make([]types.GetProductTemplateTagsRsp, 0, len(productTemplateTags))
|
list := make([]types.GetProductTemplateTagsRsp, 0, len(productTemplateTags))
|
||||||
for _, v := range productTemplateTags {
|
for _, v := range productTemplateTags {
|
||||||
list = append(list, types.GetProductTemplateTagsRsp{
|
list = append(list, types.GetProductTemplateTagsRsp{
|
||||||
Id: v.Id,
|
Id: v.Id,
|
||||||
TemplateTag: *v.TemplateTag,
|
TemplateTag: *v.TemplateTag,
|
||||||
Cover: *v.Cover,
|
Cover: *v.Cover,
|
||||||
|
CoverMetadata: mapResourceMetadata[*v.Cover],
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return resp.SetStatusWithMessage(basic.CodeOK, "success", list)
|
return resp.SetStatusWithMessage(basic.CodeOK, "success", list)
|
||||||
|
|
|
@ -10,9 +10,10 @@ type GetProductTemplateTagsReq struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type GetProductTemplateTagsRsp struct {
|
type GetProductTemplateTagsRsp struct {
|
||||||
Id int64 `json:"id"`
|
Id int64 `json:"id"`
|
||||||
TemplateTag string `json:"template_tag"`
|
TemplateTag string `json:"template_tag"`
|
||||||
Cover string `json:"cover"`
|
Cover string `json:"cover"`
|
||||||
|
CoverMetadata interface{} `json:"cover_metadata"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Request struct {
|
type Request struct {
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"fusenapi/utils/basic"
|
"fusenapi/utils/basic"
|
||||||
"fusenapi/utils/format"
|
"fusenapi/utils/format"
|
||||||
"fusenapi/utils/image"
|
"fusenapi/utils/image"
|
||||||
|
"fusenapi/utils/s3url_to_s3id"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -73,16 +74,8 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec
|
||||||
ignoreProductIds = append(ignoreProductIds, v.Id)
|
ignoreProductIds = append(ignoreProductIds, v.Id)
|
||||||
productIds = append(productIds, v.Id)
|
productIds = append(productIds, v.Id)
|
||||||
mapRecommend[v.Id] = struct{}{}
|
mapRecommend[v.Id] = struct{}{}
|
||||||
coverSlice := strings.Split(*v.Cover, "/")
|
resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*v.Cover))
|
||||||
coverImgSlice := strings.Split(*v.CoverImg, "/")
|
resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*v.CoverImg))
|
||||||
lenCoverSlice := len(coverSlice)
|
|
||||||
lenCoverImgSlice := len(coverImgSlice)
|
|
||||||
if lenCoverSlice > 1 {
|
|
||||||
resourceIds = append(resourceIds, coverSlice[lenCoverSlice-1])
|
|
||||||
}
|
|
||||||
if lenCoverImgSlice > 1 {
|
|
||||||
resourceIds = append(resourceIds, coverImgSlice[lenCoverImgSlice-1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//小于请求的数量则需要从产品表中随机填补上(不包含上面的产品)
|
//小于请求的数量则需要从产品表中随机填补上(不包含上面的产品)
|
||||||
lenRecommendProduct := len(recommendProductList)
|
lenRecommendProduct := len(recommendProductList)
|
||||||
|
@ -139,11 +132,7 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec
|
||||||
return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product tag property")
|
return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product tag property")
|
||||||
}
|
}
|
||||||
for _, v := range productTagPropList {
|
for _, v := range productTagPropList {
|
||||||
coverSlice := strings.Split(*v.Cover, "/")
|
resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*v.Cover))
|
||||||
lenCoverSlice := len(coverSlice)
|
|
||||||
if lenCoverSlice > 1 {
|
|
||||||
resourceIds = append(resourceIds, coverSlice[lenCoverSlice-1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//根据resourceUrls找到对应的元数据
|
//根据resourceUrls找到对应的元数据
|
||||||
resourceMetadataList, err := l.svcCtx.AllModels.FsResource.FindAllByResourceIds(l.ctx, resourceIds)
|
resourceMetadataList, err := l.svcCtx.AllModels.FsResource.FindAllByResourceIds(l.ctx, resourceIds)
|
||||||
|
@ -161,13 +150,8 @@ func (l *GetRecommandProductListLogic) GetRecommandProductList(req *types.GetRec
|
||||||
}
|
}
|
||||||
mapTagProp := make(map[int64][]types.CoverDefaultItem)
|
mapTagProp := make(map[int64][]types.CoverDefaultItem)
|
||||||
for _, v := range productTagPropList {
|
for _, v := range productTagPropList {
|
||||||
coverSlice := strings.Split(*v.Cover, "/")
|
|
||||||
lenCoverSlice := len(coverSlice)
|
|
||||||
if lenCoverSlice > 1 {
|
|
||||||
resourceIds = append(resourceIds, coverSlice[lenCoverSlice-1])
|
|
||||||
}
|
|
||||||
mapTagProp[*v.ProductId] = append(mapTagProp[*v.ProductId], types.CoverDefaultItem{
|
mapTagProp[*v.ProductId] = append(mapTagProp[*v.ProductId], types.CoverDefaultItem{
|
||||||
Tag: v.TemplateTag,
|
TemplateTag: v.TemplateTag,
|
||||||
Cover: *v.Cover,
|
Cover: *v.Cover,
|
||||||
CoverMetadata: mapResourceMetadata[*v.Cover],
|
CoverMetadata: mapResourceMetadata[*v.Cover],
|
||||||
})
|
})
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"fusenapi/utils/basic"
|
"fusenapi/utils/basic"
|
||||||
"fusenapi/utils/format"
|
"fusenapi/utils/format"
|
||||||
"fusenapi/utils/image"
|
"fusenapi/utils/image"
|
||||||
|
"fusenapi/utils/s3url_to_s3id"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -180,16 +181,8 @@ func (l *GetTagProductListLogic) getProductRelationInfo(req getProductRelationIn
|
||||||
productIds := make([]int64, 0, len(productList))
|
productIds := make([]int64, 0, len(productList))
|
||||||
for _, product := range productList {
|
for _, product := range productList {
|
||||||
productIds = append(productIds, product.Id)
|
productIds = append(productIds, product.Id)
|
||||||
coverSlice := strings.Split(*product.Cover, "/")
|
resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*product.Cover))
|
||||||
coverImgSlice := strings.Split(*product.CoverImg, "/")
|
resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*product.CoverImg))
|
||||||
lenCoverSlice := len(coverSlice)
|
|
||||||
lenCoverImgSlice := len(coverImgSlice)
|
|
||||||
if lenCoverSlice > 1 {
|
|
||||||
resourceIds = append(resourceIds, coverSlice[lenCoverSlice-1])
|
|
||||||
}
|
|
||||||
if lenCoverImgSlice > 1 {
|
|
||||||
resourceIds = append(resourceIds, coverImgSlice[lenCoverImgSlice-1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//获取商品可选配件
|
//获取商品可选配件
|
||||||
productOptionalPartList, err = l.svcCtx.AllModels.FsProductModel3d.GetGroupPartListByProductIds(l.ctx, productIds)
|
productOptionalPartList, err = l.svcCtx.AllModels.FsProductModel3d.GetGroupPartListByProductIds(l.ctx, productIds)
|
||||||
|
@ -213,11 +206,7 @@ func (l *GetTagProductListLogic) getProductRelationInfo(req getProductRelationIn
|
||||||
return nil, errors.New("failed to get product tag property")
|
return nil, errors.New("failed to get product tag property")
|
||||||
}
|
}
|
||||||
for _, v := range productTagPropList {
|
for _, v := range productTagPropList {
|
||||||
coverSlice := strings.Split(*v.Cover, "/")
|
resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*v.Cover))
|
||||||
lenCoverSlice := len(coverSlice)
|
|
||||||
if lenCoverSlice > 1 {
|
|
||||||
resourceIds = append(resourceIds, coverSlice[lenCoverSlice-1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//根据resourceUrls找到对应的元数据
|
//根据resourceUrls找到对应的元数据
|
||||||
resourceMetadataList, err := l.svcCtx.AllModels.FsResource.FindAllByResourceIds(l.ctx, resourceIds)
|
resourceMetadataList, err := l.svcCtx.AllModels.FsResource.FindAllByResourceIds(l.ctx, resourceIds)
|
||||||
|
@ -234,7 +223,7 @@ func (l *GetTagProductListLogic) getProductRelationInfo(req getProductRelationIn
|
||||||
}
|
}
|
||||||
for _, v := range productTagPropList {
|
for _, v := range productTagPropList {
|
||||||
req.MapTagProp[*v.ProductId] = append(req.MapTagProp[*v.ProductId], types.CoverDefaultItem{
|
req.MapTagProp[*v.ProductId] = append(req.MapTagProp[*v.ProductId], types.CoverDefaultItem{
|
||||||
Tag: v.TemplateTag,
|
TemplateTag: v.TemplateTag,
|
||||||
Cover: *v.Cover,
|
Cover: *v.Cover,
|
||||||
CoverMetadata: req.MapResourceMetadata[*v.Cover],
|
CoverMetadata: req.MapResourceMetadata[*v.Cover],
|
||||||
})
|
})
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
"fusenapi/utils/auth"
|
"fusenapi/utils/auth"
|
||||||
"fusenapi/utils/basic"
|
"fusenapi/utils/basic"
|
||||||
"fusenapi/utils/format"
|
"fusenapi/utils/format"
|
||||||
|
"fusenapi/utils/s3url_to_s3id"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"sort"
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
|
@ -95,16 +96,8 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty
|
||||||
productIds := make([]int64, 0, len(recommendProductList))
|
productIds := make([]int64, 0, len(recommendProductList))
|
||||||
for _, product := range recommendProductList {
|
for _, product := range recommendProductList {
|
||||||
productIds = append(productIds, product.Id)
|
productIds = append(productIds, product.Id)
|
||||||
coverSlice := strings.Split(*product.Cover, "/")
|
resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*product.Cover))
|
||||||
coverImgSlice := strings.Split(*product.CoverImg, "/")
|
resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*product.CoverImg))
|
||||||
lenCoverSlice := len(coverSlice)
|
|
||||||
lenCoverImgSlice := len(coverImgSlice)
|
|
||||||
if lenCoverSlice > 1 {
|
|
||||||
resourceIds = append(resourceIds, coverSlice[lenCoverSlice-1])
|
|
||||||
}
|
|
||||||
if lenCoverImgSlice > 1 {
|
|
||||||
resourceIds = append(resourceIds, coverImgSlice[lenCoverImgSlice-1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//获取商品可选配件
|
//获取商品可选配件
|
||||||
productOptionalPartList, err = l.svcCtx.AllModels.FsProductModel3d.GetGroupPartListByProductIds(l.ctx, productIds)
|
productOptionalPartList, err = l.svcCtx.AllModels.FsProductModel3d.GetGroupPartListByProductIds(l.ctx, productIds)
|
||||||
|
@ -172,11 +165,7 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty
|
||||||
return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product tag property")
|
return resp.SetStatusWithMessage(basic.CodeDbSqlErr, "failed to get product tag property")
|
||||||
}
|
}
|
||||||
for _, v := range productTagPropList {
|
for _, v := range productTagPropList {
|
||||||
coverSlice := strings.Split(*v.Cover, "/")
|
resourceIds = append(resourceIds, s3url_to_s3id.GetS3ResourceIdFormUrl(*v.Cover))
|
||||||
lenCoverSlice := len(coverSlice)
|
|
||||||
if lenCoverSlice > 1 {
|
|
||||||
resourceIds = append(resourceIds, coverSlice[lenCoverSlice-1])
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//根据resourceUrls找到对应的元数据
|
//根据resourceUrls找到对应的元数据
|
||||||
resourceMetadataList, err := l.svcCtx.AllModels.FsResource.FindAllByResourceIds(l.ctx, resourceIds)
|
resourceMetadataList, err := l.svcCtx.AllModels.FsResource.FindAllByResourceIds(l.ctx, resourceIds)
|
||||||
|
@ -195,7 +184,7 @@ func (l *HomePageRecommendProductListLogic) HomePageRecommendProductList(req *ty
|
||||||
mapTagProp := make(map[int64][]types.CoverDefaultItem)
|
mapTagProp := make(map[int64][]types.CoverDefaultItem)
|
||||||
for _, v := range productTagPropList {
|
for _, v := range productTagPropList {
|
||||||
mapTagProp[*v.ProductId] = append(mapTagProp[*v.ProductId], types.CoverDefaultItem{
|
mapTagProp[*v.ProductId] = append(mapTagProp[*v.ProductId], types.CoverDefaultItem{
|
||||||
Tag: v.TemplateTag,
|
TemplateTag: v.TemplateTag,
|
||||||
Cover: *v.Cover,
|
Cover: *v.Cover,
|
||||||
CoverMetadata: mapResourceMetadata[*v.Cover],
|
CoverMetadata: mapResourceMetadata[*v.Cover],
|
||||||
})
|
})
|
||||||
|
|
|
@ -284,7 +284,7 @@ type TagProduct struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type CoverDefaultItem struct {
|
type CoverDefaultItem struct {
|
||||||
Tag string `json:"tag"`
|
TemplateTag string `json:"template_tag"`
|
||||||
Cover string `json:"cover"`
|
Cover string `json:"cover"`
|
||||||
CoverMetadata interface{} `json:"cover_metadata"`
|
CoverMetadata interface{} `json:"cover_metadata"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,34 +13,34 @@ service home-user-auth {
|
||||||
|
|
||||||
// @handler UserRegisterHandler
|
// @handler UserRegisterHandler
|
||||||
// post /api/user/register(RequestUserRegister) returns (response);
|
// post /api/user/register(RequestUserRegister) returns (response);
|
||||||
|
//用户字体
|
||||||
@handler UserFontsHandler
|
@handler UserFontsHandler
|
||||||
get /api/user/fonts(request) returns (response);
|
get /api/user/fonts(request) returns (response);
|
||||||
|
//获取用户类型
|
||||||
@handler UserGetTypeHandler
|
@handler UserGetTypeHandler
|
||||||
get /api/user/get-type(request) returns (response);
|
get /api/user/get-type(request) returns (response);
|
||||||
|
//保存用户基础信息
|
||||||
@handler UserSaveBasicInfoHandler
|
@handler UserSaveBasicInfoHandler
|
||||||
post /api/user/basic-info(RequestBasicInfoForm) returns (response);
|
post /api/user/basic-info(RequestBasicInfoForm) returns (response);
|
||||||
|
//状态配置
|
||||||
@handler UserStatusConfigHandler
|
@handler UserStatusConfigHandler
|
||||||
get /api/user/status-config(request) returns (response);
|
get /api/user/status-config(request) returns (response);
|
||||||
|
//基础信息
|
||||||
@handler UserBasicInfoHandler
|
@handler UserBasicInfoHandler
|
||||||
get /api/user/basic-info(request) returns (response);
|
get /api/user/basic-info(request) returns (response);
|
||||||
|
//地址列表
|
||||||
@handler UserAddressListHandler
|
@handler UserAddressListHandler
|
||||||
get /api/user/address-list(request) returns (response);
|
get /api/user/address-list(request) returns (response);
|
||||||
|
//添加地址
|
||||||
@handler UserAddAddressHandler
|
@handler UserAddAddressHandler
|
||||||
post /api/user/add-address(RequestAddAddress) returns (response);
|
post /api/user/add-address(RequestAddAddress) returns (response);
|
||||||
|
//联系服务
|
||||||
@handler UserContactServiceHandler
|
@handler UserContactServiceHandler
|
||||||
post /api/user/contact-service (RequestContactService) returns (response);
|
post /api/user/contact-service (RequestContactService) returns (response);
|
||||||
|
|
||||||
// @handler UserOderListHandler
|
// @handler UserOderListHandler
|
||||||
// get /api/user/order-list(RequestOrderId) returns (response);
|
// get /api/user/order-list(RequestOrderId) returns (response);
|
||||||
|
//删除订单
|
||||||
@handler UserOderDeleteHandler
|
@handler UserOderDeleteHandler
|
||||||
post /api/user/order-delete(RequestOrderId) returns (response);
|
post /api/user/order-delete(RequestOrderId) returns (response);
|
||||||
|
|
||||||
|
@ -197,17 +197,17 @@ type RequestBasicInfoForm {
|
||||||
|
|
||||||
// RequestAddAddress 增加地址结构
|
// RequestAddAddress 增加地址结构
|
||||||
type RequestAddAddress {
|
type RequestAddAddress {
|
||||||
Id int64 `json:"id"` // address_id 地址id
|
Id int64 `json:"id,optional"` // address_id 地址id
|
||||||
IsDefault int64 `json:"is_default"` //是否默认
|
IsDefault int64 `json:"is_default"` //是否默认
|
||||||
Name string `json:"name"` //收货人
|
Name string `json:"name"` //收货人
|
||||||
FirstName string `json:"first_name"` //first_name
|
FirstName string `json:"first_name"` //first_name
|
||||||
LastName string `json:"last_name"` //last_name
|
LastName string `json:"last_name"` //last_name
|
||||||
Mobile string `json:"mobile"` //手机
|
Mobile string `json:"mobile"` //手机
|
||||||
ZipCode string `json:"zip_code"` //邮编
|
ZipCode string `json:"zip_code"` //邮编
|
||||||
Street string `json:"street"` //街道
|
Street string `json:"street"` //街道
|
||||||
Suite string `json:"suite"` //房号
|
Suite string `json:"suite"` //房号
|
||||||
City string `json:"city"` //城市
|
City string `json:"city"` //城市
|
||||||
State string `json:"state"` //州
|
State string `json:"state"` //州
|
||||||
}
|
}
|
||||||
|
|
||||||
// RequestOrderId 传入订单id的结构
|
// RequestOrderId 传入订单id的结构
|
||||||
|
|
|
@ -20,7 +20,8 @@ type GetProductTemplateTagsReq {
|
||||||
Limit int `form:"limit"`
|
Limit int `form:"limit"`
|
||||||
}
|
}
|
||||||
type GetProductTemplateTagsRsp {
|
type GetProductTemplateTagsRsp {
|
||||||
Id int64 `json:"id"`
|
Id int64 `json:"id"`
|
||||||
TemplateTag string `json:"template_tag"`
|
TemplateTag string `json:"template_tag"`
|
||||||
Cover string `json:"cover"`
|
Cover string `json:"cover"`
|
||||||
|
CoverMetadata interface{} `json:"cover_metadata"`
|
||||||
}
|
}
|
|
@ -333,7 +333,7 @@ type TagProduct {
|
||||||
Recommended bool `json:"recommended"`
|
Recommended bool `json:"recommended"`
|
||||||
}
|
}
|
||||||
type CoverDefaultItem {
|
type CoverDefaultItem {
|
||||||
Tag string `json:"tag"`
|
TemplateTag string `json:"template_tag"`
|
||||||
Cover string `json:"cover"`
|
Cover string `json:"cover"`
|
||||||
CoverMetadata interface{} `json:"cover_metadata"`
|
CoverMetadata interface{} `json:"cover_metadata"`
|
||||||
}
|
}
|
||||||
|
|
16
utils/s3url_to_s3id/s3url_to_s3id.go
Normal file
16
utils/s3url_to_s3id/s3url_to_s3id.go
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
package s3url_to_s3id
|
||||||
|
|
||||||
|
import "strings"
|
||||||
|
|
||||||
|
// 通过url解析资源id
|
||||||
|
func GetS3ResourceIdFormUrl(s3Url string) string {
|
||||||
|
if !strings.Contains(s3Url, "http") {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
s := strings.Split(s3Url, "/")
|
||||||
|
lens := len(s)
|
||||||
|
if lens <= 1 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return s[lens-1]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user