MCPcopy Create free account
hub / github.com/aiprodcoder/MIXAPI / SearchUsers

Function SearchUsers

model/user.go:157–222  ·  view source on GitHub ↗
(keyword string, group string, startIdx int, num int)

Source from the content-addressed store, hash-verified

155}
156
157func SearchUsers(keyword string, group string, startIdx int, num int) ([]*User, int64, error) {
158 var users []*User
159 var total int64
160 var err error
161
162 // 开始事务
163 tx := DB.Begin()
164 if tx.Error != nil {
165 return nil, 0, tx.Error
166 }
167 defer func() {
168 if r := recover(); r != nil {
169 tx.Rollback()
170 }
171 }()
172
173 // 构建基础查询
174 query := tx.Unscoped().Model(&User{})
175
176 // 构建搜索条件
177 likeCondition := "username LIKE ? OR email LIKE ? OR display_name LIKE ?"
178
179 // 尝试将关键字转换为整数ID
180 keywordInt, err := strconv.Atoi(keyword)
181 if err == nil {
182 // 如果是数字,同时搜索ID和其他字段
183 likeCondition = "id = ? OR " + likeCondition
184 if group != "" {
185 query = query.Where("("+likeCondition+") AND "+commonGroupCol+" = ?",
186 keywordInt, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", group)
187 } else {
188 query = query.Where(likeCondition,
189 keywordInt, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%")
190 }
191 } else {
192 // 非数字关键字,只搜索字符串字段
193 if group != "" {
194 query = query.Where("("+likeCondition+") AND "+commonGroupCol+" = ?",
195 "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", group)
196 } else {
197 query = query.Where(likeCondition,
198 "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%")
199 }
200 }
201
202 // 获取总数
203 err = query.Count(&total).Error
204 if err != nil {
205 tx.Rollback()
206 return nil, 0, err
207 }
208
209 // 获取分页数据
210 err = query.Omit("password").Order("id desc").Limit(num).Offset(startIdx).Find(&users).Error
211 if err != nil {
212 tx.Rollback()
213 return nil, 0, err
214 }

Callers 1

SearchUsersFunction · 0.92

Calls

no outgoing calls

Tested by

no test coverage detected