mirror of https://github.com/kone-net/go-chat.git
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
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 |
|
}
|
|
|