46 lines
1.2 KiB
Go
46 lines
1.2 KiB
Go
package business
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"gorm.io/gorm"
|
|
"kra/internal/biz/business"
|
|
)
|
|
|
|
type PlatformProvider interface {
|
|
Database(string) (*gorm.DB, error)
|
|
}
|
|
type platformAccountRepo struct{ data PlatformProvider }
|
|
|
|
func NewPlatformAccountRepo(data PlatformProvider) business.PlatformAccountRepo {
|
|
return &platformAccountRepo{data: data}
|
|
}
|
|
|
|
type platformAccountPO struct {
|
|
ID uint64
|
|
Account, Password string
|
|
Status int
|
|
}
|
|
|
|
func (platformAccountPO) TableName() string { return "tab_promote_business" }
|
|
|
|
func (r *platformAccountRepo) FindByAccount(ctx context.Context, source, account string) (*business.PlatformAccount, error) {
|
|
source, err := business.NormalizePlatform(source)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
db, err := r.data.Database(source)
|
|
if err != nil || db == nil {
|
|
return nil, business.ErrPlatformUnavailable
|
|
}
|
|
var po platformAccountPO
|
|
err = db.WithContext(ctx).Where("account = ?", account).First(&po).Error
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, nil
|
|
}
|
|
if err != nil {
|
|
return nil, business.ErrPlatformUnavailable
|
|
}
|
|
return &business.PlatformAccount{ID: po.ID, Account: po.Account, Password: po.Password, Status: po.Status}, nil
|
|
}
|