spark-server/internal/module/user/model/list.go
DESKTOP-L8OUL9F\gfl0034 ce2cdf6bf3 feat: music 运营曲目、seed 机器人欢迎消息,并补充 novels/music OpenAPI
合并 origin/main 设备注册后,纳入本地 music 模块、seed 命令与 popadmin 相关路由/文档;music migration 编号为 0020 以避免与 0019_devices 冲突。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-23 16:07:05 +08:00

39 lines
840 B
Go

package model
import (
"context"
"spark-server/internal/module/user/entity"
)
// Account is a users row plus its primary login email.
type Account struct {
User *entity.User
Email string
}
// ListAccounts returns every user that still has a user_emails binding.
func (m *Repo) ListAccounts(ctx context.Context) ([]Account, error) {
db, err := m.session(ctx)
if err != nil {
return nil, err
}
var rows []struct {
User
Email string `gorm:"column:email"`
}
err = db.Table("users AS u").
Select("u.*, e.email").
Joins("INNER JOIN user_emails e ON e.user_id = u.id").
Order("u.id ASC").
Find(&rows).Error
if err != nil {
return nil, mapDBErr(err)
}
out := make([]Account, 0, len(rows))
for i := range rows {
out = append(out, Account{User: rows[i].User.entity(), Email: rows[i].Email})
}
return out, nil
}