gin-login-register/services/user.go
2023-03-01 23:53:06 +08:00

79 lines
2.0 KiB
Go

package services
import (
"context"
"frank/gin-login-register/models"
"gorm.io/gorm"
"log"
)
type UserService interface {
InitTable()
Register(info *models.UserInfo) (*models.UserInfo, error)
Login(username string, password string) (*models.UserInfo, error)
FindByUsername(username string) (*models.UserInfo, error)
UsernameHasRegister(username string) bool
UserList() ([]*models.UserInfo, error)
}
type UserServiceImpl struct {
db *gorm.DB
ctx context.Context
}
func NewUserServiceImpl(db *gorm.DB, ctx context.Context) *UserServiceImpl {
return &UserServiceImpl{db: db, ctx: ctx}
}
func (u UserServiceImpl) InitTable() {
err := u.db.AutoMigrate(&models.UserInfo{})
if err != nil {
log.Fatal("初始化表失败, error: ", err)
}
}
func (u UserServiceImpl) Register(info *models.UserInfo) (*models.UserInfo, error) {
result := u.db.Create(&info)
if result.Error != nil {
return nil, result.Error
}
return info, nil
}
func (u UserServiceImpl) Login(username string, password string) (*models.UserInfo, error) {
var user *models.UserInfo
result := u.db.Where("username=?", username).Where("password=?", password).First(&user)
if result.Error != nil {
return nil, result.Error
}
return user, nil
}
func (u UserServiceImpl) UserList() ([]*models.UserInfo, error) {
var mds []*models.UserInfo
result := u.db.Find(&mds)
if result.Error != nil {
return nil, result.Error
}
return mds, nil
}
func (u UserServiceImpl) FindByUsername(username string) (*models.UserInfo, error) {
var user *models.UserInfo
result := u.db.Where("username=?", username).First(&user)
log.Printf("result.RowsAffected: %+v", result)
if result.RowsAffected < 1 {
return nil, nil
}
if result.Error != nil {
return nil, result.Error
}
return user, nil
}
func (u UserServiceImpl) UsernameHasRegister(username string) bool {
result := u.db.Where("username=?", username).First(&models.UserInfo{})
log.Printf("result.RowsAffected: %+v", result.RowsAffected)
return result.RowsAffected > 0
}