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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: (14)go-micro微服务服务层Handle开发

一 Handle层开发功能说明

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

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


从哪找需要开发的功能

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


64.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的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。
相关文章
|
2天前
|
JSON Java 程序员
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(2)
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(2)
9 3
|
4天前
|
设计模式 运维 监控
深入理解后端开发中的微服务架构
【6月更文挑战第23天】本文旨在探索微服务架构在后端开发中的应用及其带来的变革。通过分析微服务的核心原则、设计模式以及与传统单体架构的对比,揭示微服务如何优化开发流程、提升系统的可扩展性与可维护性。文章还将讨论实施微服务时可能遇到的挑战和解决策略,为后端开发者提供实践指南。
|
2天前
|
消息中间件 负载均衡 持续交付
探索后端开发:微服务架构的演进与实践
【6月更文挑战第25天】本文深入探讨了微服务架构的概念、发展以及在现代后端开发中的应用。我们将通过一个虚构案例,展示如何将传统的单体应用重构为基于微服务的架构,并讨论在此过程中遇到的挑战和解决方案。文章旨在为读者提供从理论到实践的全面指导,帮助理解微服务架构的优势及其在企业级系统中的应用。
|
2天前
|
缓存 负载均衡 算法
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全(2)
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全(2)
9 1
|
2天前
|
程序员 测试技术 Docker
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全(1)
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day3 全网最全(1)
11 1
|
2天前
|
SQL Java 程序员
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(1)
马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day1最快 最全(1)
7 1
|
4天前
|
监控 API 数据安全/隐私保护
构建高效后端服务:微服务架构的实践与挑战
【6月更文挑战第23天】在现代软件开发中,微服务架构已成为设计高性能、可扩展后端系统的首选模式。本文将深入探讨微服务的设计原则、实践方法及其面临的技术挑战,旨在为开发者提供一个全面的微服务实施指南。
18 3
|
1天前
|
Java Nacos 微服务
Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册
Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册
10 0
|
2天前
|
关系型数据库 MySQL Shell
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(下)
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(下)
8 0
|
2天前
|
Java 程序员 Docker
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(上)
黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day2 全网最快最全(上)
5 0

热门文章

最新文章