ifms_go/internal/mods/rbac/api/login.api.go

184 lines
4.8 KiB
Go
Raw Normal View History

2025-06-10 17:50:46 +08:00
package api
import (
"ifms/internal/mods/rbac/biz"
"ifms/internal/mods/rbac/schema"
"ifms/pkg/util"
2025-06-11 00:12:16 +08:00
2025-06-10 17:50:46 +08:00
"github.com/gin-gonic/gin"
)
type Login struct {
LoginBIZ *biz.Login
}
// @Tags LoginAPI
// @Summary Get captcha ID
// @Success 200 {object} util.ResponseResult{data=schema.Captcha}
// @Router /api/v1/captcha/id [get]
func (a *Login) GetCaptcha(c *gin.Context) {
ctx := c.Request.Context()
data, err := a.LoginBIZ.GetCaptcha(ctx)
if err != nil {
util.ResError(c, err)
return
}
util.ResSuccess(c, data)
}
// @Tags LoginAPI
// @Summary Response captcha image
// @Param id query string true "Captcha ID"
// @Param reload query number false "Reload captcha image (reload=1)"
// @Produce image/png
// @Success 200 "Captcha image"
// @Failure 404 {object} util.ResponseResult
// @Router /api/v1/captcha/image [get]
func (a *Login) ResponseCaptcha(c *gin.Context) {
ctx := c.Request.Context()
err := a.LoginBIZ.ResponseCaptcha(ctx, c.Writer, c.Query("id"), c.Query("reload") == "1")
if err != nil {
util.ResError(c, err)
}
}
// @Tags LoginAPI
// @Summary Login system with username and password
// @Param body body schema.LoginForm true "Request body"
// @Success 200 {object} util.ResponseResult{data=schema.LoginToken}
// @Failure 400 {object} util.ResponseResult
// @Failure 500 {object} util.ResponseResult
// @Router /api/v1/login [post]
func (a *Login) Login(c *gin.Context) {
ctx := c.Request.Context()
item := new(schema.LoginForm)
if err := util.ParseJSON(c, item); err != nil {
util.ResError(c, err)
return
}
data, err := a.LoginBIZ.Login(ctx, item.Trim())
if err != nil {
util.ResError(c, err)
return
}
util.ResSuccess(c, data)
}
// @Tags LoginAPI
// @Security ApiKeyAuth
// @Summary Logout system
// @Success 200 {object} util.ResponseResult
// @Failure 500 {object} util.ResponseResult
// @Router /api/v1/current/logout [post]
func (a *Login) Logout(c *gin.Context) {
ctx := c.Request.Context()
err := a.LoginBIZ.Logout(ctx)
if err != nil {
util.ResError(c, err)
return
}
util.ResOK(c)
}
// @Tags LoginAPI
// @Security ApiKeyAuth
// @Summary Refresh current access token
// @Success 200 {object} util.ResponseResult{data=schema.LoginToken}
// @Failure 401 {object} util.ResponseResult
// @Failure 500 {object} util.ResponseResult
// @Router /api/v1/current/refresh-token [post]
func (a *Login) RefreshToken(c *gin.Context) {
ctx := c.Request.Context()
data, err := a.LoginBIZ.RefreshToken(ctx)
if err != nil {
util.ResError(c, err)
return
}
util.ResSuccess(c, data)
}
// @Tags LoginAPI
// @Security ApiKeyAuth
// @Summary Get current user info
// @Success 200 {object} util.ResponseResult{data=schema.User}
// @Failure 401 {object} util.ResponseResult
// @Failure 500 {object} util.ResponseResult
// @Router /api/v1/current/user [get]
func (a *Login) GetUserInfo(c *gin.Context) {
ctx := c.Request.Context()
data, err := a.LoginBIZ.GetUserInfo(ctx)
if err != nil {
util.ResError(c, err)
return
}
util.ResSuccess(c, data)
}
// @Tags LoginAPI
// @Security ApiKeyAuth
// @Summary Change current user password
// @Param body body schema.UpdateLoginPassword true "Request body"
// @Success 200 {object} util.ResponseResult
// @Failure 400 {object} util.ResponseResult
// @Failure 401 {object} util.ResponseResult
// @Failure 500 {object} util.ResponseResult
// @Router /api/v1/current/password [put]
func (a *Login) UpdatePassword(c *gin.Context) {
ctx := c.Request.Context()
item := new(schema.UpdateLoginPassword)
if err := util.ParseJSON(c, item); err != nil {
util.ResError(c, err)
return
}
err := a.LoginBIZ.UpdatePassword(ctx, item)
if err != nil {
util.ResError(c, err)
return
}
util.ResOK(c)
}
// @Tags LoginAPI
// @Security ApiKeyAuth
// @Summary Query current user menus based on the current user role
// @Success 200 {object} util.ResponseResult{data=[]schema.Menu}
// @Failure 401 {object} util.ResponseResult
// @Failure 500 {object} util.ResponseResult
// @Router /api/v1/current/menus [get]
func (a *Login) QueryMenus(c *gin.Context) {
ctx := c.Request.Context()
data, err := a.LoginBIZ.QueryMenus(ctx)
if err != nil {
util.ResError(c, err)
return
}
util.ResSuccess(c, data)
}
// @Tags LoginAPI
// @Security ApiKeyAuth
// @Summary Update current user info
// @Param body body schema.UpdateCurrentUser true "Request body"
// @Success 200 {object} util.ResponseResult
// @Failure 400 {object} util.ResponseResult
// @Failure 401 {object} util.ResponseResult
// @Failure 500 {object} util.ResponseResult
// @Router /api/v1/current/user [put]
func (a *Login) UpdateUser(c *gin.Context) {
ctx := c.Request.Context()
item := new(schema.UpdateCurrentUser)
if err := util.ParseJSON(c, item); err != nil {
util.ResError(c, err)
return
}
err := a.LoginBIZ.UpdateUser(ctx, item)
if err != nil {
util.ResError(c, err)
return
}
util.ResOK(c)
}