Files
hi-server/internal/logic/public/user/getDeviceListLogic.go
T
shanshanzhong147 d4f0d559cf
Build docker and publish / build (20.15.1) (push) Has been cancelled
设备1
2026-05-06 02:53:18 -07:00

63 lines
1.8 KiB
Go

package user
import (
"context"
"github.com/perfect-panel/server/internal/model/user"
"github.com/perfect-panel/server/internal/svc"
"github.com/perfect-panel/server/internal/types"
"github.com/perfect-panel/server/pkg/constant"
"github.com/perfect-panel/server/pkg/logger"
"github.com/perfect-panel/server/pkg/tool"
)
type GetDeviceListLogic struct {
logger.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// Get Device List
func NewGetDeviceListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDeviceListLogic {
return &GetDeviceListLogic{
Logger: logger.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetDeviceListLogic) GetDeviceList() (resp *types.GetDeviceListResponse, err error) {
userInfo := l.ctx.Value(constant.CtxKeyUser).(*user.User)
scopeHelper := newFamilyScopeHelper(l.ctx, l.svcCtx)
scopeUserIds, err := scopeHelper.resolveScopedUserIds(userInfo.Id)
if err != nil {
return nil, err
}
list, count, err := l.svcCtx.UserModel.QueryDeviceListByUserIds(l.ctx, scopeUserIds)
if err != nil {
return nil, err
}
// FIX: 逐条复制并设置 DeviceNo,避免 DeepCopy 批量复制后 len(userRespList) 与 list 不一致
// 导致 if i < len(userRespList) 条件失效、只有第一条设备号被正确赋值的 bug。
// 原始代码(保留以供对照):
// userRespList := make([]types.UserDevice, 0)
// tool.DeepCopy(&userRespList, list)
// for i, d := range list {
// if i < len(userRespList) {
// userRespList[i].DeviceNo = tool.DeviceIdToHash(d.Id)
// }
// }
userRespList := make([]types.UserDevice, 0, len(list))
for _, d := range list {
var item types.UserDevice
tool.DeepCopy(&item, d)
item.DeviceNo = tool.DeviceIdToHash(d.Id)
userRespList = append(userRespList, item)
}
resp = &types.GetDeviceListResponse{
Total: count,
List: userRespList,
}
return
}