-
Notifications
You must be signed in to change notification settings - Fork 1
/
userService.go
129 lines (120 loc) · 3.53 KB
/
userService.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package service
import (
"errors"
"fmt"
uuid "github.com/satori/go.uuid"
"github.com/zty-f/Mini-Tiktok/common"
"github.com/zty-f/Mini-Tiktok/repository"
"github.com/zty-f/Mini-Tiktok/utils"
"strings"
)
type UserService struct {
}
// NewUserServiceInstance 返回一个用户服务类的指针变量,可以方便调用该结构体的方法
func NewUserServiceInstance() *UserService {
return &UserService{}
}
// DoRegister 注册
func (u *UserService) DoRegister(userName, password string) (int64, string, error) {
fmt.Printf("用户正在注册:" + userName + ":" + password)
uErr := checkUserName(userName)
pErr := checkPassword(password)
if uErr != nil {
return 0, "", uErr
}
if pErr != nil {
return 0, "", pErr
}
flag, err1 := userDaoInstance.QueryIsContainsUserName(userName)
if err1 != nil {
return 0, "", err1
}
if flag {
return 0, "", errors.New("用户名已存在,请创建一个独一无二的name吧!")
}
password = utils.MD5(password)
//调用Dao层
user, err := userDaoInstance.CreateByNameAndPassword(userName, password)
if err != nil {
return 0, "", err
}
// 因为用户名和密码拼接构成token也有可能构成重复,所以使用uuid生成唯一token
token := uuid.NewV4()
return user.Id, token.String(), nil
}
// DoLogin 登录
func (u *UserService) DoLogin(userName, password string) (*repository.User, string, error) {
flag, err1 := userDaoInstance.QueryIsContainsUserName(userName)
if err1 != nil {
return nil, "", err1
}
if !flag {
fmt.Println("用户名重复!")
return nil, "", errors.New("用户名或者密码错误!")
}
user, err := userDaoInstance.QueryLoginInfo(userName)
fmt.Println(user.Id)
fmt.Println(user.Password)
if err != nil {
return nil, "", err
}
if !strings.EqualFold(utils.MD5(password), user.Password) {
fmt.Println("密码错误!")
return nil, "", errors.New("用户名或者密码错误!")
}
fmt.Printf("用户正在登录:" + userName + ":" + password)
// 因为用户名和密码拼接构成token也有可能构成重复,所以使用uuid生成唯一token
token := uuid.NewV4()
return user, token.String(), nil
}
// DoUserInfo 获取用户信息
func (u *UserService) DoUserInfo(userId, loginUserId int64) (*common.UserVo, error) {
user, err := userDaoInstance.QueryUserById(userId)
if err != nil {
return nil, err
}
favoriteCount, err1 := favoriteDaoInstance.QueryFavoriteCountByUserId(userId)
if err1 != nil {
return nil, err1
}
var totalFavorited = int64(0)
if count, err4 := videoDaoInstance.QueryPublishCountByUserId(userId); err4 != nil {
return nil, err4
} else if count > 0 {
totalFavorited, err = videoDaoInstance.QueryTotalFavoriteCountByUserId(userId)
}
if err != nil {
return nil, err
}
isFollow, err3 := relationDaoInstance.QueryIsFollowByUserIdAndToUserId(loginUserId, userId)
if err3 != nil {
return nil, err3
}
loginUser := &common.UserVo{
Id: user.Id,
Name: user.Name,
FollowCount: user.FollowCount,
FollowerCount: user.FollowerCount,
IsFollow: isFollow,
Avatar: user.Avatar,
Signature: user.Signature,
BackgroundImage: user.BackgroundImage,
TotalFavorited: totalFavorited,
FavoriteCount: favoriteCount,
}
return loginUser, nil
}
//检查用户名
func checkUserName(userName string) error {
if len(userName) > MaxUsernameLen {
return errors.New("username is too long")
}
return nil
}
//检查密码
func checkPassword(passWord string) error {
if len(passWord) > MaxPasswordLen {
return errors.New("password is too long")
}
return nil
}