package logic import ( "context" "strconv" "lone-services/pkg/modelbase" "lone-services/pkg/utils" "lone-services/pkg/validate" product "lone-services/rpc/product/pb" "lone-services/services/product/internal/dao" "lone-services/services/product/internal/model" "lone-services/services/product/internal/svc" "lone-services/services/product/validator" "github.com/zeromicro/go-zero/core/logx" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" ) type ItemsByIdsLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewItemsByIdsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ItemsByIdsLogic { return &ItemsByIdsLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } func (l *ItemsByIdsLogic) ItemsByIds(in *product.ItemsByIdsReq) (*product.ItemsByIdsData, error) { var req validator.ProductItemsByIdsValidator if msg := validate.ValidateFromProto(in, &req); msg != utils.StringEmpty { return nil, status.Error(codes.InvalidArgument, msg) } ids := make([]string, 0, len(req.Ids)) for _, id := range req.Ids { ids = append(ids, strconv.FormatInt(id, 10)) } var infos []dao.Info err := model.ProductModel{}.Init().Items(modelbase.Params{ In: map[string][]string{"id in ?": ids}, }, &infos) if err != nil { l.Errorf("product ItemsByIds: %v", err) return nil, status.Error(codes.Internal, utils.Fail.Msg) } items := make([]*product.Item, 0, len(infos)) for _, row := range infos { items = append(items, toProductItem(row)) } return &product.ItemsByIdsData{Items: items}, nil }