package service import ( "database/sql" "drive-linked/pkg/common" "drive-linked/pkg/dto" "drive-linked/pkg/model" "drive-linked/pkg/serializer" "drive-linked/pkg/utils" "github.com/kataras/iris/v12" "net/http" "regexp" ) type UsersService struct { Ctx iris.Context } var ( UserConditions = [...]string{"id", "name", "email", "nickname"} ) func NewUsersService(ctx iris.Context) *UsersService { return &UsersService{Ctx: ctx} } func (serv *UsersService) GetOneUser(conditions *map[string]interface{}) { var err error resp := dto.NewResponse(serv.Ctx) user := &model.User{} err = user.GetProfileWithConditions(conditions) switch err { case nil: // 复制到dto对象 var userResult dto.UserProfile err = userResult.CopyOf(user) if err != nil { resp.Error(http.StatusInternalServerError, "service.users Error") } resp.Success(userResult) case sql.ErrNoRows: resp.Error(serializer.ErrNoUser, "用户不存在") default: resp.Error(http.StatusInternalServerError, "获取用户信息失败,数据库异常") } } func (serv *UsersService) Login(loginParams dto.LoginParams) { var err error resp := dto.NewResponse(serv.Ctx) // 登录逻辑 // 判断账号类型 邮箱/用户名 var method string emailExp := regexp.MustCompile("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?") if emailExp.Match([]byte(loginParams.Account)) { method = model.LoginMethodEmail } else { method = model.LoginMethodName } // 从数据库取出原密码 userLogin := model.Login{} err = userLogin.GetLoginInfo(loginParams.Account, method) switch err { case nil: // 检查密码 match, _ := utils.CheckPasswd(loginParams.Password, userLogin.Password) if match { // 登录成功,签发token sToken, _ := common.NewShortToken(userLogin.Name) rToken, _ := common.NewRefreshToken(userLogin.Name) resp.Success(serializer.LoginResponse{ Token: sToken, RefreshToken: rToken, }) } else { resp.ErrBadAccPasswd() } case sql.ErrNoRows: resp.Error(serializer.ErrNoUser, "用户不存在") default: resp.Error(http.StatusInternalServerError, "获取用户信息失败,数据库异常") } }