🎨用户接口处理完毕

This commit is contained in:
coward
2024-03-07 15:11:29 +08:00
parent 1c0a128855
commit 097505df99
17 changed files with 2079 additions and 59 deletions

View File

@@ -1,7 +1,9 @@
package api
import (
"gitee.ltd/lxh/logger/log"
"github.com/gin-gonic/gin"
"wireguard-dashboard/client"
"wireguard-dashboard/compoment"
"wireguard-dashboard/constant"
"wireguard-dashboard/http/param"
@@ -66,26 +68,159 @@ func (u user) Login(c *gin.Context) {
})
}
// Logout
// @description: 退出登陆
// @receiver u
// @param c
func (u user) Logout(c *gin.Context) {
data, ok := c.Get("user")
if !ok {
utils.GinResponse(c).FailedWithMsg("你还没有登陆")
return
}
if err := compoment.JWT().Logout(data.(*entity.User).Id); err != nil {
log.Errorf("退出登陆失败: %v", err.Error())
utils.GinResponse(c).FailedWithMsg("退出登陆失败")
return
}
utils.GinResponse(c).OK()
}
// List
// @description: 用户列表
// @receiver u
// @param c
func (u user) List(c *gin.Context) {
var p param.UserList
if err := c.ShouldBind(&p); err != nil {
utils.GinResponse(c).FailedWithErr("参数错误", err)
return
}
data, total, err := repository.User().List(p)
if err != nil {
utils.GinResponse(c).FailedWithMsg("获取失败")
return
}
utils.GinResponse(c).OkWithPage(data, total, p.Current, p.Size)
}
// GetUser
// @description: 获取登陆用户信息
// @receiver u
// @param c
func (u user) GetUser(c *gin.Context) {
user, ok := c.Get("user")
info, ok := c.Get("user")
if !ok {
utils.GinResponse(c).FailedWithMsg("获取信息失败")
return
}
data := &vo.User{
Id: user.(*entity.User).Id,
Name: user.(*entity.User).Name,
Avatar: user.(*entity.User).Avatar,
Account: user.(*entity.User).Account,
Email: user.(*entity.User).Email,
IsAdmin: user.(*entity.User).IsAdmin,
Status: user.(*entity.User).Status,
CreatedAt: user.(*entity.User).CreatedAt,
UpdatedAt: user.(*entity.User).UpdatedAt,
Id: info.(*entity.User).Id,
Name: info.(*entity.User).Name,
Avatar: info.(*entity.User).Avatar,
Account: info.(*entity.User).Account,
Email: info.(*entity.User).Email,
IsAdmin: info.(*entity.User).IsAdmin,
Status: info.(*entity.User).Status,
CreatedAt: info.(*entity.User).CreatedAt,
UpdatedAt: info.(*entity.User).UpdatedAt,
}
utils.GinResponse(c).OKWithData(data)
}
// Save
// @description: 新增/更改用户信息
// @receiver u
// @param c
func (u user) Save(c *gin.Context) {
var p param.SaveUser
if err := c.ShouldBind(&p); err != nil {
utils.GinResponse(c).FailedWithErr("参数错误", err)
return
}
// 只有新增才会判断
if p.ID == "" {
// 判断用户是否已经存在
var count int64
if err := client.DB.Model(&entity.User{}).Where("account = ?", p.Account).Count(&count).Error; err != nil {
utils.GinResponse(c).FailedWithMsg("查询失败")
return
}
if count > 0 {
utils.GinResponse(c).FailedWithMsg("用户已存在!")
return
}
}
if err := repository.User().Save(&entity.User{
Base: entity.Base{
Id: p.ID,
},
Avatar: p.Avatar,
Name: p.Name,
Account: p.Account,
Email: p.Email,
Password: p.Password,
IsAdmin: p.IsAdmin,
Status: p.Status,
}); err != nil {
utils.GinResponse(c).FailedWithMsg(err.Error())
return
}
utils.GinResponse(c).OK()
}
// ChangePassword
// @description: 更改密码
// @receiver u
// @param c
func (u user) ChangePassword(c *gin.Context) {
var p param.ChangePassword
if err := c.ShouldBind(&p); err != nil {
utils.GinResponse(c).FailedWithErr("参数错误", err)
return
}
user, ok := c.Get("user")
if !ok {
utils.GinResponse(c).AuthorizationFailed()
return
}
if !utils.Password().ComparePassword(user.(*entity.User).Password, p.OriginPassword) {
utils.GinResponse(c).FailedWithMsg("原密码错误")
return
}
// 开始变更密码
if err := repository.User().ChangePassword(p, user.(*entity.User).Id); err != nil {
utils.GinResponse(c).FailedWithMsg("更改密码失败")
return
}
utils.GinResponse(c).OK()
}
// ChangeUserState
// @description: 改变用户状态
// @receiver u
// @param c
func (u user) ChangeUserState(c *gin.Context) {
var p param.ChangeUserState
if err := c.ShouldBind(&p); err != nil {
utils.GinResponse(c).FailedWithErr("参数错误", err)
return
}
if err := repository.User().ChangeUserState(p); err != nil {
utils.GinResponse(c).FailedWithMsg("操作失败")
return
}
utils.GinResponse(c).OK()
}

6
http/param/base.go Normal file
View File

@@ -0,0 +1,6 @@
package param
type page struct {
Current int `json:"current" form:"current" binding:"required"`
Size int `json:"size" form:"size" binding:"required"`
}

View File

@@ -1,8 +1,46 @@
package param
import "wireguard-dashboard/constant"
// Login
// @description: 登陆
type Login struct {
Account string `json:"account" form:"account" binding:"required"`
Password string `json:"password" form:"password" binding:"required"`
CaptchaId string `json:"captchaId" form:"captchaId" binding:"required"`
CaptchaAnswer string `json:"captchaAnswer" form:"captchaAnswer" binding:"required"`
Account string `json:"account" form:"account" binding:"required"` // 账号
Password string `json:"password" form:"password" binding:"required"` // 密码
CaptchaId string `json:"captchaId" form:"captchaId" binding:"required"` // 验证码id
CaptchaAnswer string `json:"captchaAnswer" form:"captchaAnswer" binding:"required"` // 验证码
}
// SaveUser
// @description: 新增/编辑用户信息
type SaveUser struct {
ID string `json:"id" form:"id" binding:"omitempty"`
Name string `json:"name" form:"name" binding:"required"` // 用户名
Account string `json:"account" form:"account" binding:"required"` // 账号 唯一
Avatar string `json:"avatar" form:"avatar" binding:"omitempty"` // 头像
Email string `json:"email" form:"email" binding:"omitempty"` // 联系邮箱
Password string `json:"password" form:"password" binding:"omitempty"` // 密码
IsAdmin constant.UserType `json:"isAdmin" form:"isAdmin" binding:"required"` // 是否为管理员 0 - 否 | 1 - 是
Status constant.UserStatus `json:"status" form:"status" binding:"required"` // 用户状态 0 - 禁用 | 1 - 正常
}
// ChangePassword
// @description: 更改密码
type ChangePassword struct {
OriginPassword string `json:"originPassword" form:"originPassword" binding:"required"` // 原密码
NewPassword string `json:"newPassword" form:"newPassword" binding:"required"` // 新密码
ConfirmPassword string `json:"confirmPassword" form:"confirmPassword" binding:"required,eqfield=NewPassword"` // 确认密码
}
// UserList
// @description: 用户列表
type UserList struct {
page
}
// ChangeUserState
// @description: 变更状态
type ChangeUserState struct {
ID string `json:"id" form:"id" binding:"required"` // 用户id
Status string `json:"status" form:"status" binding:"required,oneof=0 1"` // 用户状态
}