You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
3.5 KiB
147 lines
3.5 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"strconv" |
|
|
|
"go-common/app/admin/main/member/model" |
|
|
|
"github.com/pkg/errors" |
|
) |
|
|
|
var ( |
|
_sharding = int64(100) |
|
) |
|
|
|
func baseTable(mid int64) string { |
|
return fmt.Sprintf("user_base_%02d", mid%_sharding) |
|
} |
|
|
|
func expTable(mid int64) string { |
|
return fmt.Sprintf("user_exp_%02d", mid%_sharding) |
|
} |
|
|
|
// Base is. |
|
func (d *Dao) Base(ctx context.Context, mid int64) (*model.Base, error) { |
|
b := &model.Base{} |
|
if err := d.member.Table(baseTable(mid)).Where("mid=?", mid).Find(b).Error; err != nil { |
|
return nil, err |
|
} |
|
b.RandFaceURL() |
|
return b, nil |
|
} |
|
|
|
// Bases is. |
|
func (d *Dao) Bases(ctx context.Context, mids []int64) (map[int64]*model.Base, error) { |
|
bs := make(map[int64]*model.Base, len(mids)) |
|
for _, mid := range mids { |
|
b, err := d.Base(ctx, mid) |
|
if err != nil { |
|
continue |
|
} |
|
bs[b.Mid] = b |
|
} |
|
return bs, nil |
|
} |
|
|
|
// Exp is. |
|
func (d *Dao) Exp(ctx context.Context, mid int64) (*model.Exp, error) { |
|
e := &model.Exp{} |
|
if err := d.member.Table(expTable(mid)).Where("mid=?", mid).Find(e).Error; err != nil { |
|
return nil, err |
|
} |
|
return e, nil |
|
} |
|
|
|
// Moral is. |
|
func (d *Dao) Moral(ctx context.Context, mid int64) (*model.Moral, error) { |
|
m := &model.Moral{ |
|
Mid: mid, |
|
Moral: 7000, |
|
} |
|
if err := d.member.Table("user_moral"). |
|
Where(&model.Moral{Mid: mid}). |
|
FirstOrCreate(m).Error; err != nil { |
|
return nil, err |
|
} |
|
return m, nil |
|
} |
|
|
|
// UpName is. |
|
func (d *Dao) UpName(ctx context.Context, mid int64, name string) error { |
|
ups := map[string]string{ |
|
"name": name, |
|
} |
|
if err := d.member.Table(baseTable(mid)).Where("mid=?", mid).Updates(ups).Error; err != nil { |
|
err = errors.Wrap(err, "dao update name") |
|
return err |
|
} |
|
return nil |
|
} |
|
|
|
// UpSign is. |
|
func (d *Dao) UpSign(ctx context.Context, mid int64, sign string) error { |
|
ups := map[string]string{ |
|
"sign": sign, |
|
} |
|
if err := d.member.Table(baseTable(mid)).Where("mid=?", mid).Updates(ups).Error; err != nil { |
|
err = errors.Wrap(err, "dao update sign") |
|
return err |
|
} |
|
return nil |
|
} |
|
|
|
// UpFace is. |
|
func (d *Dao) UpFace(ctx context.Context, mid int64, face string) error { |
|
ups := map[string]string{ |
|
"face": face, |
|
} |
|
if err := d.member.Table(baseTable(mid)).Where("mid=?", mid).Updates(ups).Error; err != nil { |
|
err = errors.Wrap(err, "dao update face") |
|
return err |
|
} |
|
return nil |
|
} |
|
|
|
// BatchUserAddit is. |
|
func (d *Dao) BatchUserAddit(ctx context.Context, mids []int64) (map[int64]*model.UserAddit, error) { |
|
uas := []*model.UserAddit{} |
|
if err := d.member.Table("user_addit").Where("mid in (?)", mids).Find(&uas).Error; err != nil { |
|
return nil, err |
|
} |
|
uasMap := make(map[int64]*model.UserAddit, len(uas)) |
|
for _, ua := range uas { |
|
uasMap[ua.Mid] = ua |
|
} |
|
return uasMap, nil |
|
} |
|
|
|
// PubExpMsg is. |
|
func (d *Dao) PubExpMsg(ctx context.Context, msg *model.AddExpMsg) error { |
|
return d.expMsgDatabus.Send(ctx, strconv.FormatInt(msg.Mid, 10), msg) |
|
} |
|
|
|
// UserAddit is. |
|
func (d *Dao) UserAddit(ctx context.Context, mid int64) (*model.UserAddit, error) { |
|
addit := &model.UserAddit{} |
|
if err := d.member.Table("user_addit").Where("mid=?", mid).Find(addit).Error; err != nil { |
|
return nil, err |
|
} |
|
return addit, nil |
|
} |
|
|
|
// UpAdditRemark update remark. |
|
func (d *Dao) UpAdditRemark(ctx context.Context, mid int64, remark string) error { |
|
addit := &model.UserAddit{ |
|
Mid: mid, |
|
} |
|
upRemark := map[string]string{ |
|
"remark": remark, |
|
} |
|
if err := d.member.Table("user_addit").Where("mid=?", mid).Assign(upRemark).FirstOrCreate(addit).Error; err != nil { |
|
err = errors.Wrap(err, "dao insert or update addit") |
|
return err |
|
} |
|
return nil |
|
}
|
|
|