wx-server/internal/dao/user.go

98 lines
2.7 KiB
Go
Raw Normal View History

2024-06-04 21:22:50 +08:00
package dao
import (
"time"
"gorm.io/gorm"
)
type User struct {
ID int32 `gorm:"primarykey;type:int"`
CreatedAt time.Time `gorm:"type:datetime(0)"`
UpdatedAt time.Time `gorm:"type:datetime(0)"`
DeletedAt gorm.DeletedAt `gorm:"index;type:datetime(0)"`
Username string `gorm:"type:varchar(64);default null;comment:'用户名称'"`
OpenId string `gorm:"type:varchar(255);default null;comment:'用户唯一标识'"`
AvatarId string `gorm:"type:varchar(32);default null;comment:'头像图片uuid'"`
Tags string `gorm:"type:json;default null;comment:'用户标签,json格式'"`
Persona string `gorm:"type:json;default null;comment:'用户个性化数据,json格式'"`
}
func (User) TableName() string { return "user" }
func User_WX_Insert(data *User) (int32, error) {
if err := s.db.Create(data).Error; err != nil {
return 0, err
}
return data.ID, nil
}
func User_WX_Query(openId string) (*User, error) {
var data User
if err := s.db.Where("open_id = ?", openId).First(&data).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, err
}
return &data, nil
}
func User_Query(userId int32) (*User, error) {
var data User
if err := s.db.Where("id = ?", userId).First(&data).Error; err != nil {
if err == gorm.ErrRecordNotFound {
return nil, nil
}
return nil, err
}
return &data, nil
}
// 修改用户名称
func User_Change_Username(userId int32, username string) error {
user := &User{ID: userId}
return s.db.Model(&user).Update("username", username).Error
}
// 修改用户头像
func User_Change_AvatarId(userId int32, avatarId string) error {
user := &User{ID: userId}
return s.db.Model(&user).Update("avatar_id", avatarId).Error
}
// 查询用户信息列表如果不存在则设置为nil
func User_Query_List(userIds []int32) (map[int32]*User, error) {
var list []*User
if err := s.db.Where("id in (?)", userIds).Find(&list).Error; err != nil {
return nil, err
}
reply := make(map[int32]*User)
for _, data := range list {
reply[data.ID] = data
}
return reply, nil
}
type UserBaseInfo struct {
ID int32 `gorm:"column:id"`
Username string `gorm:"column:username"`
AvatarId string `gorm:"column:avatar_id"`
}
// 批量查询用户的名称和头像信息
func User_Query_List_BaseInfo(userIds []int32) (map[int32]*UserBaseInfo, error) {
var list []*UserBaseInfo
if err := s.db.Model(&User{}).Where("id in (?)", userIds).Select("id, username, avatar_id").Find(&list).Error; err != nil && err != gorm.ErrRecordNotFound {
return nil, err
}
m := make(map[int32]*UserBaseInfo)
for _, info := range list {
m[info.ID] = info
}
return m, nil
}