123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562 |
- package admin
- import (
- "github.com/gin-gonic/gin"
- v1 "github.com/go-nunu/nunu-layout-advanced/api/v1"
- "github.com/go-nunu/nunu-layout-advanced/internal/handler"
- "github.com/go-nunu/nunu-layout-advanced/internal/service/admin"
- "net/http"
- )
- type AdminHandler struct {
- *handler.Handler
- adminService admin.AdminService
- }
- func NewAdminHandler(
- handler *handler.Handler,
- adminService admin.AdminService,
- ) *AdminHandler {
- return &AdminHandler{
- Handler: handler,
- adminService: adminService,
- }
- }
- // Login godoc
- // @Summary 账号登录
- // @Schemes
- // @Description
- // @Tags 用户模块
- // @Accept json
- // @Produce json
- // @Param request body v1.LoginRequest true "params"
- // @Success 200 {object} v1.LoginResponse
- // @Router /v1/login [post]
- func (h *AdminHandler) Login(ctx *gin.Context) {
- var req v1.LoginRequest
- if err := ctx.ShouldBindJSON(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- token, err := h.adminService.Login(ctx, &req)
- if err != nil {
- v1.HandleError(ctx, http.StatusUnauthorized, v1.ErrUnauthorized, nil)
- return
- }
- v1.HandleSuccess(ctx, v1.LoginResponseData{
- AccessToken: token,
- })
- }
- // GetMenus godoc
- // @Summary 获取用户菜单
- // @Schemes
- // @Description 获取当前用户的菜单列表
- // @Tags 菜单模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Success 200 {object} v1.GetMenuResponse
- // @Router /v1/menus [get]
- func (h *AdminHandler) GetMenus(ctx *gin.Context) {
- data, err := h.adminService.GetMenus(ctx, handler.GetUserIdFromCtx(ctx))
- if err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- // 过滤权限菜单
- v1.HandleSuccess(ctx, data)
- }
- // GetAdminMenus godoc
- // @Summary 获取管理员菜单
- // @Schemes
- // @Description 获取管理员菜单列表
- // @Tags 菜单模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Success 200 {object} v1.GetMenuResponse
- // @Router /v1/admin/menus [get]
- func (h *AdminHandler) GetAdminMenus(ctx *gin.Context) {
- data, err := h.adminService.GetAdminMenus(ctx)
- if err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- // 过滤权限菜单
- v1.HandleSuccess(ctx, data)
- }
- // GetUserPermissions godoc
- // @Summary 获取用户权限
- // @Schemes
- // @Description 获取当前用户的权限列表
- // @Tags 权限模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Success 200 {object} v1.GetUserPermissionsData
- // @Router /v1/admin/user/permissions [get]
- func (h *AdminHandler) GetUserPermissions(ctx *gin.Context) {
- data, err := h.adminService.GetUserPermissions(ctx, handler.GetUserIdFromCtx(ctx))
- if err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- // 过滤权限菜单
- v1.HandleSuccess(ctx, data)
- }
- // GetRolePermissions godoc
- // @Summary 获取角色权限
- // @Schemes
- // @Description 获取指定角色的权限列表
- // @Tags 权限模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param role query string true "角色名称"
- // @Success 200 {object} v1.GetRolePermissionsData
- // @Router /v1/admin/role/permissions [get]
- func (h *AdminHandler) GetRolePermissions(ctx *gin.Context) {
- var req v1.GetRolePermissionsRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- data, err := h.adminService.GetRolePermissions(ctx, req.Role)
- if err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, data)
- }
- // UpdateRolePermission godoc
- // @Summary 更新角色权限
- // @Schemes
- // @Description 更新指定角色的权限列表
- // @Tags 权限模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param request body v1.UpdateRolePermissionRequest true "参数"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/role/permissions [put]
- func (h *AdminHandler) UpdateRolePermission(ctx *gin.Context) {
- var req v1.UpdateRolePermissionRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- err := h.adminService.UpdateRolePermission(ctx, &req)
- if err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // MenuUpdate godoc
- // @Summary 更新菜单
- // @Schemes
- // @Description 更新菜单信息
- // @Tags 菜单模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param request body v1.MenuUpdateRequest true "参数"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/menu [put]
- func (h *AdminHandler) MenuUpdate(ctx *gin.Context) {
- var req v1.MenuUpdateRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.MenuUpdate(ctx, &req); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // MenuCreate godoc
- // @Summary 创建菜单
- // @Schemes
- // @Description 创建新的菜单
- // @Tags 菜单模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param request body v1.MenuCreateRequest true "参数"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/menu [post]
- func (h *AdminHandler) MenuCreate(ctx *gin.Context) {
- var req v1.MenuCreateRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.MenuCreate(ctx, &req); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // MenuDelete godoc
- // @Summary 删除菜单
- // @Schemes
- // @Description 删除指定菜单
- // @Tags 菜单模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param id query uint true "菜单ID"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/menu [delete]
- func (h *AdminHandler) MenuDelete(ctx *gin.Context) {
- var req v1.MenuDeleteRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.MenuDelete(ctx, req.ID); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // GetRoles godoc
- // @Summary 获取角色列表
- // @Schemes
- // @Description 获取角色列表
- // @Tags 角色模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param page query int true "页码"
- // @Param pageSize query int true "每页数量"
- // @Param sid query string false "角色ID"
- // @Param name query string false "角色名称"
- // @Success 200 {object} v1.GetRolesResponse
- // @Router /v1/admin/roles [get]
- func (h *AdminHandler) GetRoles(ctx *gin.Context) {
- var req v1.GetRoleListRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- data, err := h.adminService.GetRoles(ctx, &req)
- if err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, data)
- }
- // RoleCreate godoc
- // @Summary 创建角色
- // @Schemes
- // @Description 创建新的角色
- // @Tags 角色模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param request body v1.RoleCreateRequest true "参数"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/role [post]
- func (h *AdminHandler) RoleCreate(ctx *gin.Context) {
- var req v1.RoleCreateRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.RoleCreate(ctx, &req); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // RoleUpdate godoc
- // @Summary 更新角色
- // @Schemes
- // @Description 更新角色信息
- // @Tags 角色模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param request body v1.RoleUpdateRequest true "参数"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/role [put]
- func (h *AdminHandler) RoleUpdate(ctx *gin.Context) {
- var req v1.RoleUpdateRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.RoleUpdate(ctx, &req); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // RoleDelete godoc
- // @Summary 删除角色
- // @Schemes
- // @Description 删除指定角色
- // @Tags 角色模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param id query uint true "角色ID"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/role [delete]
- func (h *AdminHandler) RoleDelete(ctx *gin.Context) {
- var req v1.RoleDeleteRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.RoleDelete(ctx, req.ID); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // GetApis godoc
- // @Summary 获取API列表
- // @Schemes
- // @Description 获取API列表
- // @Tags API模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param page query int true "页码"
- // @Param pageSize query int true "每页数量"
- // @Param group query string false "API分组"
- // @Param name query string false "API名称"
- // @Param path query string false "API路径"
- // @Param method query string false "请求方法"
- // @Success 200 {object} v1.GetApisResponse
- // @Router /v1/admin/apis [get]
- func (h *AdminHandler) GetApis(ctx *gin.Context) {
- var req v1.GetApisRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- data, err := h.adminService.GetApis(ctx, &req)
- if err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, data)
- }
- // ApiCreate godoc
- // @Summary 创建API
- // @Schemes
- // @Description 创建新的API
- // @Tags API模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param request body v1.ApiCreateRequest true "参数"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/api [post]
- func (h *AdminHandler) ApiCreate(ctx *gin.Context) {
- var req v1.ApiCreateRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.ApiCreate(ctx, &req); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // ApiUpdate godoc
- // @Summary 更新API
- // @Schemes
- // @Description 更新API信息
- // @Tags API模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param request body v1.ApiUpdateRequest true "参数"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/api [put]
- func (h *AdminHandler) ApiUpdate(ctx *gin.Context) {
- var req v1.ApiUpdateRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.ApiUpdate(ctx, &req); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // ApiDelete godoc
- // @Summary 删除API
- // @Schemes
- // @Description 删除指定API
- // @Tags API模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param id query uint true "API ID"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/api [delete]
- func (h *AdminHandler) ApiDelete(ctx *gin.Context) {
- var req v1.ApiDeleteRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.ApiDelete(ctx, req.ID); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // AdminUserUpdate godoc
- // @Summary 更新管理员用户
- // @Schemes
- // @Description 更新管理员用户信息
- // @Tags 用户模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param request body v1.AdminUserUpdateRequest true "参数"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/user [put]
- func (h *AdminHandler) AdminUserUpdate(ctx *gin.Context) {
- var req v1.AdminUserUpdateRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.AdminUserUpdate(ctx, &req); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // AdminUserCreate godoc
- // @Summary 创建管理员用户
- // @Schemes
- // @Description 创建新的管理员用户
- // @Tags 用户模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param request body v1.AdminUserCreateRequest true "参数"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/user [post]
- func (h *AdminHandler) AdminUserCreate(ctx *gin.Context) {
- var req v1.AdminUserCreateRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.AdminUserCreate(ctx, &req); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // AdminUserDelete godoc
- // @Summary 删除管理员用户
- // @Schemes
- // @Description 删除指定管理员用户
- // @Tags 用户模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param id query uint true "用户ID"
- // @Success 200 {object} v1.Response
- // @Router /v1/admin/user [delete]
- func (h *AdminHandler) AdminUserDelete(ctx *gin.Context) {
- var req v1.AdminUserDeleteRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- if err := h.adminService.AdminUserDelete(ctx, req.ID); err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, nil)
- }
- // GetAdminUsers godoc
- // @Summary 获取管理员用户列表
- // @Schemes
- // @Description 获取管理员用户列表
- // @Tags 用户模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Param page query int true "页码"
- // @Param pageSize query int true "每页数量"
- // @Param username query string false "用户名"
- // @Param nickname query string false "昵称"
- // @Param phone query string false "手机号"
- // @Param email query string false "邮箱"
- // @Success 200 {object} v1.GetAdminUsersResponse
- // @Router /v1/admin/users [get]
- func (h *AdminHandler) GetAdminUsers(ctx *gin.Context) {
- var req v1.GetAdminUsersRequest
- if err := ctx.ShouldBind(&req); err != nil {
- v1.HandleError(ctx, http.StatusBadRequest, v1.ErrBadRequest, nil)
- return
- }
- data, err := h.adminService.GetAdminUsers(ctx, &req)
- if err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, data)
- }
- // GetAdminUser godoc
- // @Summary 获取管理用户信息
- // @Schemes
- // @Description
- // @Tags 用户模块
- // @Accept json
- // @Produce json
- // @Security Bearer
- // @Success 200 {object} v1.GetAdminUserResponse
- // @Router /v1/admin/user [get]
- func (h *AdminHandler) GetAdminUser(ctx *gin.Context) {
- data, err := h.adminService.GetAdminUser(ctx, handler.GetUserIdFromCtx(ctx))
- if err != nil {
- v1.HandleError(ctx, http.StatusInternalServerError, v1.ErrInternalServerError, nil)
- return
- }
- v1.HandleSuccess(ctx, data)
- }
|