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.
 
 
 

71 lines
1.5 KiB

package dao
import (
"errors"
"fmt"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"net/http"
"texas-poker-bk/internal/model/entity"
)
var UserDao *User
func initUserDao() {
UserDao = &User{DB: Dao.Sqlite}
err := Dao.Sqlite.AutoMigrate(&entity.User{})
if err != nil {
fmt.Println("user table", err)
}
}
type User struct {
DB *gorm.DB
}
func FindUserByName(ctx *gin.Context) {
username := ctx.Param("username")
user := UserDao.FindUserByName(username)
if user == nil {
ctx.JSON(http.StatusOK, gin.H{
"msg": "not found",
})
return
}
ctx.JSON(http.StatusOK, gin.H{
"msg": "ok",
"data": user,
})
}
func (u *User) FindUserByName(username string) *entity.User {
user := &entity.User{}
tx := u.DB.Model(user).Where("username=?", username).Limit(1).Scan(user)
// 查询出结果时 tx.RowsAffected 固定=1
if tx.RowsAffected == 0 {
return nil
}
return user
}
func (u *User) IncrementTokenVersion(userId int64) (int32, error) {
u1 := &entity.User{}
tx := u.DB.Select("token_version").First(u1, userId)
// fmt.Printf("current user: %v, %d\n", u1, tx.RowsAffected)
if tx.Error != nil {
return 0, tx.Error
}
newTokenVersion := u1.TokenVersion + 1
tx.Model(&entity.User{}).
Where("id", userId).
Where("token_version", u1.TokenVersion).
Update("token_version", newTokenVersion)
// fmt.Printf("RowsAffected: %d\n\n", tx.RowsAffected)
if tx.Error != nil {
return 0, tx.Error
}
if tx.RowsAffected != 1 {
return 0, errors.New("登录异常")
}
return newTokenVersion, nil
}