|
- package repo
-
- import (
- "database/sql"
- "gim/pkg/db"
- "gim/pkg/gerrors"
- )
-
- const (
- SeqObjectTypeUser = 1 // 用户
- SeqObjectTypeRoom = 2 // 房间
- )
-
- type seqRepo struct{}
-
- var SeqRepo = new(seqRepo)
-
- // Incr 自增seq,并且获取自增后的值
- func (*seqRepo) Incr(objectType int, objectId int64) (int64, error) {
- tx := db.DB.Begin()
- defer tx.Rollback()
-
- var seq int64
- err := db.DB.Raw("select seq from seq where object_type = ? and object_id = ? for update", objectType, objectId).
- Row().Scan(&seq)
- if err != nil && err != sql.ErrNoRows {
- return 0, gerrors.WrapError(err)
- }
- if err == sql.ErrNoRows {
- err = db.DB.Exec("insert into seq (object_type,object_id,seq) values (?,?,?)", objectType, objectId, seq+1).Error
- if err != nil {
- return 0, gerrors.WrapError(err)
- }
- } else {
- err = db.DB.Exec("update seq set seq = seq + 1 where object_type = ? and object_id = ?", objectType, objectId).Error
- if err != nil {
- return 0, gerrors.WrapError(err)
- }
- }
-
- tx.Commit()
- return seq + 1, nil
- }
|