39 lines
844 B
Go
39 lines
844 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("t_users AS u").
|
|
Select("u.*, e.email").
|
|
Joins("INNER JOIN t_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
|
|
}
|