|
|
|
package model
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"github.com/pkg/errors"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
)
|
|
|
|
|
|
|
|
var _ UserNobilityModel = (*customUserNobilityModel)(nil)
|
|
|
|
|
|
|
|
type (
|
|
|
|
// UserNobilityModel is an interface to be customized, add more methods here,
|
|
|
|
// and implement the added methods in customUserNobilityModel.
|
|
|
|
UserNobilityModel interface {
|
|
|
|
userNobilityModel
|
|
|
|
// RecordNobility 记录贵族信息. 已存在更新,不存在插入
|
|
|
|
RecordNobility(ctx context.Context, data *UserNobility) error
|
|
|
|
}
|
|
|
|
|
|
|
|
customUserNobilityModel struct {
|
|
|
|
*defaultUserNobilityModel
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
// NewUserNobilityModel returns a model for the database table.
|
|
|
|
func NewUserNobilityModel(conn *gorm.DB) UserNobilityModel {
|
|
|
|
return &customUserNobilityModel{
|
|
|
|
defaultUserNobilityModel: newUserNobilityModel(conn),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *customUserNobilityModel) RecordNobility(ctx context.Context, data *UserNobility) error {
|
|
|
|
return m.TransactCtx(ctx, nil, func(tx *gorm.DB) error {
|
|
|
|
var err error
|
|
|
|
var dbModel *UserNobility
|
|
|
|
if dbModel, err = m.FindOne(ctx, tx, data.UserId); err != nil {
|
|
|
|
if !errors.Is(err, ErrNotFound) {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if dbModel == nil {
|
|
|
|
// insert
|
|
|
|
if err = m.Insert(ctx, tx, data); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// update
|
|
|
|
if err = m.Update(ctx, tx, data); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
}
|