package services import ( "context" "code.tczkiot.com/wlw/ai-agent/identity" "code.tczkiot.com/wlw/ai-agent/internal/pkg/enums" ) // ExternalUser is a non-persistent display adapter for an administrator // identity owned by be-system. type ExternalUser struct { ID int64 SubjectType identity.SubjectType Username string Nickname string Avatar string Status enums.Status } var UserService = &externalUserService{} type externalUserService struct{} func (s *externalUserService) Get(id int64) *ExternalUser { items := s.FindByIds([]int64{id}) if len(items) == 0 { return nil } return &items[0] } func (s *externalUserService) FindByIds(ids []int64) []ExternalUser { if len(ids) == 0 { return nil } subjects, err := SubjectService.Query(context.Background(), identity.Query{ Types: []identity.SubjectType{identity.SubjectAdmin}, IDs: ids, EnabledOnly: true, }) if err != nil { return nil } users := make([]ExternalUser, 0, len(subjects)) for _, subject := range subjects { status := enums.StatusDisabled if subject.Enabled { status = enums.StatusOk } users = append(users, ExternalUser{ ID: subject.ID, SubjectType: subject.Type, Username: subject.Username, Nickname: subject.Name, Avatar: subject.Avatar, Status: status, }) } return users } func (s *externalUserService) Find(keyword string) []ExternalUser { subjects, err := SubjectService.Query(context.Background(), identity.Query{ Types: []identity.SubjectType{identity.SubjectAdmin}, Keyword: keyword, EnabledOnly: true, }) if err != nil { return nil } users := make([]ExternalUser, 0, len(subjects)) for _, subject := range subjects { users = append(users, ExternalUser{ ID: subject.ID, SubjectType: subject.Type, Username: subject.Username, Nickname: subject.Name, Avatar: subject.Avatar, Status: enums.StatusOk, }) } return users }