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.
 
 
 

152 lines
3.8 KiB

package service
import (
"time"
"chat-room/internal/dao/pool"
"chat-room/internal/model"
"chat-room/pkg/common/request"
"chat-room/pkg/common/response"
"chat-room/pkg/errors"
"chat-room/pkg/global/log"
"github.com/google/uuid"
)
type userService struct {
}
var UserService = new(userService)
func (u *userService) Register(user *model.User) error {
db := pool.GetDB()
var userCount int64
db.Model(user).Where("username", user.Username).Count(&userCount)
if userCount > 0 {
return errors.New("user already exists")
}
user.Uuid = uuid.New().String()
user.CreateAt = time.Now()
user.DeleteAt = 0
db.Create(&user)
return nil
}
func (u *userService) Login(user *model.User) bool {
pool.GetDB().AutoMigrate(&user)
log.Logger.Debug("user", log.Any("user in service", user))
db := pool.GetDB()
var queryUser *model.User
db.First(&queryUser, "username = ?", user.Username)
log.Logger.Debug("queryUser", log.Any("queryUser", queryUser))
user.Uuid = queryUser.Uuid
return queryUser.Password == user.Password
}
func (u *userService) ModifyUserInfo(user *model.User) error {
var queryUser *model.User
db := pool.GetDB()
db.First(&queryUser, "username = ?", user.Username)
log.Logger.Debug("queryUser", log.Any("queryUser", queryUser))
var nullId int32 = 0
if nullId == queryUser.Id {
return errors.New("用户不存在")
}
queryUser.Nickname = user.Nickname
queryUser.Email = user.Email
queryUser.Password = user.Password
db.Save(queryUser)
return nil
}
func (u *userService) GetUserDetails(uuid string) model.User {
var queryUser *model.User
db := pool.GetDB()
db.Select("uuid", "username", "nickname", "avatar").First(&queryUser, "uuid = ?", uuid)
return *queryUser
}
// 通过名称查找群组或者用户
func (u *userService) GetUserOrGroupByName(name string) response.SearchResponse {
var queryUser *model.User
db := pool.GetDB()
db.Select("uuid", "username", "nickname", "avatar").First(&queryUser, "username = ?", name)
var queryGroup *model.Group
db.Select("uuid", "name").First(&queryGroup, "name = ?", name)
search := response.SearchResponse{
User: *queryUser,
Group: *queryGroup,
}
return search
}
func (u *userService) GetUserList(uuid string) []model.User {
db := pool.GetDB()
var queryUser *model.User
db.First(&queryUser, "uuid = ?", uuid)
var nullId int32 = 0
if nullId == queryUser.Id {
return nil
}
var queryUsers []model.User
db.Raw("SELECT u.username, u.uuid, u.avatar FROM user_friends AS uf JOIN users AS u ON uf.friend_id = u.id WHERE uf.user_id = ?", queryUser.Id).Scan(&queryUsers)
return queryUsers
}
func (u *userService) AddFriend(userFriendRequest *request.FriendRequest) error {
var queryUser *model.User
db := pool.GetDB()
db.First(&queryUser, "uuid = ?", userFriendRequest.Uuid)
log.Logger.Debug("queryUser", log.Any("queryUser", queryUser))
var nullId int32 = 0
if nullId == queryUser.Id {
return errors.New("用户不存在")
}
var friend *model.User
db.First(&friend, "username = ?", userFriendRequest.FriendUsername)
if nullId == friend.Id {
return errors.New("已添加该好友")
}
userFriend := model.UserFriend{
UserId: queryUser.Id,
FriendId: friend.Id,
}
var userFriendQuery *model.UserFriend
db.First(&userFriendQuery, "user_id = ? and friend_id = ?", queryUser.Id, friend.Id)
if userFriendQuery.ID != nullId {
return errors.New("该用户已经是你好友")
}
db.AutoMigrate(&userFriend)
db.Save(&userFriend)
log.Logger.Debug("userFriend", log.Any("userFriend", userFriend))
return nil
}
// 修改头像
func (u *userService) ModifyUserAvatar(avatar string, userUuid string) error {
var queryUser *model.User
db := pool.GetDB()
db.First(&queryUser, "uuid = ?", userUuid)
if NULL_ID == queryUser.Id {
return errors.New("用户不存在")
}
db.Model(&queryUser).Update("avatar", avatar)
return nil
}