合并 origin/main 设备注册后,纳入本地 music 模块、seed 命令与 popadmin 相关路由/文档;music migration 编号为 0020 以避免与 0019_devices 冲突。 Co-authored-by: Cursor <cursoragent@cursor.com>
39 lines
840 B
Go
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
|
|
}
|