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.
153 lines
3.8 KiB
153 lines
3.8 KiB
2 months ago
|
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
|
||
|
}
|