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.
 
 
 
 
 
 

295 lines
5.6 KiB

package models
import (
"github.com/auxpi/auxpiAll"
)
type User struct {
Model
Username string `gorm:"size:32;UNIQUE" json:"username" `
Password string `gorm:"size:64" json:"password"`
IsAdmin bool `json:"is_admin"`
Email string `gorm:"size:100;UNIQUE" json:"email"`
Status uint `json:"status"`
Token string `gorm:"UNIQUE" json:"token"`
Version uint `json:"version"`
RoleID uint `json:"role_id"`
Role Role `json:"role"`
Image []Image `json:"images" json:"image"`
}
func CheckAdminAuth(username, password string) bool {
var auth User
err := db.Model(&User{}).
Where(User{Username: username, Password: password}).
First(&auth).Error
modelsError(auxpi.ErrorToString(err))
if auth.ID > 0 && auth.RoleID == 1 {
return true
}
return false
}
func CheckAndGetUser(email, password string) (user User, status bool) {
err := db.Model(&User{}).Where(User{Email: email, Password: password}).
First(&user).
Error
if user.ID > 0 && modelsError(auxpi.ErrorToString(err)) {
status = true
return
}
status = false
return
}
func CanUserRegister(username, email string) bool {
var user User
//首先查库看看能否注册
db.Model(&User{}).
Where(&User{Username: username}).
First(&user)
if user.ID > 0 {
return false
}
db.Model(&User{}).
Where(&User{Email: email}).
First(&user)
if user.ID > 0 {
return false
}
return true
}
func RegisterUser(username, email, password, token string) bool {
//验证一波先
if CanUserRegister(username, email) {
err := db.Create(&User{
Username: username,
Email: email,
Password: password,
Status: 1,
RoleID: ROLE_NORMAL_USER,
Token: token,
}).Error
return modelsError(auxpi.ErrorToString(err))
}
return false
}
func ActiveUser(token string) bool {
err := db.Model(&User{}).
Where(&User{Token: token}).
Update("token", token).
Error
return modelsError(auxpi.ErrorToString(err))
}
func GetUserInfo(username string) (info User) {
err := db.Preload("Role").
Model(&User{}).
Where("username = ?", username).
First(&info).Error
modelsError(auxpi.ErrorToString(err))
return info
}
func GetUsers(page, size int) (u []User, c int) {
err := db.Preload("Role").
Model(&User{}).
Count(&c).
Offset(page).
Limit(size).
Find(&u).
Error
modelsError(auxpi.ErrorToString(err))
return
}
func ResetUserPass(username, password string) bool {
err := db.Model(&User{}).
Where("username = ?", username).
Update("password", password).Error
return modelsError(auxpi.ErrorToString(err))
}
func ResetUserPassWithOld(id int, oldPass, newPass string) bool {
var user = User{}
err := db.Model(&User{}).Where(&User{
Model: Model{ID: id},
Password: oldPass,
}).First(&user).Error
modelsError(auxpi.ErrorToString(err))
if user.ID > 0 {
err = db.Model(&User{}).
Where("id = ?", id).
Update("password", newPass).Error
return modelsError(auxpi.ErrorToString(err))
}
return false
}
func ResetUserPassByEmail(email, password string) bool {
err := db.Model(&User{}).
Where("username = ?", email).
Update("password", password).Error
return modelsError(auxpi.ErrorToString(err))
}
func GetUserEmail(username string) (string, uint) {
var email User
err := db.Select("email").
Where(&User{Username: username}).
First(&email).Error
modelsError(auxpi.ErrorToString(err))
if email.Email != "" {
return email.Email, email.Version
}
return "", 0
}
func GetUserRegisterSevenDayReport() (report []Report) {
err := db.Model(&User{}).
Select("COUNT(*) AS `number` , created_day AS `date`").
Order("created_day DESC").
Group("created_day").
Limit(7).
Scan(&report).Error
modelsError(auxpi.ErrorToString(err))
return
}
func GetUserImagesByUserName(username string, size, offset int) (user User, images []Image, count int) {
err := db.
Model(&User{}).
Where(&User{Username: username}).
Find(&user).
Error
modelsError(auxpi.ErrorToString(err))
err = db.Model(&Image{}).
Where(&Image{UserID: user.ID}).
Count(&count).
Offset(offset).
Limit(size).
Find(&images).
Error
modelsError(auxpi.ErrorToString(err))
return
}
func GetUserInfoByToken(token string) (user User, status bool) {
err := db.Model(&user).
Where(&User{Token: token}).
First(&user).
Error
modelsError(auxpi.ErrorToString(err))
status = false
if user.ID > 0 {
status = true
}
return
}
func GetUserInfoByEmail(email string) (user User, status bool) {
err := db.
Model(&user).
Where(&User{Email: email}).
First(&user).Error
modelsError(auxpi.ErrorToString(err))
if user.ID > 0 {
status = true
return
}
status = false
return
}
func GetUserInfoByID(id int) (user User, status bool) {
err := db.Model(&user).
Preload("Role").
Where("id=?", id).
First(&user).Error
modelsError(auxpi.ErrorToString(err))
if user.ID > 0 {
status = true
return
}
status = false
return
}
func DeleteUserById(id int) bool {
//任何情况都不能删除管理员
user, status := GetUserInfoByID(id)
if !status {
return false
}
if user.RoleID == 1 {
return false
}
err := db.Model(&User{}).
Where("id=?", id).
Delete(&User{}).Error
return modelsError(auxpi.ErrorToString(err))
}
func MigrateUsers() error {
if db.HasTable(&User{}) {
err := db.DropTable(&User{}).Error
err = db.CreateTable(&User{}).Error
return err
} else {
err := db.CreateTable(&User{}).Error
return err
}
}
func RegisterAdmin(u, pass, token, email string) {
user := &User{}
user.ID = 1
user.Password = pass
user.Username = u
user.Token = token
user.Status = 1
user.IsAdmin = true
user.Email = email
user.Version = 1
user.RoleID = 1
db.Create(user)
}