网络编程
位置:首页>> 网络编程>> Go语言>> go-micro微服务domain层开发示例详解

go-micro微服务domain层开发示例详解

作者:夏沫的梦  发布时间:2024-04-26 17:25:04 

标签:go,micro,微服务,domain

一 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层包含功能:

  • InitTable 初始化数据表

  • FindUserByName 根据用户名称查找用户信息

  • FindUserByID 根据用户ID查找用户信息

  • CreateUser 创建用户

  • DeleteUserByID 根据用户ID删除用户

  • UpdateUser 更新用户信息

  • FindAll 查找所有用户

  • ResetPwd 重置密码

  • GetPermission 获取权限

  • UpdatePermission 修改权限

  • EnableUser 启用账号

  • 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层包含功能:

  • AddUser 插入用户

  • DeleteUser 删除用户

  • UpdateUser 更新用户

  • FindUserByName 根据用户名称查找用户信息

  • FindUserByID 根据用户ID查找用户信息

  • CheckPwd 比对账号密码是否正确

  • ResetPwd 重置密码

  • GetPermission 获取权限

  • UpdatePermission 修改权限

  • EnableUser 启用账号

  • 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配置、注册中心的代码编写了,更多关于go-micro微服务domain层的资料请关注脚本之家其它相关文章!

来源:https://juejin.cn/post/7186490052279533626

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com