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.
49 lines
1.3 KiB
49 lines
1.3 KiB
package dao |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
|
|
"go-common/app/job/main/figure/model" |
|
"go-common/library/database/sql" |
|
"go-common/library/log" |
|
|
|
"github.com/pkg/errors" |
|
) |
|
|
|
const ( |
|
_shard = 100 |
|
_insertFigure = "INSERT INTO figure_user_%02d (mid,score,lawful_score,wide_score,friendly_score,bounty_score,creativity_score,ver,ctime,mtime) VALUES (?,?,?,?,?,?,?,?,?,?)" |
|
_existFigure = "SELECT id FROM figure_user_%02d WHERE mid=? LIMIT 1" |
|
) |
|
|
|
func hit(mid int64) int64 { |
|
return mid % _shard |
|
} |
|
|
|
// ExistFigure exist user figure info |
|
func (d *Dao) ExistFigure(c context.Context, mid int64) (id int64, err error) { |
|
res := d.db.QueryRow(c, fmt.Sprintf(_existFigure, hit(mid)), mid) |
|
if err = res.Scan(&id); err != nil { |
|
if err == sql.ErrNoRows { |
|
err = nil |
|
return |
|
} |
|
errors.Wrapf(err, "row.Scan(%d) error", mid) |
|
} |
|
|
|
return |
|
} |
|
|
|
// SaveFigure init user figure info |
|
func (d *Dao) SaveFigure(c context.Context, f *model.Figure) (id int64, err error) { |
|
res, err := d.db.Exec(c, fmt.Sprintf(_insertFigure, hit(f.Mid)), f.Mid, f.Score, f.LawfulScore, f.WideScore, f.FriendlyScore, f.BountyScore, f.CreativityScore, f.Ver, f.Ctime, f.Mtime) |
|
if err != nil { |
|
errors.Wrapf(err, "init user(%d) Figure info error(%v)", f.Mid, err) |
|
return |
|
} |
|
if id, err = res.LastInsertId(); err != nil { |
|
log.Error("res.LastInsertId() error(%v)", err) |
|
} |
|
return |
|
}
|
|
|