首页 > 其他分享 >(14)go-micro微服务服务层Handle开发

(14)go-micro微服务服务层Handle开发

时间:2023-01-18 09:56:26浏览次数:66  
标签:return 14 err nil req AccountService micro Handle rsp

目录

一 Handle层开发功能说明

需要完成的服务开发功能:

  1. 登录
  2. 注册
  3. 查询用户信息
  4. 修改信息
  5. 发送注册邮件
  6. 发送重置密码邮件
  7. 重置密码
  8. 获取权限
  9. 修改权限
  10. 退出账号
  11. 删除账号
  12. 禁用账号
  13. 启用账号

从哪找需要开发的功能

  • 找到proto/account/account.pb.micro.go文件,点击结构,点击AccountService
  • 此部分显示的服务功能需要我们重写完成

image.png

二 代码编写

  • 在handle/account.go文件中,先把原来的内容删掉(删掉函数即可)

  • 编写服务功能:

package handler

import (
   "account/common/mail"
   "account/common/snow_flake"
   "account/common/token"
   "account/common/utils"
   "account/domain/model"
   "account/domain/service"
   . "account/proto/account"
   "context"
   "errors"
   "fmt"
   "time"
)

type Account struct {
   AccountService service.IUserService
}

// Login 登录
func (a *Account) Login(ctx context.Context, req *LoginRequest, rsp *LoginResponse) error {
   userInfo, err := a.AccountService.FindUserByName(req.Username)
   isOk, err := a.AccountService.CheckPwd(req.Username, req.Password)
   if err != nil {
      return err
   }
   token2, err := token.GenToken(req.Username)
   if err != nil {
      return err
   }
   token.SetToken(req.Username, token2)
   rsp.IsSuccess = isOk
   rsp.Token = token2
   rsp.UserId = userInfo.UserID
   return nil
}

// Register 注册
func (a *Account) Register(ctx context.Context, req *RegisterRequest, rsp *RegisterResponse) error {
   var sf snow_flake.Snowflake
   userId := sf.NextVal()
   _, err := mail.CheckMail(req.RegisterRequest.Email, req.Code)
   if err != nil {
      return err
   }
   nowTime := time.Now()
   userRegister := &model.User{
      UserID:     userId,
      UserName:   req.RegisterRequest.Username,
      FirstName:  req.RegisterRequest.FirstName,
      LastName:   req.RegisterRequest.LastName,
      PassWord:   req.RegisterRequest.Password,
      Permission: 0,
      CreateDate: nowTime,
      UpdateDate: nowTime,
      IsActive:   1,
      Email:      req.RegisterRequest.Email,
   }
   _, err = a.AccountService.AddUser(userRegister)
   if err != nil {
      return err
   }
   mail.DelMail(req.RegisterRequest.Email)
   rsp.IsSuccess = true
   rsp.UserId = userId
   return nil
}

// GetUserInfo 查询用户信息
func (a *Account) GetUserInfo(ctx context.Context, req *UserIdRequest, rsp *UserInfoResponse) error {
   userInfo, err := a.AccountService.FindUserByID(req.UserId)
   if err != nil {
      return err
   }
   rsp = utils.UserForResponse(rsp, userInfo)
   fmt.Println(rsp)
   return nil
}

// UpdateUserInfo 修改信息
func (a *Account) UpdateUserInfo(ctx context.Context, req *UserInfoRequest, rsp *Response) error {
   var user *model.User
   err := utils.SwapTo(req, user)
   if err != nil {
      return err
   }
   isChangePwd := false
   if req.UserInfo.Password != "" {
      isChangePwd = true
   }
   if err = a.AccountService.UpdateUser(user, isChangePwd); err != nil {
      return err
   }
   rsp.Message = "修改信息成功"
   return nil
}

// SendRegisterMail 发送注册邮件
func (a *Account) SendRegisterMail(ctx context.Context, req *SendMailRequest, rsp *SendMailResponse) error {
   code, err := mail.SendRegisterMail(req.Email)
   if err != nil {
      return err
   }
   mail.SetMail(req.Email, code)
   rsp.Msg = "邮件发送成功"
   rsp.Code = code
   return nil
}

// SendResetPwdMail 发送重置密码邮件
func (a *Account) SendResetPwdMail(ctx context.Context, req *SendMailRequest, rsp *SendMailResponse) error {
   email := req.Email
   code, err := mail.SendResetPwdMail(email)
   if err != nil {
      return err
   }
   mail.SetMail(email, code)
   rsp.Msg = "邮件发送成功"
   return nil
}

// ResetPwd 重置密码
func (a *Account) ResetPwd(ctx context.Context, req *ResetPwdRequest, rsp *Response) error {
   userInfo, err := a.AccountService.FindUserByID(req.UserId)
   if err != nil {
      return err
   }
   code, err := mail.GetMail(userInfo.Email)
   if err != nil {
      return err
   }
   if code != req.Code {
      return errors.New("验证码错误")
   }
   if err := a.AccountService.ResetPwd(req.UserId, req.Password); err != nil {
      return err
   }
   rsp.Message = "重置密码成功"
   return nil
}

// GetUserPermission 获取权限
func (a *Account) GetUserPermission(ctx context.Context, req *UserIdRequest, rsp *GetPermissionResponse) error {
   permission, err := a.AccountService.GetPermission(req.UserId)
   if err != nil {
      return err
   }
   rsp.Permission = permission
   return nil
}

// UpdateUserPermission 修改权限
func (a *Account) UpdateUserPermission(ctx context.Context, req *UpdatePermissionRequest, rsp *Response) error {
   if err := a.AccountService.UpdatePermission(req.UserId, req.Permission); err != nil {
      return err
   }
   rsp.Message = "修改权限成功"
   return nil
}

// Logout 退出账号
func (a *Account) Logout(ctx context.Context, req *UserIdRequest, rsp *Response) error {
   userInfo, err := a.AccountService.FindUserByID(req.UserId)
   if err != nil {
      return err
   }
   _, err = token.GenToken(userInfo.UserName)
   if err != nil {
      return errors.New("账号未登录!")
   }
   token.DelToken(userInfo.UserName)
   rsp.Message = "退出账号成功"
   return nil
}

// DelUser 删除账号
func (a *Account) DelUser(ctx context.Context, req *UserIdRequest, rsp *Response) error {
   if err := a.AccountService.DeleteUser(req.UserId); err != nil {
      return err
   }
   rsp.Message = "账号删除成功"
   return nil
}

// DisableUser 禁用账号
func (a *Account) DisableUser(ctx context.Context, req *UserIdRequest, rsp *Response) error {
   if err := a.AccountService.DisableUser(req.UserId); err != nil {
      return err
   }
   rsp.Message = "账号禁用成功"
   return nil
}

// EnableUser 启用账号
func (a *Account) EnableUser(ctx context.Context, req *UserIdRequest, rsp *Response) error {
   if err := a.AccountService.EnableUser(req.UserId); err != nil {
      return err
   }
   rsp.Message = "账号启用成功"
   return nil
}
  • 至此,handle层开发完毕

三 最后

  • 至此,go-micro微服务项目服务层Handle开发工作就正式完成。

  • 接下来就开始main.go的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。

欢迎大家加入 夏沫の梦的学习交流群 进行学习交流经验,点击 夏沫の梦学习交流

标签:return,14,err,nil,req,AccountService,micro,Handle,rsp
From: https://www.cnblogs.com/qi66/p/17059191.html

相关文章

  • day14-常用API
    1.API1.1API概述【理解】什么是API​ API(ApplicationProgrammingInterface):应用程序编程接口java中的API​ 指的就是JDK中提供的各种功能的Java类,这些类......
  • 力扣每日一题2023.1.17---1814. 统计一个数组中好对子的数目
    给你一个数组 nums ,数组中只包含非负整数。定义 rev(x) 的值为将整数 x 各个数字位反转得到的结果。比方说 rev(123)=321 , rev(120)=21 。我们称满足下面条......
  • 创建分区表在交换分区时报警ORA-14097的处理记录
    问题描述:创建分区表在交换分区时报警ORA-14097的处理记录.数据库:oracle11.2.0.41、问题重现HR@orcl150>createtablep_emp2(salnumber(7,2))3partitionbyran......
  • P1941 [NOIP2014 提高组] 飞扬的小鸟 题解
    WC-2023上的题目。线性动态规划P1941[NOIP2014提高组]飞扬的小鸟我们先不管障碍物。设\(f[i][j]\)表示来到点\((i,j)\)的最少点击屏幕数。因为每秒要不上升\(......
  • 「解题报告」ARC142D Deterministic Placing
    好?首先我们可以发现,第一步和第三步的局面必须相等,因为第二步可以反着走回第一步,如果不相等那么下一步走的方案就不唯一了。然后我们考虑走的形式,由于是一棵树,没有环,我们......
  • 17th Jan 1814. 统计一个数组中好对子的数目(每日一题)
    给你一个数组nums,数组中只包含非负整数。定义rev(x)的值为将整数x各个数字位反转得到的结果。比方说rev(123)=321,rev(120)=21。我们称满足下面条件的下标对......
  • java:日期转型将“2023-03-14 00:00:00“转为年月日
    java:日期转型将"2023-03-1400:00:00"转为年月日old="2023-03-1400:00:00"Datedate=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").parse(old);old=newSimpleDateForm......
  • daily study 14
    初识指针;指针是什么?在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(pointsto)存在电脑存储器中另一个地方的值。由于通过地址能找到所需......
  • WeOps上新啦 | WeOpsV3.14拓展云平台能力,支持自动发现和监控告警
    终于等到WeOps拓展云平台的能力了!V3.14版本拓展云平台的能力,VMware、腾讯云、阿里云都支持自动发现和采集,此外,云平台的监控告警能力也在这个版本进行补充啦。本次WeOpsV3.14......
  • 「解题报告」[ARC143E] Reversi
    挺弱智的题但是我不会首先从一个叶子开始考虑,如果这个叶子是白的那么就应该先选它,否则就应该先选它父亲。然后这样我们可以递归着对子树进行计算,一些子树需要先选,一些子......