Initial commit

This commit is contained in:
2025-05-11 20:32:14 +08:00
commit d97247159f
80 changed files with 13013 additions and 0 deletions

120
server/dao/user.go Normal file
View File

@@ -0,0 +1,120 @@
package dao
import (
"errors"
"gorm.io/gorm"
"nysoure/server/model"
)
func CreateUser(username string, hashedPassword []byte) (model.User, error) {
isEmpty, err := IsUserDataBaseEmpty()
if err != nil {
return model.User{}, err
}
user := model.User{
Username: username,
PasswordHash: hashedPassword,
IsAdmin: isEmpty,
}
exists, err := ExistsUser(username)
if err != nil {
return user, err
}
if exists {
return user, &model.RequestError{
Message: "User already exists",
}
}
if err := db.Create(&user).Error; err != nil {
return user, err
}
return user, nil
}
func ExistsUser(username string) (bool, error) {
var count int64
if err := db.Model(&model.User{}).Where("username = ?", username).Count(&count).Error; err != nil {
return false, err
}
return count > 0, nil
}
func GetUserByUsername(username string) (model.User, error) {
var user model.User
if err := db.Where("username = ?", username).First(&user).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return user, model.NewNotFoundError("User not found")
}
return user, err
}
return user, nil
}
func GetUserByID(id uint) (model.User, error) {
var user model.User
if err := db.First(&user, id).Error; err != nil {
return user, err
}
return user, nil
}
func UpdateUser(user model.User) error {
if err := db.Save(&user).Error; err != nil {
return err
}
return nil
}
func IsUserDataBaseEmpty() (bool, error) {
var user model.User
if err := db.First(&user).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return true, nil
}
return false, err
}
return false, nil
}
// 获取分页用户列表
func ListUsers(page, pageSize int) ([]model.User, int64, error) {
var users []model.User
var total int64
// 获取总数
if err := db.Model(&model.User{}).Count(&total).Error; err != nil {
return nil, 0, err
}
// 分页获取用户
offset := (page - 1) * pageSize
if err := db.Offset(offset).Limit(pageSize).Order("id desc").Find(&users).Error; err != nil {
return nil, 0, err
}
return users, total, nil
}
// 根据用户名搜索用户
func SearchUsersByUsername(username string, page, pageSize int) ([]model.User, int64, error) {
var users []model.User
var total int64
// 获取符合条件的总数
if err := db.Model(&model.User{}).Where("username LIKE ?", "%"+username+"%").Count(&total).Error; err != nil {
return nil, 0, err
}
// 分页获取符合条件的用户
offset := (page - 1) * pageSize
if err := db.Where("username LIKE ?", "%"+username+"%").Offset(offset).Limit(pageSize).Order("id desc").Find(&users).Error; err != nil {
return nil, 0, err
}
return users, total, nil
}
// 删除用户
func DeleteUser(id uint) error {
return db.Delete(&model.User{}, id).Error
}