一 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. 齐博软件 著名的老牌CMS开源系统 X1.0基于thinkphp开发的高性能免费开源PHP开放平台齐博x1.0基于thinkphp框架开发的高性能免费开源系统 主推圈子 论坛 预定拼团分销商城模块

    齐博X1--标签变量大全 1.网站名称: {$webdb.webname} 2.网址: {$webdb[www_url]} {:get_url('home')} 3.网站SEO关键词: 首页:{$we ...

  2. 一键部署haproxy脚本

    HAPROXY_VERSION=2.6.6 HAPROXY_FILE=haproxy-${HAPROXY_VERSION}.tar.gz #HAPROXY_FILE=haproxy-2.2.12.ta ...

  3. 手记系列之三 ----- 关于使用Nginx的一些使用方法和经验

    前言 本篇文章主要介绍的关于本人在使用Nginx的一些使用方法和经验~ Nginx介绍 介绍 Nginx("engine x")是一款是由俄罗斯的程序设计师Igor Sysoev所 ...

  4. 两种方案实现Dubbo泛化调用

    Dubbo的泛化调用是一个服务A在没有服务B的依赖,包的情况下,只知道服务B的服务名:服务的接口的全限定类名和方法名,以及参数,实现服务A调用服务B. 原文链接:http://blog.qiyuan. ...

  5. 2022-11-05 Acwing每日一题

    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...

  6. Atlassian Confluence 远程代码执行漏洞(CVE-2022-26134)漏洞复现

    目录 免责声明: Atlassian Confluence 远程代码执行漏洞(CVE-2022-26134)漏洞复现 漏洞概述: 影响版本: 漏洞复现: 利用POC: 利用过程: 修复建议: 参考 免 ...

  7. ThinkPhp5 自定义异常处理类

    在项目的开发过程中异常抛出尤为重要不仅能够做出友好提示帮助掩盖我们伟大的程序员们尴尬的瞬间,还能做到提示开发人员代码白编写的错误,下面进行自定义异常抛出类,纯属个人理解,希望大家指正 首先在框架中我们 ...

  8. linux ip命令

    ip link show # 显示网络接口信息 ip link set eth0 up # 开启网卡 ip link set eth0 down # 关闭网卡 ip link set eth0 pro ...

  9. MybatisPlus快速入手-----逆向工程

    public class getCode { @Test public void main1() { // 1.创建代码生成器 AutoGenerator mpg = new AutoGenerato ...

  10. 关于仿照js写python算法

    前言 我们学校的统一认证的登录系统,用了一套不知道哪弄来的 js加密算法 (我已经查到了,应该是出自这里 地址),有一个参数是通过 js 计算得到的,无奈我先想模拟登录就必须解决这个算法,这个说明是d ...