一 Handle层开发功能说明

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

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

从哪找需要开发的功能

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

二 代码编写

  • 在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的代码编写了,希望大家关注博主和关注专栏,第一时间获取最新内容,每篇博客都干货满满。

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

(14)go-micro微服务服务层Handle开发的更多相关文章

  1. 微服务平台(Micro Service Platform : MSP)旨在提供一个集开发、测试、运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效。

    微服务平台(Micro Service Platform : MSP)旨在提供一个集开发.测试.运维于一体的开发者专属平台,让开发者能快速构建或使用微服务,让开发更简单,让运维更高效. MSP采用业界 ...

  2. Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控与告警。

    系统目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 开源地址:https://github.com/cyq1162/Taurus.MVC 本系列第一篇:Tauru ...

  3. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目

    项目的简单介绍: 项目采用maven聚合工程 用spring boot 搭建 spring cloud的微服务 模块式开发 项目的截图: 搭建开始: 能上图 我少打字 1.首先搭建maven的聚合工程 ...

  4. Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台

    Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台: https://gitee.com/leecho/cola-cloud

  5. 微服务与敏捷开发(Scrum/Kanban)的核心思想之我见

    微服务与敏捷开发(Scrum/Kanban)的核心思想之我见   关于"微服务"和"敏捷开发"的文章网络上有很多,所以这里不再重复叙述这些概念的解释和特点,而是 ...

  6. [Abp vNext微服务实践] - 业务开发

    前几篇分别介绍了abp vNext微服务框架.开发环境搭建和vue element admin前端框架接入,在vue element admin中实现用户角色管理基本功能后就可以开始进行业务开发了,本 ...

  7. 基于DDD的微服务设计和开发实战

    你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案. 本文是基于 DDD 的微服务设计和开发实战篇,通过借鉴 ...

  8. 驱动领域DDD的微服务设计和开发实战

    你是否还在为微服务应该拆多小而争论不休?到底如何才能设计出收放自如的微服务?怎样才能保证业务领域模型与代码模型的一致性?或许本文能帮你找到答案. 本文是基于 DDD 的微服务设计和开发实战篇,通过借鉴 ...

  9. Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  10. Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

随机推荐

  1. 浅尝 ECDHE 协议流程

    前言 ECDHE 我之前是听都没听过, 但是新业务需要对前后端通信进行加密, 经过大佬推荐才知道有这个东西, 经过几天的学习和踩坑, 才大致明白其流程和使用方式. 过程坎坷, 好在最后还是成功运用到了 ...

  2. MongoDB 数据库的学习

    一.MongoDB的简介 1.MongoDB是什么? MongoDB 是由 C++ 语言编写的,基于分布式文件存储的数据库,是一个介于关系数据库和非关系数据库之间的产品,是最接近于关系型数据库的 No ...

  3. SQL-GROUP BY语句在MySQL中的一个错误使用被兼容的情况

    首先创建数据库hncu,建立stud表格. 添加数据: create table stud(sno varchar(30) not null primary key,sname varchar(30) ...

  4. 基于python的数学建模---轮廓系数的确定

    直接上代码 from sklearn import metrics import matplotlib.pyplot as plt from sklearn.cluster import KMeans ...

  5. 硬核!Apache Hudi Schema演变深度分析与应用

    1.场景需求 在医疗场景下,涉及到的业务库有几十个,可能有上万张表要做实时入湖,其中还有某些库的表结构修改操作是通过业务人员在网页手工实现,自由度较高,导致整体上存在非常多的新增列,删除列,改列名的情 ...

  6. 模块/os/sys/json

    目录 内容概要 1.os模块 2.sys模块 3.json模块/实战 内容概要 os模块 sys模块 json模块/实战 1.os模块 # os模块主要是与我们的操作系统打交道 1.创建文件夹(目录) ...

  7. thinkphp6的主要特性

    采用PHP7强类型(严格模式) 支持更多的PSR规范 多应用支持 ORM组件独立 改进的中间件机制 更强大和易用的查询 全新的事件系统 支持容器invoke回调 模板引擎组件独立 内部功能中间件化 S ...

  8. 30位以内随机产生时间戳加随机数id

    package com.zx.ps.web.gzdb; import java.text.SimpleDateFormat; import java.util.Date; public class c ...

  9. 论文解读(CDTrans)《CDTrans: Cross-domain Transformer for Unsupervised Domain Adaptation》

    论文信息 论文标题:CDTrans: Cross-domain Transformer for Unsupervised Domain Adaptation论文作者:Tongkun Xu, Weihu ...

  10. python重要内置模块

    目录 包的概念 包的具体使用 编程思想的转变 常用内置模块之collections模块 (收集) 常用内置模块之time模块 (时间) 常用内置模块之random模块 (随机) os模块 sys模块 ...