package service import ( "time" "chat-room/dao/pool" "chat-room/errors" "chat-room/global/log" "chat-room/model" "chat-room/model/request" "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.Debug("user", log.Any("user in service", user)) db := pool.GetDB() var queryUser *model.User db.First(&queryUser, "username = ?", user.Username) log.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.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) 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.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.Debug("userFriend", log.Any("userFriend", userFriend)) return nil }