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

(5)go-micro微服务domain层开发

时间:2023-01-09 11:46:41浏览次数:64  
标签:domain return userID micro int64 user error go model

目录

一 domain层介绍说明

  • domain层专注于数据库数据领域开发,我们把数据库相关操作全部写在domain层。

  • model层:数据表字段定义与开发

  • repository层:数据库数据CURD操作

  • service层:数据库相关业务操作

  • 对于复杂的业务操作,这样可以使业务逻辑更加清晰,有利于后期开发与维护。

二 model层开发

  • 在model目录下新建 user.go 文件
package model

import (
   "time"
)

type User struct {
   //主键
   ID int64 `gorm:"primary_key;not_null;auto_increment" json:"id"`
   UserID int64 `gorm:"unique_index;not_null" json:"user_id"`
   UserName string `gorm:"unique_index;not_null" json:"username"`
   FirstName string `json:"first_name"`
   LastName string `json:"last_name"`
   PassWord string `json:"password"`
   Permission int64 `json:"permission"`
   CreateDate time.Time `json:"create_date"`
   UpdateDate time.Time `json:"update_date"`
   IsActive int64 `json:"is_active"`
   Email string `json:"email"`
}

三 repository层开发

  • 在repository层开发目录下新建 user_repository.go 文件

  • repository层包含功能:

    1. InitTable 初始化数据表

    2. FindUserByName 根据用户名称查找用户信息

    3. FindUserByID 根据用户ID查找用户信息

    4. CreateUser 创建用户

    5. DeleteUserByID 根据用户ID删除用户

    6. UpdateUser 更新用户信息

    7. FindAll 查找所有用户

    8. ResetPwd 重置密码

    9. GetPermission 获取权限

    10. UpdatePermission 修改权限

    11. EnableUser 启用账号

    12. DisableUser 禁用账号

package repository

import (
   "account/domain/model"
   "github.com/jinzhu/gorm"
)

type IUserRepository interface {
   // InitTable 初始化数据表
   InitTable() error
   // FindUserByName 根据用户名称查找用户信息
   FindUserByName(string) (*model.User, error)
   // FindUserByID 根据用户ID查找用户信息
   FindUserByID(int64) (*model.User, error)
   // CreateUser 创建用户
   CreateUser(*model.User) (int64, error)
   // DeleteUserByID 根据用户ID删除用户
   DeleteUserByID(int64) error
   // UpdateUser 更新用户信息
   UpdateUser(*model.User) error
   // FindAll 查找所有用户
   FindAll() ([]model.User, error)
   // ResetPwd 重置密码
   ResetPwd(int64, string) error
   // GetPermission 获取权限
   GetPermission(int64) (int64, error)
   // UpdatePermission 修改权限
   UpdatePermission(int64, int64) error
   // EnableUser 启用账号
   EnableUser(int64) error
   // DisableUser 禁用账号
   DisableUser(int64) error
}

// NewUserRepository 创建UserRepository
func NewUserRepository(db *gorm.DB) IUserRepository {
   return &UserRepository{mysqlDb: db}
}

type UserRepository struct {
   mysqlDb *gorm.DB
}

// InitTable 初始化表
func (u *UserRepository) InitTable() error {
   return u.mysqlDb.CreateTable(&model.User{}).Error
}

// FindUserByName 根据用户名称查找用户信息
func (u *UserRepository) FindUserByName(name string) (user *model.User, err error) {
   user = &model.User{}
   return user, u.mysqlDb.Where("username=?", name).Find(user).Error
}

// FindUserByID 根据用户ID查找用户信息
func (u *UserRepository) FindUserByID(userID int64) (user *model.User, err error) {
   user = &model.User{}
   return user, u.mysqlDb.Where("user_id=?", userID).Find(user).Error
}

// CreateUser 创建用户
func (u *UserRepository) CreateUser(user *model.User) (userID int64, err error) {
   return user.ID, u.mysqlDb.Create(user).Error
}

// DeleteUserByID 删除用户
func (u *UserRepository) DeleteUserByID(userID int64) error {
   return u.mysqlDb.Where("user_id=?", userID).Delete(&model.User{}).Error
}

// UpdateUser 更新用户信息
func (u *UserRepository) UpdateUser(user *model.User) error {
   return u.mysqlDb.Model(user).Update(&user).Error
}

// FindAll 查找所有用户
func (u *UserRepository) FindAll() (userAll []model.User, err error) {
   return userAll, u.mysqlDb.Find(&userAll).Error
}

// ResetPwd 重置密码
func (u *UserRepository) ResetPwd(userID int64, Pwd string) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(model.User{PassWord:Pwd}).Error
}

// GetPermission 获取权限
func (u *UserRepository) GetPermission(userID int64) (Permission int64, err error) {
   var user model.User
   return user.Permission,u.mysqlDb.Where("user_id=?",userID).Find(user).Error
}

// UpdatePermission 修改权限
func (u *UserRepository) UpdatePermission(userID int64, Permission int64) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(model.User{Permission:Permission}).Error
}

// EnableUser 启用账号
func (u *UserRepository) EnableUser(userID int64) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 1}).Error
}

// DisableUser 禁用账号
func (u *UserRepository) DisableUser(userID int64) error {
   return u.mysqlDb.Where("user_id=?",userID).Update(&model.User{IsActive: 0}).Error
}

四 service层开发

  • 在service目录下新建 user_service.go 文件

  • service层包含功能:

    1. AddUser 插入用户

    2. DeleteUser 删除用户

    3. UpdateUser 更新用户

    4. FindUserByName 根据用户名称查找用户信息

    5. FindUserByID 根据用户ID查找用户信息

    6. CheckPwd 比对账号密码是否正确

    7. ResetPwd 重置密码

    8. GetPermission 获取权限

    9. UpdatePermission 修改权限

    10. EnableUser 启用账号

    11. DisableUser 禁用账号

package service

import (
   "account/domain/model"
   "account/domain/repository"
   "errors"
   "golang.org/x/crypto/bcrypt"
)

type IUserService interface {
   // AddUser 插入用户
   AddUser(user *model.User) (int64, error)
   // DeleteUser 删除用户
   DeleteUser(int64) error
   // UpdateUser 更新用户
   UpdateUser(user *model.User, isChangePwd bool) (err error)
   // FindUserByName 根据用户名称查找用户信息
   FindUserByName(string) (*model.User, error)
   // FindUserByID 根据用户ID查找用户信息
   FindUserByID(int64) (*model.User, error)
   // CheckPwd 比对账号密码是否正确
   CheckPwd(userName string, pwd string) (isOk bool, err error)
   // ResetPwd 重置密码
   ResetPwd(int64, string) error
   // GetPermission 获取权限
   GetPermission(int64) (int64, error)
   // UpdatePermission 修改权限
   UpdatePermission(int64, int64) error
   // EnableUser 启用账号
   EnableUser(int64) error
   // DisableUser 禁用账号
   DisableUser(int64) error
}

// NewUserService 创建实例
func NewUserService(userRepository repository.IUserRepository) IUserService {
   return &UserService{UserRepository: userRepository}
}

type UserService struct {
   UserRepository repository.IUserRepository
}

// GeneratePassword 加密用户密码
func GeneratePassword(userPassword string) ([]byte, error) {
   return bcrypt.GenerateFromPassword([]byte(userPassword), bcrypt.DefaultCost)
}

// ValidatePassword 验证用户密码
func ValidatePassword(userPassword string, hashed string) (isOk bool, err error) {
   if err = bcrypt.CompareHashAndPassword([]byte(hashed), []byte(userPassword)); err != nil {
      return false, errors.New("密码比对错误")
   }
   return true, nil
}

// AddUser 插入用户
func (u *UserService) AddUser(user *model.User) (userID int64, err error) {
   pwdByte, err := GeneratePassword(user.PassWord)
   if err != nil {
      return user.ID, err
   }
   user.PassWord = string(pwdByte)
   return u.UserRepository.CreateUser(user)
}

// DeleteUser 删除用户
func (u *UserService) DeleteUser(userID int64) error {
   return u.UserRepository.DeleteUserByID(userID)
}

// UpdateUser 更新用户
func (u *UserService) UpdateUser(user *model.User, isChangePwd bool) (err error) {
   if isChangePwd {
      pwdByte, err := GeneratePassword(user.PassWord)
      if err != nil {
         return nil
      }
      user.PassWord = string(pwdByte)
   }
   return u.UserRepository.UpdateUser(user)
}

// FindUserByName 根据用户名称查找用户信息
func (u *UserService) FindUserByName(userName string) (user *model.User, err error) {
   return u.UserRepository.FindUserByName(userName)
}

// FindUserByID 根据用户名称查找用户信息
func (u *UserService) FindUserByID(userId int64) (user *model.User, err error) {
   return u.UserRepository.FindUserByID(userId)
}

// CheckPwd 比对账号密码是否正确
func (u *UserService) CheckPwd(userName string, pwd string) (isOk bool, err error) {
   user, err := u.UserRepository.FindUserByName(userName)
   if err != nil {
      return false, err
   }
   return ValidatePassword(pwd, user.PassWord)
}

// ResetPwd 重置密码
func (u *UserService) ResetPwd(userID int64, pwd string) error {
   return u.UserRepository.ResetPwd(userID,pwd)
}

// GetPermission 获取权限
func (u *UserService) GetPermission(userID int64) (permission int64, err error) {
   return u.UserRepository.GetPermission(userID)
}

// UpdatePermission 修改权限
func (u *UserService) UpdatePermission(userID int64, permission int64) error {
   return u.UserRepository.UpdatePermission(userID,permission)
}

// EnableUser 启用账号
func (u *UserService) EnableUser(userID int64) error {
   return u.UserRepository.EnableUser(userID)
}

// DisableUser 禁用账号
func (u *UserService) DisableUser(userID int64) error {
   return u.UserRepository.DisableUser(userID)
}

五 最后

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

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

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

标签:domain,return,userID,micro,int64,user,error,go,model
From: https://www.cnblogs.com/qi66/p/17036546.html

相关文章

  • 让 Java Agent 在 Dragonwell 上更好用
    本文是《容器中的Java》系列文章之3/n,欢迎关注后续连载 ......
  • Go语言学习Day3
    1.go的函数定义格式为函数名,参数列表,返回值列表和函数体。如果函数没有返回值,则返回列表可以省略。函数从第一条语句开始执行,直到执行return语句或者执行函数的最后一条语......
  • django_博客练习(文章详情/点赞/评论)
    文章详情页渲染文章内容侧边栏有分类显示通过设置路由的方式传递参数文章id作者用户名文章是通过文章对象渲染到前端的,所以你点击文章时也可以告诉后端你点击的是哪......
  • go语言环境配置(windous)
    1.下载go语言安装包:https://golang.google.cn/dl/2.配置环境变量:GOBIN:项目bin目录 GOPATH:项目目录(src下)GOROOT(go的环境变量)GOROOT,Go解释器安装路径,用于之后去调用g......
  • (转)Go test 详解
    原文:https://www.jianshu.com/p/b28595a281ecGotest的测试用例形式测试用例有四种形式:TestXxxx(t*testing.T)//基本测试用例BenchmarkXxxx(b*testing.B)//......
  • go语言基础
    1.变量的三种格式(1)标准格式:var变量名类型(2)批量格式:var(变量名类型,变量名类型。。。。。)(3)简短格式:变量名:=表达式(有缺陷,类似于python中的变量规则)注意:简短格式只......
  • 原神私服替换模型(3Dmigoto)教程
    本期教程教大家如何修改原神私服角色模型​首先下载3Dmigoto​第一次打开需要设置游戏路径​打开之后搜索loader点下一个​会跳转到这个地方,然后在我标蓝的地方输入你的游戏......
  • Django views.py 增,删,改
    fromdjangoimportformsfromdjango.shortcutsimportrender,redirectfromapp01importmodels#Createyourviewshere.defdepart_list(request):  """......
  • 2023年谷歌SEO购买外链必定指南,Google购买反向链接攻略
    本文由光算创作,分享本年最新的谷歌外链购买指南,涵盖了很多干货。本文有可能会被修改和剽窃,我们佛系对待这种行为吧。我们得出的一个大数据模型可以看到,就算你的外贸网站能持......
  • 谷歌搜索外链有用吗?google外链效果怎么样?
    本文主要分享关于谷歌外链的效果数据分析和案例本文由光算创作,有可能会被修改和剽窃,我们佛系对待这种行为吧。谷歌搜索外链有用吗?答案是:没有用!我们先来了解一下什么是谷歌搜......