Go+Vue3开发博客系统(四)
本文最后更新于 2024-08-19,文章内容距离上一次更新已经过去了很久啦,可能已经过时了,请谨慎参考喵。
前情提要
新增用户
还是一样的,首先创建用户表,表结构如下:
CREATE TABLE `sys_admin` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(64) NOT NULL COMMENT '账号',
`password` varchar(64) NOT NULL COMMENT '密码',
`nickname` varchar(64) DEFAULT NULL COMMENT '昵称',
`icon` varchar(500) DEFAULT NULL COMMENT '头像',
`sex` int(11) NOT NULL DEFAULT '1' COMMENT '性别:1-男;2-女',
`email` varchar(64) DEFAULT NULL COMMENT '邮箱',
`phone` varchar(64) DEFAULT NULL COMMENT '手机号',
`note` varchar(500) DEFAULT NULL COMMENT '备注信息',
`create_time` datetime NOT NULL COMMENT '创建时间',
`status` int(11) NOT NULL DEFAULT '1' COMMENT '账号启用状态:1-启用;2-禁用',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `username` (`username`) USING BTREE,
KEY `create_time` (`create_time`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='后台管理员表(用户)';
实际执行结果:
接下来就是常规操作,先创建结构体 /model/sysAdmin.go
:
// 系统用户相关模型
// @author DaBaiLuoBo
package model
import "goblog-admin/utils"
// SysAdmin 用户模型对象
type SysAdmin struct {
ID uint `gorm:"column:id;comment:'主键';primaryKey;NOT NULL" json:"id"` // ID
Username string `gorm:"column:username;varchar(64);comment:'用户账号';NOT NULL" json:"username"` // 用户账号
Password string `gorm:"column:password;varchar(64);comment:'密码';NOT NULL" json:"password"` // 密码
Nickname string `gorm:"column:nickname;varchar(64);comment:'昵称'" json:"nickname"` // 昵称
Status int `gorm:"column:status;default:1;comment:'账号启用状态:1-启用;2-禁用';NOT NULL" json:"status"` // 账号启用状态:1-启用;2-禁用
Icon string `gorm:"column:icon;varchar(500);comment:'头像'" json:"icon"` // 头像
Sex int `gorm:"column:sex;default:1;comment:'性别:1-男;2-女';NOT NULL" json:"sex"` // 性别:1-男;2-女
Email string `gorm:"column:email;varchar(64);comment:'邮箱'" json:"email"` // 邮箱
Phone string `gorm:"column:phone;varchar(64);comment:'手机号'" json:"phone"` // 手机号
Note string `gorm:"column:note;varchar(500);comment:'备注信息'" json:"note"` // 备注信息
CreateTime utils.HTime `gorm:"column:create_time;comment:'创建时间';NOT NULL" json:"createTime"` // 创建时间
}
func (SysAdmin) TableName() string {
return "sys_admin"
}
// AddSysAdminDto 新增用户参数对象
type AddSysAdminDto struct {
RoleId uint `validate:"required"` // 角色ID(不是用户ID)
Username string `validate:"required"` // 用户名(账号)
Password string `validate:"required"` // 密码
Nickname string `validate:"required"` // 昵称
Sex int // 性别:1-男;2-女
Phone string `validate:"required"` // 手机号
Email string `validate:"required"` // 邮箱
Note string // 备注信息
Status int `validate:"required"` // 账号启用状态:1-启用;2-禁用
}
然后创建API /api/sysAdmin.go
:
// 系统用户相关接口
// @author DaBaiLuoBo
package api
import (
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"goblog-admin/core"
"goblog-admin/model"
"goblog-admin/result"
"goblog-admin/utils"
"time"
)
// CreateSysAdmin 新增用户
// @Summary 新增用户
// @Tags 用户相关接口
// @Produce json
// @Description 新增用户
// @Param data body model.AddSysAdminDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/add [post]
func CreateSysAdmin(c *gin.Context) {
var dto model.AddSysAdminDto
_ = c.BindJSON(&dto)
// 对必填参数进行一个校验
err := validator.New().Struct(dto)
if err != nil {
result.Failed(c, int(result.ApiCode.MissParameter), result.ApiCode.GetMessage(result.ApiCode.MissParameter))
return
}
// 查询用户名是否重复
sysAdminByUsername := GetSysAdminByUsername(dto.Username)
if sysAdminByUsername.ID > 0 {
result.Failed(c, int(result.ApiCode.UsernameAlreadyExists), result.ApiCode.GetMessage(result.ApiCode.UsernameAlreadyExists))
return
}
// 新增用户
sysAdmin := model.SysAdmin{
Username: dto.Username,
Nickname: dto.Nickname,
Password: utils.EncryptionMd5(dto.Password), // 使用加密工具类加密密码
Phone: dto.Phone,
Email: dto.Email,
Sex: dto.Sex,
Note: dto.Note,
Status: dto.Status,
CreateTime: utils.HTime{Time: time.Now()},
}
core.Db.Create(&sysAdmin)
// 新增用户与角色关系表信息
sysAdminExists := GetSysAdminByUsername(dto.Username)
var sysAdminRole model.SysAdminRole
sysAdminRole.AdminId = sysAdminExists.ID // 用户ID
sysAdminRole.RoleId = dto.RoleId // 角色ID
core.Db.Create(&sysAdminRole)
result.Success(c, true)
}
// GetSysAdminByUsername 根据用户名称查询用户
func GetSysAdminByUsername(username string) (sysAdmin model.SysAdmin) {
core.Db.Where("username = ?", username).First(&sysAdmin)
return sysAdmin
}
在 /result/code.go
中定义一下新增的状态码:
// 状态码/状态信息
// @author DaiBaiLuoBo
package result
// Codes 定义状态
type Codes struct {
Message map[uint]string
Success uint
Failed uint
SysMenuIsExist uint
DelSysMenuFailed uint
DelSysChildMenuFailed uint
RoleAlreadyExists uint
DelSysRoleFailed uint
MissParameter uint
UsernameAlreadyExists uint
}
// ApiCode 状态码
var ApiCode = &Codes{
Success: 200,
Failed: 501,
SysMenuIsExist: 600,
DelSysMenuFailed: 601,
DelSysChildMenuFailed: 602,
RoleAlreadyExists: 603,
DelSysRoleFailed: 604,
MissParameter: 605,
UsernameAlreadyExists: 606,
}
// 状态信息初始化
func init() {
ApiCode.Message = map[uint]string{
ApiCode.Success: "成功",
ApiCode.Failed: "失败",
ApiCode.SysMenuIsExist: "菜单名称已存在,请重新输入",
ApiCode.DelSysMenuFailed: "菜单已分配,不能删除",
ApiCode.DelSysChildMenuFailed: "该菜单存在子菜单,不能删除",
ApiCode.RoleAlreadyExists: "角色名或角色Key已存在,请重新输入",
ApiCode.DelSysRoleFailed: "角色已分配,不能删除",
ApiCode.MissParameter: "缺少必填参数",
ApiCode.UsernameAlreadyExists: "用户名称已存在,请重新输入",
}
}
// GetMessage 供给外部调用状态信息
func (c *Codes) GetMessage(code uint) string {
message, ok := c.Message[code]
// 如果不 ok,返回空,ok 则返回 message
if !ok {
return ""
}
return message
}
创建一个工具类 /utils/encryption.go
,来加密密码:
// 简单密码加密工具类
// @author DaiBaiLuoBo
package utils
import (
"crypto/md5"
"encoding/hex"
)
func EncryptionMd5(s string) string {
ctx := md5.New()
ctx.Write([]byte(s))
return hex.EncodeToString(ctx.Sum(nil))
}
再把路由新增进去 /router/router.go
:
router.POST("/api/sysAdmin/add", api.CreateSysAdmin)
最后初始化swag,测试一下,先新增几个角色,方便测试数据:
{
"description": "111111",
"roleKey": "admintest1",
"roleName": "测试管理员1",
"status": 1
}
{
"description": "222222",
"roleKey": "admintest2",
"roleName": "测试管理员2",
"status": 1
}
查看一下数据库有没有数据:
然后测试新增用户:
{
"email": "test@test.com",
"nickname": "测试组组长",
"note": "测试组组长",
"password": "111111",
"phone": "12312341234",
"roleId": 2,
"sex": 1,
"status": 1,
"username": "test"
}
新增一下:
查看一下数据库:
根据ID查询用户
第一步首先来定义结构体 /model/sysAdmin.go
:
// 系统用户相关模型
// @author DaBaiLuoBo
package model
import "goblog-admin/utils"
// SysAdmin 用户模型对象
type SysAdmin struct {
ID uint `gorm:"column:id;comment:'主键';primaryKey;NOT NULL" json:"id"` // ID
Username string `gorm:"column:username;varchar(64);comment:'用户账号';NOT NULL" json:"username"` // 用户账号
Password string `gorm:"column:password;varchar(64);comment:'密码';NOT NULL" json:"password"` // 密码
Nickname string `gorm:"column:nickname;varchar(64);comment:'昵称'" json:"nickname"` // 昵称
Status int `gorm:"column:status;default:1;comment:'账号启用状态:1-启用;2-禁用';NOT NULL" json:"status"` // 账号启用状态:1-启用;2-禁用
Icon string `gorm:"column:icon;varchar(500);comment:'头像'" json:"icon"` // 头像
Sex int `gorm:"column:sex;default:1;comment:'性别:1-男;2-女';NOT NULL" json:"sex"` // 性别:1-男;2-女
Email string `gorm:"column:email;varchar(64);comment:'邮箱'" json:"email"` // 邮箱
Phone string `gorm:"column:phone;varchar(64);comment:'手机号'" json:"phone"` // 手机号
Note string `gorm:"column:note;varchar(500);comment:'备注信息'" json:"note"` // 备注信息
CreateTime utils.HTime `gorm:"column:create_time;comment:'创建时间';NOT NULL" json:"createTime"` // 创建时间
}
func (SysAdmin) TableName() string {
return "sys_admin"
}
// AddSysAdminDto 新增用户参数对象
type AddSysAdminDto struct {
RoleId uint `validate:"required"` // 角色ID(不是用户ID)
Username string `validate:"required"` // 用户名(账号)
Password string `validate:"required"` // 密码
Nickname string `validate:"required"` // 昵称
Sex int // 性别:1-男;2-女
Phone string `validate:"required"` // 手机号
Email string `validate:"required"` // 邮箱
Note string // 备注信息
Status int `validate:"required"` // 账号启用状态:1-启用;2-禁用
}
// SysAdminInfo 根据ID查询用户
type SysAdminInfo struct {
ID uint `json:"id"` // ID
RoleId uint `json:"roleId"` // 角色ID(不是用户ID)
Username string `json:"username"` // 用户名(账号)
Nickname string `json:"nickname"` // 昵称
Sex int `json:"sex"` // 性别:1-男;2-女
Phone string `json:"phone"` // 手机号
Email string `json:"email"` // 邮箱
Note string `json:"note"` // 备注信息
Status int `json:"status"` // 账号启用状态:1-启用;2-禁用
}
下一步去定义api /api/sysAdmin.go
:
// 系统用户相关接口
// @author DaBaiLuoBo
package api
import (
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"goblog-admin/core"
"goblog-admin/model"
"goblog-admin/result"
"goblog-admin/utils"
"strconv"
"time"
)
// CreateSysAdmin 新增用户
// @Summary 新增用户
// @Tags 用户相关接口
// @Produce json
// @Description 新增用户
// @Param data body model.AddSysAdminDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/add [post]
func CreateSysAdmin(c *gin.Context) {
var dto model.AddSysAdminDto
_ = c.BindJSON(&dto)
// 对必填参数进行一个校验
err := validator.New().Struct(dto)
if err != nil {
result.Failed(c, int(result.ApiCode.MissParameter), result.ApiCode.GetMessage(result.ApiCode.MissParameter))
return
}
// 查询用户名是否重复
sysAdminByUsername := GetSysAdminByUsername(dto.Username)
if sysAdminByUsername.ID > 0 {
result.Failed(c, int(result.ApiCode.UsernameAlreadyExists), result.ApiCode.GetMessage(result.ApiCode.UsernameAlreadyExists))
return
}
// 新增用户
sysAdmin := model.SysAdmin{
Username: dto.Username,
Nickname: dto.Nickname,
Password: utils.EncryptionMd5(dto.Password), // 使用加密工具类加密密码
Phone: dto.Phone,
Email: dto.Email,
Sex: dto.Sex,
Note: dto.Note,
Status: dto.Status,
CreateTime: utils.HTime{Time: time.Now()},
}
core.Db.Create(&sysAdmin)
// 新增用户与角色关系表信息
sysAdminExists := GetSysAdminByUsername(dto.Username)
var sysAdminRole model.SysAdminRole
sysAdminRole.AdminId = sysAdminExists.ID // 用户ID
sysAdminRole.RoleId = dto.RoleId // 角色ID
core.Db.Create(&sysAdminRole)
result.Success(c, true)
}
// GetSysAdmin 根据ID查询用户
// @Summary 根据ID查询用户
// @Tags 用户相关接口
// @Produce json
// @Description 根据ID查询用户
// @Param id query int true "用户ID"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/info [get]
func GetSysAdmin(c *gin.Context) {
Id, _ := strconv.Atoi(c.Query("id"))
// 定义返回的结构体
var sysAdminInfo model.SysAdminInfo
core.Db.Table("sys_admin").
Select("sys_admin.*", "sys_admin_role.role_id").
Joins("LEFT JOIN sys_admin_role ON sys_admin.id = sys_admin_role.admin_id").
Joins("LEFT JOIN sys_role ON sys_admin_role.role_id = sys_role.id").
First(&sysAdminInfo, Id)
result.Success(c, sysAdminInfo)
}
// GetSysAdminByUsername 根据用户名称查询用户
func GetSysAdminByUsername(username string) (sysAdmin model.SysAdmin) {
core.Db.Where("username = ?", username).First(&sysAdmin)
return sysAdmin
}
下一步加入路由 /router/router.go
:
router.GET("/api/sysAdmin/info", api.GetSysAdmin)
最后初始化swag,测试一下:
修改用户信息
第一步依然还是定义结构体 /model/sysAdmin.go
:
// 系统用户相关模型
// @author DaBaiLuoBo
package model
import "goblog-admin/utils"
// SysAdmin 用户模型对象
type SysAdmin struct {
ID uint `gorm:"column:id;comment:'主键';primaryKey;NOT NULL" json:"id"` // ID
Username string `gorm:"column:username;varchar(64);comment:'用户账号';NOT NULL" json:"username"` // 用户账号
Password string `gorm:"column:password;varchar(64);comment:'密码';NOT NULL" json:"password"` // 密码
Nickname string `gorm:"column:nickname;varchar(64);comment:'昵称'" json:"nickname"` // 昵称
Status int `gorm:"column:status;default:1;comment:'账号启用状态:1-启用;2-禁用';NOT NULL" json:"status"` // 账号启用状态:1-启用;2-禁用
Icon string `gorm:"column:icon;varchar(500);comment:'头像'" json:"icon"` // 头像
Sex int `gorm:"column:sex;default:1;comment:'性别:1-男;2-女';NOT NULL" json:"sex"` // 性别:1-男;2-女
Email string `gorm:"column:email;varchar(64);comment:'邮箱'" json:"email"` // 邮箱
Phone string `gorm:"column:phone;varchar(64);comment:'手机号'" json:"phone"` // 手机号
Note string `gorm:"column:note;varchar(500);comment:'备注信息'" json:"note"` // 备注信息
CreateTime utils.HTime `gorm:"column:create_time;comment:'创建时间';NOT NULL" json:"createTime"` // 创建时间
}
func (SysAdmin) TableName() string {
return "sys_admin"
}
// AddSysAdminDto 新增用户参数对象
type AddSysAdminDto struct {
RoleId uint `validate:"required"` // 角色ID(不是用户ID)
Username string `validate:"required"` // 用户名(账号)
Password string `validate:"required"` // 密码
Nickname string `validate:"required"` // 昵称
Sex int // 性别:1-男;2-女
Phone string `validate:"required"` // 手机号
Email string `validate:"required"` // 邮箱
Note string // 备注信息
Status int `validate:"required"` // 账号启用状态:1-启用;2-禁用
}
// SysAdminInfo 根据ID查询用户
type SysAdminInfo struct {
ID uint `json:"id"` // ID
RoleId uint `json:"roleId"` // 角色ID(不是用户ID)
Username string `json:"username"` // 用户名(账号)
Nickname string `json:"nickname"` // 昵称
Sex int `json:"sex"` // 性别:1-男;2-女
Phone string `json:"phone"` // 手机号
Email string `json:"email"` // 邮箱
Note string `json:"note"` // 备注信息
Status int `json:"status"` // 账号启用状态:1-启用;2-禁用
}
// UpdateSysAdminDto 修改用户信息
type UpdateSysAdminDto struct {
ID uint // ID
RoleId uint `validate:"required"` // 角色ID(不是用户ID)
Username string `validate:"required"` // 用户名(账号)
Password string `validate:"required"` // 密码
Nickname string `validate:"required"` // 昵称
Sex int // 性别:1-男;2-女
Phone string `validate:"required"` // 手机号
Email string `validate:"required"` // 邮箱
Note string // 备注信息
Status int `validate:"required"` // 账号启用状态:1-启用;2-禁用
}
下一步定义接口 /api/sysAdmin.go
:
// 系统用户相关接口
// @author DaBaiLuoBo
package api
import (
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"goblog-admin/core"
"goblog-admin/model"
"goblog-admin/result"
"goblog-admin/utils"
"strconv"
"time"
)
// CreateSysAdmin 新增用户
// @Summary 新增用户
// @Tags 用户相关接口
// @Produce json
// @Description 新增用户
// @Param data body model.AddSysAdminDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/add [post]
func CreateSysAdmin(c *gin.Context) {
var dto model.AddSysAdminDto
_ = c.BindJSON(&dto)
// 对必填参数进行一个校验
err := validator.New().Struct(dto)
if err != nil {
result.Failed(c, int(result.ApiCode.MissParameter), result.ApiCode.GetMessage(result.ApiCode.MissParameter))
return
}
// 查询用户名是否重复
sysAdminByUsername := GetSysAdminByUsername(dto.Username)
if sysAdminByUsername.ID > 0 {
result.Failed(c, int(result.ApiCode.UsernameAlreadyExists), result.ApiCode.GetMessage(result.ApiCode.UsernameAlreadyExists))
return
}
// 新增用户
sysAdmin := model.SysAdmin{
Username: dto.Username,
Nickname: dto.Nickname,
Password: utils.EncryptionMd5(dto.Password), // 使用加密工具类加密密码
Phone: dto.Phone,
Email: dto.Email,
Sex: dto.Sex,
Note: dto.Note,
Status: dto.Status,
CreateTime: utils.HTime{Time: time.Now()},
}
core.Db.Create(&sysAdmin)
// 新增用户与角色关系表信息
sysAdminExists := GetSysAdminByUsername(dto.Username)
var sysAdminRole model.SysAdminRole
sysAdminRole.AdminId = sysAdminExists.ID // 用户ID
sysAdminRole.RoleId = dto.RoleId // 角色ID
core.Db.Create(&sysAdminRole)
result.Success(c, true)
}
// GetSysAdmin 根据ID查询用户
// @Summary 根据ID查询用户
// @Tags 用户相关接口
// @Produce json
// @Description 根据ID查询用户
// @Param id query int true "用户ID"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/info [get]
func GetSysAdmin(c *gin.Context) {
Id, _ := strconv.Atoi(c.Query("id"))
// 定义返回的结构体
var sysAdminInfo model.SysAdminInfo
core.Db.Table("sys_admin").
Select("sys_admin.*", "sys_admin_role.role_id").
Joins("LEFT JOIN sys_admin_role ON sys_admin.id = sys_admin_role.admin_id").
Joins("LEFT JOIN sys_role ON sys_admin_role.role_id = sys_role.id").
First(&sysAdminInfo, Id)
result.Success(c, sysAdminInfo)
}
// UpdateSysAdmin 修改用户信息
// @Summary 修改用户信息
// @Tags 用户相关接口
// @Produce json
// @Description 修改用户信息
// @Param data body model.UpdateSysAdminDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/update [put]
func UpdateSysAdmin(c *gin.Context) {
var dto model.UpdateSysAdminDto
_ = c.BindJSON(&dto)
// 对必填参数进行一个校验
err := validator.New().Struct(dto)
if err != nil {
result.Failed(c, int(result.ApiCode.MissParameter), result.ApiCode.GetMessage(result.ApiCode.MissParameter))
return
}
// 先查询用户信息
var sysAdmin model.SysAdmin
core.Db.First(&sysAdmin, dto.ID)
// 再修改用户信息
if dto.Username != "" {
sysAdmin.Username = dto.Username
}
if dto.Nickname != "" {
sysAdmin.Nickname = dto.Nickname
}
if dto.Phone != "" {
sysAdmin.Phone = dto.Phone
}
if dto.Email != "" {
sysAdmin.Email = dto.Email
}
if dto.Note != "" {
sysAdmin.Note = dto.Note
}
sysAdmin.Status = dto.Status
sysAdmin.Sex = dto.Sex
core.Db.Save(&sysAdmin)
// 删除之前绑定的角色再分配新的角色(角色与用户关系表)
var sysAdminRole model.SysAdminRole
core.Db.Where("admin_id = ?", dto.ID).Delete(&model.SysAdminRole{})
sysAdminRole.AdminId = dto.ID
sysAdminRole.RoleId = dto.RoleId
core.Db.Create(&sysAdminRole)
result.Success(c, true)
}
// GetSysAdminByUsername 根据用户名称查询用户
func GetSysAdminByUsername(username string) (sysAdmin model.SysAdmin) {
core.Db.Where("username = ?", username).First(&sysAdmin)
return sysAdmin
}
下一步增加路由 /router/router.go
:
router.PUT("/api/sysAdmin/update", api.UpdateSysAdmin)
初始化swag,测试一下:
报错缺少必填参数了,这是因为定义结构体多定义了一个密码,删除掉:
重新测试:
好的,已经没问题了
删除用户和设置启用状态
还是一样,第一步定义结构体 /model/sysAdmin.go
:
// 系统用户相关模型
// @author DaBaiLuoBo
package model
import "goblog-admin/utils"
// SysAdmin 用户模型对象
type SysAdmin struct {
ID uint `gorm:"column:id;comment:'主键';primaryKey;NOT NULL" json:"id"` // ID
Username string `gorm:"column:username;varchar(64);comment:'用户账号';NOT NULL" json:"username"` // 用户账号
Password string `gorm:"column:password;varchar(64);comment:'密码';NOT NULL" json:"password"` // 密码
Nickname string `gorm:"column:nickname;varchar(64);comment:'昵称'" json:"nickname"` // 昵称
Status int `gorm:"column:status;default:1;comment:'账号启用状态:1-启用;2-禁用';NOT NULL" json:"status"` // 账号启用状态:1-启用;2-禁用
Icon string `gorm:"column:icon;varchar(500);comment:'头像'" json:"icon"` // 头像
Sex int `gorm:"column:sex;default:1;comment:'性别:1-男;2-女';NOT NULL" json:"sex"` // 性别:1-男;2-女
Email string `gorm:"column:email;varchar(64);comment:'邮箱'" json:"email"` // 邮箱
Phone string `gorm:"column:phone;varchar(64);comment:'手机号'" json:"phone"` // 手机号
Note string `gorm:"column:note;varchar(500);comment:'备注信息'" json:"note"` // 备注信息
CreateTime utils.HTime `gorm:"column:create_time;comment:'创建时间';NOT NULL" json:"createTime"` // 创建时间
}
func (SysAdmin) TableName() string {
return "sys_admin"
}
// AddSysAdminDto 新增用户参数对象
type AddSysAdminDto struct {
RoleId uint `validate:"required"` // 角色ID(不是用户ID)
Username string `validate:"required"` // 用户名(账号)
Password string `validate:"required"` // 密码
Nickname string `validate:"required"` // 昵称
Sex int // 性别:1-男;2-女
Phone string `validate:"required"` // 手机号
Email string `validate:"required"` // 邮箱
Note string // 备注信息
Status int `validate:"required"` // 账号启用状态:1-启用;2-禁用
}
// SysAdminInfo 根据ID查询用户
type SysAdminInfo struct {
ID uint `json:"id"` // ID
RoleId uint `json:"roleId"` // 角色ID(不是用户ID)
Username string `json:"username"` // 用户名(账号)
Nickname string `json:"nickname"` // 昵称
Sex int `json:"sex"` // 性别:1-男;2-女
Phone string `json:"phone"` // 手机号
Email string `json:"email"` // 邮箱
Note string `json:"note"` // 备注信息
Status int `json:"status"` // 账号启用状态:1-启用;2-禁用
}
// UpdateSysAdminDto 修改用户信息
type UpdateSysAdminDto struct {
ID uint // ID
RoleId uint `validate:"required"` // 角色ID(不是用户ID)
Username string `validate:"required"` // 用户名(账号)
Nickname string `validate:"required"` // 昵称
Sex int // 性别:1-男;2-女
Phone string `validate:"required"` // 手机号
Email string `validate:"required"` // 邮箱
Note string // 备注信息
Status int `validate:"required"` // 账号启用状态:1-启用;2-禁用
}
// SysAdminIdDto 用户ID参数
type SysAdminIdDto struct {
ID uint `json:"id"` // ID
}
// UpdateSysAdminStatusDto 设置启用状态参数
type UpdateSysAdminStatusDto struct {
ID uint // ID
Status int // 账号启用状态:1-启用;2-禁用
}
下一步定义API /api/sysAdmin.go
:
// 系统用户相关接口
// @author DaBaiLuoBo
package api
import (
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"goblog-admin/core"
"goblog-admin/model"
"goblog-admin/result"
"goblog-admin/utils"
"strconv"
"time"
)
// CreateSysAdmin 新增用户
// @Summary 新增用户
// @Tags 用户相关接口
// @Produce json
// @Description 新增用户
// @Param data body model.AddSysAdminDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/add [post]
func CreateSysAdmin(c *gin.Context) {
var dto model.AddSysAdminDto
_ = c.BindJSON(&dto)
// 对必填参数进行一个校验
err := validator.New().Struct(dto)
if err != nil {
result.Failed(c, int(result.ApiCode.MissParameter), result.ApiCode.GetMessage(result.ApiCode.MissParameter))
return
}
// 查询用户名是否重复
sysAdminByUsername := GetSysAdminByUsername(dto.Username)
if sysAdminByUsername.ID > 0 {
result.Failed(c, int(result.ApiCode.UsernameAlreadyExists), result.ApiCode.GetMessage(result.ApiCode.UsernameAlreadyExists))
return
}
// 新增用户
sysAdmin := model.SysAdmin{
Username: dto.Username,
Nickname: dto.Nickname,
Password: utils.EncryptionMd5(dto.Password), // 使用加密工具类加密密码
Phone: dto.Phone,
Email: dto.Email,
Sex: dto.Sex,
Note: dto.Note,
Status: dto.Status,
CreateTime: utils.HTime{Time: time.Now()},
}
core.Db.Create(&sysAdmin)
// 新增用户与角色关系表信息
sysAdminExists := GetSysAdminByUsername(dto.Username)
var sysAdminRole model.SysAdminRole
sysAdminRole.AdminId = sysAdminExists.ID // 用户ID
sysAdminRole.RoleId = dto.RoleId // 角色ID
core.Db.Create(&sysAdminRole)
result.Success(c, true)
}
// GetSysAdmin 根据ID查询用户
// @Summary 根据ID查询用户
// @Tags 用户相关接口
// @Produce json
// @Description 根据ID查询用户
// @Param id query int true "用户ID"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/info [get]
func GetSysAdmin(c *gin.Context) {
Id, _ := strconv.Atoi(c.Query("id"))
// 定义返回的结构体
var sysAdminInfo model.SysAdminInfo
core.Db.Table("sys_admin").
Select("sys_admin.*", "sys_admin_role.role_id").
Joins("LEFT JOIN sys_admin_role ON sys_admin.id = sys_admin_role.admin_id").
Joins("LEFT JOIN sys_role ON sys_admin_role.role_id = sys_role.id").
First(&sysAdminInfo, Id)
result.Success(c, sysAdminInfo)
}
// UpdateSysAdmin 修改用户信息
// @Summary 修改用户信息
// @Tags 用户相关接口
// @Produce json
// @Description 修改用户信息
// @Param data body model.UpdateSysAdminDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/update [put]
func UpdateSysAdmin(c *gin.Context) {
var dto model.UpdateSysAdminDto
_ = c.BindJSON(&dto)
// 对必填参数进行一个校验
err := validator.New().Struct(dto)
if err != nil {
result.Failed(c, int(result.ApiCode.MissParameter), result.ApiCode.GetMessage(result.ApiCode.MissParameter))
return
}
// 先查询用户信息
var sysAdmin model.SysAdmin
core.Db.First(&sysAdmin, dto.ID)
// 再修改用户信息
if dto.Username != "" {
sysAdmin.Username = dto.Username
}
if dto.Nickname != "" {
sysAdmin.Nickname = dto.Nickname
}
if dto.Phone != "" {
sysAdmin.Phone = dto.Phone
}
if dto.Email != "" {
sysAdmin.Email = dto.Email
}
if dto.Note != "" {
sysAdmin.Note = dto.Note
}
sysAdmin.Status = dto.Status
sysAdmin.Sex = dto.Sex
core.Db.Save(&sysAdmin)
// 删除之前绑定的角色再分配新的角色(角色与用户关系表)
var sysAdminRole model.SysAdminRole
core.Db.Where("admin_id = ?", dto.ID).Delete(&model.SysAdminRole{})
sysAdminRole.AdminId = dto.ID
sysAdminRole.RoleId = dto.RoleId
core.Db.Create(&sysAdminRole)
result.Success(c, true)
}
// DeleteSysAdmin 根据ID删除用户
// @Summary 根据ID删除用户
// @Tags 用户相关接口
// @Produce json
// @Description 根据ID删除用户
// @Param data body model.SysAdminIdDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/delete [delete]
func DeleteSysAdmin(c *gin.Context) {
var dto model.SysAdminIdDto
_ = c.BindJSON(&dto)
core.Db.Delete(&model.SysAdmin{}, dto.ID)
// 再查询关系表,并删除
core.Db.Where("admin_id = ?", dto.ID).Delete(&model.SysAdminRole{})
result.Success(c, true)
}
// UpdateSysAdminStatus 设置用户启用状态
// @Summary 设置用户启用状态
// @Tags 用户相关接口
// @Produce json
// @Description 设置用户启用状态
// @Param data body model.UpdateSysAdminStatusDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/updateStatus [put]
func UpdateSysAdminStatus(c *gin.Context) {
var dto model.UpdateSysAdminStatusDto
_ = c.BindJSON(&dto)
var sysAdmin model.SysAdmin
core.Db.First(&sysAdmin, dto.ID)
sysAdmin.Status = dto.Status
core.Db.Save(&sysAdmin)
result.Success(c, true)
}
// GetSysAdminByUsername 根据用户名称查询用户
func GetSysAdminByUsername(username string) (sysAdmin model.SysAdmin) {
core.Db.Where("username = ?", username).First(&sysAdmin)
return sysAdmin
}
最后增加路由 /router/router.go
:
router.DELETE("/api/sysAdmin/delete", api.DeleteSysAdmin)
router.PUT("/api/sysAdmin/updateStatus", api.UpdateSysAdminStatus)
老样子,初始化swag,测试一下,先新增一个用户,方便测试删除用户:
{
"email": "test1@test.com",
"nickname": "测试用户1",
"note": "测试用户1",
"password": "1234567890",
"phone": "12312345678",
"roleId": 3,
"sex": 2,
"status": 1,
"username": "test1"
}
然后测试接口:
再测试删除:
ok,没问题
修改用户密码
第一步还是先定义结构体 /model/sysAdmin.go
:
// 系统用户相关模型
// @author DaBaiLuoBo
package model
import "goblog-admin/utils"
// SysAdmin 用户模型对象
type SysAdmin struct {
ID uint `gorm:"column:id;comment:'主键';primaryKey;NOT NULL" json:"id"` // ID
Username string `gorm:"column:username;varchar(64);comment:'用户账号';NOT NULL" json:"username"` // 用户账号
Password string `gorm:"column:password;varchar(64);comment:'密码';NOT NULL" json:"password"` // 密码
Nickname string `gorm:"column:nickname;varchar(64);comment:'昵称'" json:"nickname"` // 昵称
Status int `gorm:"column:status;default:1;comment:'账号启用状态:1-启用;2-禁用';NOT NULL" json:"status"` // 账号启用状态:1-启用;2-禁用
Icon string `gorm:"column:icon;varchar(500);comment:'头像'" json:"icon"` // 头像
Sex int `gorm:"column:sex;default:1;comment:'性别:1-男;2-女';NOT NULL" json:"sex"` // 性别:1-男;2-女
Email string `gorm:"column:email;varchar(64);comment:'邮箱'" json:"email"` // 邮箱
Phone string `gorm:"column:phone;varchar(64);comment:'手机号'" json:"phone"` // 手机号
Note string `gorm:"column:note;varchar(500);comment:'备注信息'" json:"note"` // 备注信息
CreateTime utils.HTime `gorm:"column:create_time;comment:'创建时间';NOT NULL" json:"createTime"` // 创建时间
}
func (SysAdmin) TableName() string {
return "sys_admin"
}
// AddSysAdminDto 新增用户参数对象
type AddSysAdminDto struct {
RoleId uint `validate:"required"` // 角色ID(不是用户ID)
Username string `validate:"required"` // 用户名(账号)
Password string `validate:"required"` // 密码
Nickname string `validate:"required"` // 昵称
Sex int // 性别:1-男;2-女
Phone string `validate:"required"` // 手机号
Email string `validate:"required"` // 邮箱
Note string // 备注信息
Status int `validate:"required"` // 账号启用状态:1-启用;2-禁用
}
// SysAdminInfo 根据ID查询用户
type SysAdminInfo struct {
ID uint `json:"id"` // ID
RoleId uint `json:"roleId"` // 角色ID(不是用户ID)
Username string `json:"username"` // 用户名(账号)
Nickname string `json:"nickname"` // 昵称
Sex int `json:"sex"` // 性别:1-男;2-女
Phone string `json:"phone"` // 手机号
Email string `json:"email"` // 邮箱
Note string `json:"note"` // 备注信息
Status int `json:"status"` // 账号启用状态:1-启用;2-禁用
}
// UpdateSysAdminDto 修改用户信息
type UpdateSysAdminDto struct {
ID uint // ID
RoleId uint `validate:"required"` // 角色ID(不是用户ID)
Username string `validate:"required"` // 用户名(账号)
Nickname string `validate:"required"` // 昵称
Sex int // 性别:1-男;2-女
Phone string `validate:"required"` // 手机号
Email string `validate:"required"` // 邮箱
Note string // 备注信息
Status int `validate:"required"` // 账号启用状态:1-启用;2-禁用
}
// SysAdminIdDto 用户ID参数
type SysAdminIdDto struct {
ID uint `json:"id"` // ID
}
// UpdateSysAdminStatusDto 设置启用状态参数
type UpdateSysAdminStatusDto struct {
ID uint // ID
Status int // 账号启用状态:1-启用;2-禁用
}
// ResetSysAdminPasswordDto 重置密码参数对象
type ResetSysAdminPasswordDto struct {
ID uint // ID
Password string // 密码
}
下一步写接口逻辑 /api/sysAdmin.go
:
// 系统用户相关接口
// @author DaBaiLuoBo
package api
import (
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"goblog-admin/core"
"goblog-admin/model"
"goblog-admin/result"
"goblog-admin/utils"
"strconv"
"time"
)
// CreateSysAdmin 新增用户
// @Summary 新增用户
// @Tags 用户相关接口
// @Produce json
// @Description 新增用户
// @Param data body model.AddSysAdminDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/add [post]
func CreateSysAdmin(c *gin.Context) {
var dto model.AddSysAdminDto
_ = c.BindJSON(&dto)
// 对必填参数进行一个校验
err := validator.New().Struct(dto)
if err != nil {
result.Failed(c, int(result.ApiCode.MissParameter), result.ApiCode.GetMessage(result.ApiCode.MissParameter))
return
}
// 查询用户名是否重复
sysAdminByUsername := GetSysAdminByUsername(dto.Username)
if sysAdminByUsername.ID > 0 {
result.Failed(c, int(result.ApiCode.UsernameAlreadyExists), result.ApiCode.GetMessage(result.ApiCode.UsernameAlreadyExists))
return
}
// 新增用户
sysAdmin := model.SysAdmin{
Username: dto.Username,
Nickname: dto.Nickname,
Password: utils.EncryptionMd5(dto.Password), // 使用加密工具类加密密码
Phone: dto.Phone,
Email: dto.Email,
Sex: dto.Sex,
Note: dto.Note,
Status: dto.Status,
CreateTime: utils.HTime{Time: time.Now()},
}
core.Db.Create(&sysAdmin)
// 新增用户与角色关系表信息
sysAdminExists := GetSysAdminByUsername(dto.Username)
var sysAdminRole model.SysAdminRole
sysAdminRole.AdminId = sysAdminExists.ID // 用户ID
sysAdminRole.RoleId = dto.RoleId // 角色ID
core.Db.Create(&sysAdminRole)
result.Success(c, true)
}
// GetSysAdmin 根据ID查询用户
// @Summary 根据ID查询用户
// @Tags 用户相关接口
// @Produce json
// @Description 根据ID查询用户
// @Param id query int true "用户ID"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/info [get]
func GetSysAdmin(c *gin.Context) {
Id, _ := strconv.Atoi(c.Query("id"))
// 定义返回的结构体
var sysAdminInfo model.SysAdminInfo
core.Db.Table("sys_admin").
Select("sys_admin.*", "sys_admin_role.role_id").
Joins("LEFT JOIN sys_admin_role ON sys_admin.id = sys_admin_role.admin_id").
Joins("LEFT JOIN sys_role ON sys_admin_role.role_id = sys_role.id").
First(&sysAdminInfo, Id)
result.Success(c, sysAdminInfo)
}
// UpdateSysAdmin 修改用户信息
// @Summary 修改用户信息
// @Tags 用户相关接口
// @Produce json
// @Description 修改用户信息
// @Param data body model.UpdateSysAdminDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/update [put]
func UpdateSysAdmin(c *gin.Context) {
var dto model.UpdateSysAdminDto
_ = c.BindJSON(&dto)
// 对必填参数进行一个校验
err := validator.New().Struct(dto)
if err != nil {
result.Failed(c, int(result.ApiCode.MissParameter), result.ApiCode.GetMessage(result.ApiCode.MissParameter))
return
}
// 先查询用户信息
var sysAdmin model.SysAdmin
core.Db.First(&sysAdmin, dto.ID)
// 再修改用户信息
if dto.Username != "" {
sysAdmin.Username = dto.Username
}
if dto.Nickname != "" {
sysAdmin.Nickname = dto.Nickname
}
if dto.Phone != "" {
sysAdmin.Phone = dto.Phone
}
if dto.Email != "" {
sysAdmin.Email = dto.Email
}
if dto.Note != "" {
sysAdmin.Note = dto.Note
}
sysAdmin.Status = dto.Status
sysAdmin.Sex = dto.Sex
core.Db.Save(&sysAdmin)
// 删除之前绑定的角色再分配新的角色(角色与用户关系表)
var sysAdminRole model.SysAdminRole
core.Db.Where("admin_id = ?", dto.ID).Delete(&model.SysAdminRole{})
sysAdminRole.AdminId = dto.ID
sysAdminRole.RoleId = dto.RoleId
core.Db.Create(&sysAdminRole)
result.Success(c, true)
}
// DeleteSysAdmin 根据ID删除用户
// @Summary 根据ID删除用户
// @Tags 用户相关接口
// @Produce json
// @Description 根据ID删除用户
// @Param data body model.SysAdminIdDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/delete [delete]
func DeleteSysAdmin(c *gin.Context) {
var dto model.SysAdminIdDto
_ = c.BindJSON(&dto)
core.Db.Delete(&model.SysAdmin{}, dto.ID)
// 再查询关系表,并删除
core.Db.Where("admin_id = ?", dto.ID).Delete(&model.SysAdminRole{})
result.Success(c, true)
}
// UpdateSysAdminStatus 设置用户启用状态
// @Summary 设置用户启用状态
// @Tags 用户相关接口
// @Produce json
// @Description 设置用户启用状态
// @Param data body model.UpdateSysAdminStatusDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/updateStatus [put]
func UpdateSysAdminStatus(c *gin.Context) {
var dto model.UpdateSysAdminStatusDto
_ = c.BindJSON(&dto)
var sysAdmin model.SysAdmin
core.Db.First(&sysAdmin, dto.ID)
sysAdmin.Status = dto.Status
core.Db.Save(&sysAdmin)
result.Success(c, true)
}
// ResetSysAdminPassword 重置用户密码
// @Summary 重置用户密码
// @Tags 用户相关接口
// @Produce json
// @Description 重置用户密码
// @Param data body model.ResetSysAdminPasswordDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/resetPassword [put]
func ResetSysAdminPassword(c *gin.Context) {
var dto model.ResetSysAdminPasswordDto
_ = c.BindJSON(&dto)
var sysAdmin model.SysAdmin
core.Db.First(&sysAdmin, dto.ID)
sysAdmin.Password = utils.EncryptionMd5(dto.Password)
core.Db.Save(&sysAdmin)
result.Success(c, true)
}
// GetSysAdminByUsername 根据用户名称查询用户
func GetSysAdminByUsername(username string) (sysAdmin model.SysAdmin) {
core.Db.Where("username = ?", username).First(&sysAdmin)
return sysAdmin
}
下一步加入路由 /router/router.go
:
router.PUT("/api/sysAdmin/resetPassword", api.ResetSysAdminPassword)
最后初始化swag,测试一下,修改前的数据:
修改后:
用户列表
类似于上一篇中的角色查询列表,先定义一个返回的结构体 /model/sysAdmin.go
:
// 系统用户相关模型
// @author DaBaiLuoBo
package model
import "goblog-admin/utils"
// SysAdmin 用户模型对象
type SysAdmin struct {
ID uint `gorm:"column:id;comment:'主键';primaryKey;NOT NULL" json:"id"` // ID
Username string `gorm:"column:username;varchar(64);comment:'用户账号';NOT NULL" json:"username"` // 用户账号
Password string `gorm:"column:password;varchar(64);comment:'密码';NOT NULL" json:"password"` // 密码
Nickname string `gorm:"column:nickname;varchar(64);comment:'昵称'" json:"nickname"` // 昵称
Status int `gorm:"column:status;default:1;comment:'账号启用状态:1-启用;2-禁用';NOT NULL" json:"status"` // 账号启用状态:1-启用;2-禁用
Icon string `gorm:"column:icon;varchar(500);comment:'头像'" json:"icon"` // 头像
Sex int `gorm:"column:sex;default:1;comment:'性别:1-男;2-女';NOT NULL" json:"sex"` // 性别:1-男;2-女
Email string `gorm:"column:email;varchar(64);comment:'邮箱'" json:"email"` // 邮箱
Phone string `gorm:"column:phone;varchar(64);comment:'手机号'" json:"phone"` // 手机号
Note string `gorm:"column:note;varchar(500);comment:'备注信息'" json:"note"` // 备注信息
CreateTime utils.HTime `gorm:"column:create_time;comment:'创建时间';NOT NULL" json:"createTime"` // 创建时间
}
func (SysAdmin) TableName() string {
return "sys_admin"
}
// AddSysAdminDto 新增用户参数对象
type AddSysAdminDto struct {
RoleId uint `validate:"required"` // 角色ID(不是用户ID)
Username string `validate:"required"` // 用户名(账号)
Password string `validate:"required"` // 密码
Nickname string `validate:"required"` // 昵称
Sex int // 性别:1-男;2-女
Phone string `validate:"required"` // 手机号
Email string `validate:"required"` // 邮箱
Note string // 备注信息
Status int `validate:"required"` // 账号启用状态:1-启用;2-禁用
}
// SysAdminInfo 根据ID查询用户
type SysAdminInfo struct {
ID uint `json:"id"` // ID
RoleId uint `json:"roleId"` // 角色ID(不是用户ID)
Username string `json:"username"` // 用户名(账号)
Nickname string `json:"nickname"` // 昵称
Sex int `json:"sex"` // 性别:1-男;2-女
Phone string `json:"phone"` // 手机号
Email string `json:"email"` // 邮箱
Note string `json:"note"` // 备注信息
Status int `json:"status"` // 账号启用状态:1-启用;2-禁用
}
// UpdateSysAdminDto 修改用户信息
type UpdateSysAdminDto struct {
ID uint // ID
RoleId uint `validate:"required"` // 角色ID(不是用户ID)
Username string `validate:"required"` // 用户名(账号)
Nickname string `validate:"required"` // 昵称
Sex int // 性别:1-男;2-女
Phone string `validate:"required"` // 手机号
Email string `validate:"required"` // 邮箱
Note string // 备注信息
Status int `validate:"required"` // 账号启用状态:1-启用;2-禁用
}
// SysAdminIdDto 用户ID参数
type SysAdminIdDto struct {
ID uint `json:"id"` // ID
}
// UpdateSysAdminStatusDto 设置启用状态参数
type UpdateSysAdminStatusDto struct {
ID uint // ID
Status int // 账号启用状态:1-启用;2-禁用
}
// ResetSysAdminPasswordDto 重置密码参数对象
type ResetSysAdminPasswordDto struct {
ID uint // ID
Password string // 密码
}
// SysAdminVo 用户参数对象
type SysAdminVo struct {
ID uint `json:"id"` // ID
Username string `json:"username"` // 用户名(账号)
Nickname string `json:"nickname"` // 昵称
Status int `json:"status"` // 账号启用状态:1-启用;2-禁用
Icon string `json:"icon"` // 头像
Sex int `json:"sex"` // 性别:1-男;2-女
Email string `json:"email"` // 邮箱
Phone string `json:"phone"` // 手机号
Note string `json:"note"` // 备注信息
RoleName string `json:"roleName"` // 备注名称
CreateTime utils.HTime `json:"createTime"` // 创建时间
}
接下来写接口逻辑 /api/sysAdmin.go
:
// 系统用户相关接口
// @author DaBaiLuoBo
package api
import (
"github.com/gin-gonic/gin"
"github.com/go-playground/validator/v10"
"goblog-admin/core"
"goblog-admin/model"
"goblog-admin/result"
"goblog-admin/utils"
"strconv"
"time"
)
// CreateSysAdmin 新增用户
// @Summary 新增用户
// @Tags 用户相关接口
// @Produce json
// @Description 新增用户
// @Param data body model.AddSysAdminDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/add [post]
func CreateSysAdmin(c *gin.Context) {
var dto model.AddSysAdminDto
_ = c.BindJSON(&dto)
// 对必填参数进行一个校验
err := validator.New().Struct(dto)
if err != nil {
result.Failed(c, int(result.ApiCode.MissParameter), result.ApiCode.GetMessage(result.ApiCode.MissParameter))
return
}
// 查询用户名是否重复
sysAdminByUsername := GetSysAdminByUsername(dto.Username)
if sysAdminByUsername.ID > 0 {
result.Failed(c, int(result.ApiCode.UsernameAlreadyExists), result.ApiCode.GetMessage(result.ApiCode.UsernameAlreadyExists))
return
}
// 新增用户
sysAdmin := model.SysAdmin{
Username: dto.Username,
Nickname: dto.Nickname,
Password: utils.EncryptionMd5(dto.Password), // 使用加密工具类加密密码
Phone: dto.Phone,
Email: dto.Email,
Sex: dto.Sex,
Note: dto.Note,
Status: dto.Status,
CreateTime: utils.HTime{Time: time.Now()},
}
core.Db.Create(&sysAdmin)
// 新增用户与角色关系表信息
sysAdminExists := GetSysAdminByUsername(dto.Username)
var sysAdminRole model.SysAdminRole
sysAdminRole.AdminId = sysAdminExists.ID // 用户ID
sysAdminRole.RoleId = dto.RoleId // 角色ID
core.Db.Create(&sysAdminRole)
result.Success(c, true)
}
// GetSysAdmin 根据ID查询用户
// @Summary 根据ID查询用户
// @Tags 用户相关接口
// @Produce json
// @Description 根据ID查询用户
// @Param id query int true "用户ID"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/info [get]
func GetSysAdmin(c *gin.Context) {
Id, _ := strconv.Atoi(c.Query("id"))
// 定义返回的结构体
var sysAdminInfo model.SysAdminInfo
core.Db.Table("sys_admin").
Select("sys_admin.*", "sys_admin_role.role_id").
Joins("LEFT JOIN sys_admin_role ON sys_admin.id = sys_admin_role.admin_id").
Joins("LEFT JOIN sys_role ON sys_admin_role.role_id = sys_role.id").
First(&sysAdminInfo, Id)
result.Success(c, sysAdminInfo)
}
// UpdateSysAdmin 修改用户信息
// @Summary 修改用户信息
// @Tags 用户相关接口
// @Produce json
// @Description 修改用户信息
// @Param data body model.UpdateSysAdminDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/update [put]
func UpdateSysAdmin(c *gin.Context) {
var dto model.UpdateSysAdminDto
_ = c.BindJSON(&dto)
// 对必填参数进行一个校验
err := validator.New().Struct(dto)
if err != nil {
result.Failed(c, int(result.ApiCode.MissParameter), result.ApiCode.GetMessage(result.ApiCode.MissParameter))
return
}
// 先查询用户信息
var sysAdmin model.SysAdmin
core.Db.First(&sysAdmin, dto.ID)
// 再修改用户信息
if dto.Username != "" {
sysAdmin.Username = dto.Username
}
if dto.Nickname != "" {
sysAdmin.Nickname = dto.Nickname
}
if dto.Phone != "" {
sysAdmin.Phone = dto.Phone
}
if dto.Email != "" {
sysAdmin.Email = dto.Email
}
if dto.Note != "" {
sysAdmin.Note = dto.Note
}
sysAdmin.Status = dto.Status
sysAdmin.Sex = dto.Sex
core.Db.Save(&sysAdmin)
// 删除之前绑定的角色再分配新的角色(角色与用户关系表)
var sysAdminRole model.SysAdminRole
core.Db.Where("admin_id = ?", dto.ID).Delete(&model.SysAdminRole{})
sysAdminRole.AdminId = dto.ID
sysAdminRole.RoleId = dto.RoleId
core.Db.Create(&sysAdminRole)
result.Success(c, true)
}
// DeleteSysAdmin 根据ID删除用户
// @Summary 根据ID删除用户
// @Tags 用户相关接口
// @Produce json
// @Description 根据ID删除用户
// @Param data body model.SysAdminIdDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/delete [delete]
func DeleteSysAdmin(c *gin.Context) {
var dto model.SysAdminIdDto
_ = c.BindJSON(&dto)
core.Db.Delete(&model.SysAdmin{}, dto.ID)
// 再查询关系表,并删除
core.Db.Where("admin_id = ?", dto.ID).Delete(&model.SysAdminRole{})
result.Success(c, true)
}
// UpdateSysAdminStatus 设置用户启用状态
// @Summary 设置用户启用状态
// @Tags 用户相关接口
// @Produce json
// @Description 设置用户启用状态
// @Param data body model.UpdateSysAdminStatusDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/updateStatus [put]
func UpdateSysAdminStatus(c *gin.Context) {
var dto model.UpdateSysAdminStatusDto
_ = c.BindJSON(&dto)
var sysAdmin model.SysAdmin
core.Db.First(&sysAdmin, dto.ID)
sysAdmin.Status = dto.Status
core.Db.Save(&sysAdmin)
result.Success(c, true)
}
// ResetSysAdminPassword 重置用户密码
// @Summary 重置用户密码
// @Tags 用户相关接口
// @Produce json
// @Description 重置用户密码
// @Param data body model.ResetSysAdminPasswordDto true "data"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/resetPassword [put]
func ResetSysAdminPassword(c *gin.Context) {
var dto model.ResetSysAdminPasswordDto
_ = c.BindJSON(&dto)
var sysAdmin model.SysAdmin
core.Db.First(&sysAdmin, dto.ID)
sysAdmin.Password = utils.EncryptionMd5(dto.Password)
core.Db.Save(&sysAdmin)
result.Success(c, true)
}
// GetSysAdminList 分页查询用户列表
// @Summary 分页查询用户列表
// @Tags 用户相关接口
// @Produce json
// @Description 分页查询用户列表
// @Param pageNum query int false "分页数"
// @Param pageSize query int false "每页数"
// @Param username query string false "用户名称"
// @Param status query string false "账号启用状态:1-启用;2-禁用"
// @Param beginTime query string false "开始时间"
// @Param endTime query string false "结束时间"
// @Success 200 {object} result.Result
// @router /api/sysAdmin/list [get]
func GetSysAdminList(c *gin.Context) {
PageNum, _ := strconv.Atoi(c.Query("pageNum"))
PageSize, _ := strconv.Atoi(c.Query("pageSize"))
Username := c.Query("username")
Status := c.Query("status")
BeginTime := c.Query("beginTime")
EndTime := c.Query("endTime")
if PageSize < 1 {
PageSize = 10
}
if PageNum < 1 {
PageNum = 1
}
var sysAdminVo []model.SysAdminVo
var count int64
curDb := core.Db.Table("sys_admin").
Select("sys_admin.*, sys_role.role_name").
Joins("LEFT JOIN sys_admin_role ON sys_admin.id = sys_admin_role.admin_id").
Joins("LEFT JOIN sys_role ON sys_role.id = sys_admin_role.role_id")
if Username != "" {
curDb = curDb.Where("sys_admin.username = ?", Username)
}
if BeginTime != "" && EndTime != "" {
curDb = curDb.Where("sys_admin.create_time BETWEEN ? AND ?", BeginTime, EndTime)
}
if Status != "" {
curDb = curDb.Where("sys_admin.status = ?", Status)
}
curDb.Count(&count).Limit(PageSize).Offset((PageNum - 1) * PageSize).Order("sys_admin.create_time DESC").Find(&sysAdminVo)
result.Success(c, map[string]interface{}{"total": count, "pageSize": PageSize, "pageNum": PageNum, "list": sysAdminVo})
}
// GetSysAdminByUsername 根据用户名称查询用户
func GetSysAdminByUsername(username string) (sysAdmin model.SysAdmin) {
core.Db.Where("username = ?", username).First(&sysAdmin)
return sysAdmin
}
下一步增加路由 /router/router.go
:
router.GET("/api/sysAdmin/list", api.GetSysAdminList)
初始化swag,测试一下:
欧克,没什么问题。