Browse Source

feat: API definitions and goctl generated code for menu/role/org

master
dark 1 month ago
parent
commit
6df3f8795f
  1. 52
      backend/api/menu.api
  2. 106
      backend/api/organization.api
  3. 52
      backend/api/role.api
  4. 152
      backend/base.api
  5. 32
      backend/internal/handler/menu/createmenuhandler.go
  6. 32
      backend/internal/handler/menu/deletemenuhandler.go
  7. 25
      backend/internal/handler/menu/getcurrentmenushandler.go
  8. 25
      backend/internal/handler/menu/getmenulisthandler.go
  9. 32
      backend/internal/handler/menu/updatemenuhandler.go
  10. 32
      backend/internal/handler/organization/addorgmemberhandler.go
  11. 32
      backend/internal/handler/organization/createorganizationhandler.go
  12. 32
      backend/internal/handler/organization/deleteorganizationhandler.go
  13. 25
      backend/internal/handler/organization/getorganizationlisthandler.go
  14. 32
      backend/internal/handler/organization/getorgmembershandler.go
  15. 32
      backend/internal/handler/organization/removeorgmemberhandler.go
  16. 32
      backend/internal/handler/organization/updateorganizationhandler.go
  17. 32
      backend/internal/handler/organization/updateorgmemberhandler.go
  18. 25
      backend/internal/handler/profile/getuserorgshandler.go
  19. 32
      backend/internal/handler/profile/switchorghandler.go
  20. 32
      backend/internal/handler/role/createrolehandler.go
  21. 32
      backend/internal/handler/role/deleterolehandler.go
  22. 25
      backend/internal/handler/role/getrolelisthandler.go
  23. 32
      backend/internal/handler/role/getrolemenushandler.go
  24. 32
      backend/internal/handler/role/setrolemenushandler.go
  25. 32
      backend/internal/handler/role/updaterolehandler.go
  26. 215
      backend/internal/handler/routes.go
  27. 34
      backend/internal/logic/menu/createmenulogic.go
  28. 34
      backend/internal/logic/menu/deletemenulogic.go
  29. 34
      backend/internal/logic/menu/getcurrentmenuslogic.go
  30. 34
      backend/internal/logic/menu/getmenulistlogic.go
  31. 34
      backend/internal/logic/menu/updatemenulogic.go
  32. 34
      backend/internal/logic/organization/addorgmemberlogic.go
  33. 34
      backend/internal/logic/organization/createorganizationlogic.go
  34. 34
      backend/internal/logic/organization/deleteorganizationlogic.go
  35. 34
      backend/internal/logic/organization/getorganizationlistlogic.go
  36. 34
      backend/internal/logic/organization/getorgmemberslogic.go
  37. 34
      backend/internal/logic/organization/removeorgmemberlogic.go
  38. 34
      backend/internal/logic/organization/updateorganizationlogic.go
  39. 34
      backend/internal/logic/organization/updateorgmemberlogic.go
  40. 34
      backend/internal/logic/profile/getuserorgslogic.go
  41. 34
      backend/internal/logic/profile/switchorglogic.go
  42. 34
      backend/internal/logic/role/createrolelogic.go
  43. 34
      backend/internal/logic/role/deleterolelogic.go
  44. 34
      backend/internal/logic/role/getrolelistlogic.go
  45. 34
      backend/internal/logic/role/getrolemenuslogic.go
  46. 34
      backend/internal/logic/role/setrolemenuslogic.go
  47. 34
      backend/internal/logic/role/updaterolelogic.go
  48. 245
      backend/internal/types/types.go

52
backend/api/menu.api

@ -0,0 +1,52 @@
syntax = "v1"
// ========== 菜单管理类型定义 ==========
type (
MenuItem {
Id int64 `json:"id"`
ParentId int64 `json:"parentId"`
Name string `json:"name"`
Path string `json:"path"`
Icon string `json:"icon"`
Component string `json:"component"`
Type string `json:"type"`
SortOrder int `json:"sortOrder"`
Visible bool `json:"visible"`
Status int `json:"status"`
Children []MenuItem `json:"children"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
MenuListResponse {
List []MenuItem `json:"list"`
}
CreateMenuRequest {
ParentId int64 `json:"parentId,optional"`
Name string `json:"name" validate:"required"`
Path string `json:"path,optional"`
Icon string `json:"icon,optional"`
Component string `json:"component,optional"`
Type string `json:"type,optional"`
SortOrder int `json:"sortOrder,optional"`
Visible *bool `json:"visible,optional"`
}
UpdateMenuRequest {
Id int64 `path:"id"`
ParentId *int64 `json:"parentId,optional"`
Name string `json:"name,optional"`
Path string `json:"path,optional"`
Icon string `json:"icon,optional"`
Component string `json:"component,optional"`
Type string `json:"type,optional"`
SortOrder *int `json:"sortOrder,optional"`
Visible *bool `json:"visible,optional"`
Status *int `json:"status,optional"`
}
DeleteMenuRequest {
Id int64 `path:"id"`
}
)

106
backend/api/organization.api

@ -0,0 +1,106 @@
syntax = "v1"
// ========== 机构管理类型定义 ==========
type (
OrgInfo {
Id int64 `json:"id"`
ParentId int64 `json:"parentId"`
Name string `json:"name"`
Code string `json:"code"`
Leader string `json:"leader"`
Phone string `json:"phone"`
Email string `json:"email"`
SortOrder int `json:"sortOrder"`
Status int `json:"status"`
MemberCount int64 `json:"memberCount"`
Children []OrgInfo `json:"children"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
OrgListResponse {
List []OrgInfo `json:"list"`
}
CreateOrgRequest {
ParentId int64 `json:"parentId,optional"`
Name string `json:"name" validate:"required"`
Code string `json:"code" validate:"required"`
Leader string `json:"leader,optional"`
Phone string `json:"phone,optional"`
Email string `json:"email,optional"`
SortOrder int `json:"sortOrder,optional"`
}
UpdateOrgRequest {
Id int64 `path:"id"`
ParentId *int64 `json:"parentId,optional"`
Name string `json:"name,optional"`
Code string `json:"code,optional"`
Leader string `json:"leader,optional"`
Phone string `json:"phone,optional"`
Email string `json:"email,optional"`
SortOrder *int `json:"sortOrder,optional"`
Status *int `json:"status,optional"`
}
DeleteOrgRequest {
Id int64 `path:"id"`
}
OrgMember {
UserId int64 `json:"userId"`
Username string `json:"username"`
Email string `json:"email"`
Phone string `json:"phone"`
RoleId int64 `json:"roleId"`
RoleName string `json:"roleName"`
RoleCode string `json:"roleCode"`
CreatedAt string `json:"createdAt"`
}
GetOrgMembersRequest {
Id int64 `path:"id"`
}
OrgMembersResponse {
List []OrgMember `json:"list"`
}
AddOrgMemberRequest {
Id int64 `path:"id"`
UserId int64 `json:"userId" validate:"required"`
RoleId int64 `json:"roleId" validate:"required"`
}
UpdateOrgMemberRequest {
Id int64 `path:"id"`
UserId int64 `path:"userId"`
RoleId int64 `json:"roleId" validate:"required"`
}
RemoveOrgMemberRequest {
Id int64 `path:"id"`
UserId int64 `path:"userId"`
}
UserOrgInfo {
OrgId int64 `json:"orgId"`
OrgName string `json:"orgName"`
RoleId int64 `json:"roleId"`
RoleName string `json:"roleName"`
RoleCode string `json:"roleCode"`
}
UserOrgsResponse {
List []UserOrgInfo `json:"list"`
}
SwitchOrgRequest {
OrgId int64 `json:"orgId" validate:"required"`
}
SwitchOrgResponse {
Token string `json:"token"`
}
)

52
backend/api/role.api

@ -0,0 +1,52 @@
syntax = "v1"
// ========== 角色管理类型定义 ==========
type (
RoleInfo {
Id int64 `json:"id"`
Name string `json:"name"`
Code string `json:"code"`
Description string `json:"description"`
IsSystem bool `json:"isSystem"`
SortOrder int `json:"sortOrder"`
Status int `json:"status"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
RoleListResponse {
List []RoleInfo `json:"list"`
}
CreateRoleRequest {
Name string `json:"name" validate:"required"`
Code string `json:"code" validate:"required"`
Description string `json:"description,optional"`
SortOrder int `json:"sortOrder,optional"`
}
UpdateRoleRequest {
Id int64 `path:"id"`
Name string `json:"name,optional"`
Description string `json:"description,optional"`
SortOrder *int `json:"sortOrder,optional"`
Status *int `json:"status,optional"`
}
DeleteRoleRequest {
Id int64 `path:"id"`
}
GetRoleMenusRequest {
Id int64 `path:"id"`
}
RoleMenusResponse {
MenuIds []int64 `json:"menuIds"`
}
SetRoleMenusRequest {
Id int64 `path:"id"`
MenuIds []int64 `json:"menuIds"`
}
)

152
backend/base.api

@ -10,6 +10,10 @@ info (
import "api/user.api" import "api/user.api"
import "api/profile.api" import "api/profile.api"
import "api/dashboard.api" import "api/dashboard.api"
import "api/file.api"
import "api/menu.api"
import "api/role.api"
import "api/organization.api"
// ========== 通用响应类型 ========== // ========== 通用响应类型 ==========
type ( type (
@ -122,6 +126,14 @@ service base-api {
@doc "修改密码" @doc "修改密码"
@handler changePassword @handler changePassword
post /profile/password (ChangePasswordRequest) returns (Response) post /profile/password (ChangePasswordRequest) returns (Response)
@doc "获取我的机构列表"
@handler getUserOrgs
get /profile/orgs returns (UserOrgsResponse)
@doc "切换当前机构"
@handler switchOrg
put /profile/current-org (SwitchOrgRequest) returns (SwitchOrgResponse)
} }
@server ( @server (
@ -142,3 +154,143 @@ service base-api {
get /dashboard/activities (RecentActivitiesRequest) returns (RecentActivitiesResponse) get /dashboard/activities (RecentActivitiesRequest) returns (RecentActivitiesResponse)
} }
@server (
prefix: /api/v1
group: file
middleware: Cors,Log,Auth,Authz
)
service base-api {
// ========== 文件管理接口 ==========
@doc "上传文件"
@handler uploadFile
post /file/upload returns (FileInfo)
@doc "获取文件列表"
@handler getFileList
get /files (FileListRequest) returns (FileListResponse)
@doc "获取文件详情"
@handler getFile
get /file/:id (GetFileRequest) returns (FileInfo)
@doc "获取文件访问URL"
@handler getFileUrl
get /file/:id/url (GetFileRequest) returns (FileUrlResponse)
@doc "更新文件信息"
@handler updateFile
put /file/:id (UpdateFileRequest) returns (FileInfo)
@doc "删除文件"
@handler deleteFile
delete /file/:id (DeleteFileRequest) returns (Response)
}
// ========== 菜单管理(当前用户菜单,只需登录) ==========
@server (
prefix: /api/v1
group: menu
middleware: Cors,Log,Auth
)
service base-api {
@doc "获取当前用户可见菜单"
@handler getCurrentMenus
get /menus/current returns (MenuListResponse)
}
// ========== 菜单管理(管理端,需授权) ==========
@server (
prefix: /api/v1
group: menu
middleware: Cors,Log,Auth,Authz
)
service base-api {
@doc "获取全部菜单列表"
@handler getMenuList
get /menus returns (MenuListResponse)
@doc "创建菜单"
@handler createMenu
post /menu (CreateMenuRequest) returns (MenuItem)
@doc "更新菜单"
@handler updateMenu
put /menu/:id (UpdateMenuRequest) returns (MenuItem)
@doc "删除菜单"
@handler deleteMenu
delete /menu/:id (DeleteMenuRequest) returns (Response)
}
// ========== 角色管理 ==========
@server (
prefix: /api/v1
group: role
middleware: Cors,Log,Auth,Authz
)
service base-api {
@doc "获取角色列表"
@handler getRoleList
get /roles returns (RoleListResponse)
@doc "创建角色"
@handler createRole
post /role (CreateRoleRequest) returns (RoleInfo)
@doc "更新角色"
@handler updateRole
put /role/:id (UpdateRoleRequest) returns (RoleInfo)
@doc "删除角色"
@handler deleteRole
delete /role/:id (DeleteRoleRequest) returns (Response)
@doc "获取角色菜单"
@handler getRoleMenus
get /role/:id/menus (GetRoleMenusRequest) returns (RoleMenusResponse)
@doc "设置角色菜单"
@handler setRoleMenus
put /role/:id/menus (SetRoleMenusRequest) returns (Response)
}
// ========== 机构管理 ==========
@server (
prefix: /api/v1
group: organization
middleware: Cors,Log,Auth,Authz
)
service base-api {
@doc "获取机构列表"
@handler getOrganizationList
get /organizations returns (OrgListResponse)
@doc "创建机构"
@handler createOrganization
post /organization (CreateOrgRequest) returns (OrgInfo)
@doc "更新机构"
@handler updateOrganization
put /organization/:id (UpdateOrgRequest) returns (OrgInfo)
@doc "删除机构"
@handler deleteOrganization
delete /organization/:id (DeleteOrgRequest) returns (Response)
@doc "获取机构成员"
@handler getOrgMembers
get /organization/:id/members (GetOrgMembersRequest) returns (OrgMembersResponse)
@doc "添加机构成员"
@handler addOrgMember
post /organization/:id/member (AddOrgMemberRequest) returns (Response)
@doc "更新机构成员角色"
@handler updateOrgMember
put /organization/:id/member/:userId (UpdateOrgMemberRequest) returns (Response)
@doc "移除机构成员"
@handler removeOrgMember
delete /organization/:id/member/:userId (RemoveOrgMemberRequest) returns (Response)
}

32
backend/internal/handler/menu/createmenuhandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package menu
import (
"net/http"
"github.com/youruser/base/internal/logic/menu"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 创建菜单
func CreateMenuHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.CreateMenuRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := menu.NewCreateMenuLogic(r.Context(), svcCtx)
resp, err := l.CreateMenu(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/menu/deletemenuhandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package menu
import (
"net/http"
"github.com/youruser/base/internal/logic/menu"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 删除菜单
func DeleteMenuHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.DeleteMenuRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := menu.NewDeleteMenuLogic(r.Context(), svcCtx)
resp, err := l.DeleteMenu(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

25
backend/internal/handler/menu/getcurrentmenushandler.go

@ -0,0 +1,25 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package menu
import (
"net/http"
"github.com/youruser/base/internal/logic/menu"
"github.com/youruser/base/internal/svc"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 获取当前用户可见菜单
func GetCurrentMenusHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := menu.NewGetCurrentMenusLogic(r.Context(), svcCtx)
resp, err := l.GetCurrentMenus()
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

25
backend/internal/handler/menu/getmenulisthandler.go

@ -0,0 +1,25 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package menu
import (
"net/http"
"github.com/youruser/base/internal/logic/menu"
"github.com/youruser/base/internal/svc"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 获取全部菜单列表
func GetMenuListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := menu.NewGetMenuListLogic(r.Context(), svcCtx)
resp, err := l.GetMenuList()
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/menu/updatemenuhandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package menu
import (
"net/http"
"github.com/youruser/base/internal/logic/menu"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 更新菜单
func UpdateMenuHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.UpdateMenuRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := menu.NewUpdateMenuLogic(r.Context(), svcCtx)
resp, err := l.UpdateMenu(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/organization/addorgmemberhandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"net/http"
"github.com/youruser/base/internal/logic/organization"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 添加机构成员
func AddOrgMemberHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.AddOrgMemberRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := organization.NewAddOrgMemberLogic(r.Context(), svcCtx)
resp, err := l.AddOrgMember(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/organization/createorganizationhandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"net/http"
"github.com/youruser/base/internal/logic/organization"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 创建机构
func CreateOrganizationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.CreateOrgRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := organization.NewCreateOrganizationLogic(r.Context(), svcCtx)
resp, err := l.CreateOrganization(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/organization/deleteorganizationhandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"net/http"
"github.com/youruser/base/internal/logic/organization"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 删除机构
func DeleteOrganizationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.DeleteOrgRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := organization.NewDeleteOrganizationLogic(r.Context(), svcCtx)
resp, err := l.DeleteOrganization(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

25
backend/internal/handler/organization/getorganizationlisthandler.go

@ -0,0 +1,25 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"net/http"
"github.com/youruser/base/internal/logic/organization"
"github.com/youruser/base/internal/svc"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 获取机构列表
func GetOrganizationListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := organization.NewGetOrganizationListLogic(r.Context(), svcCtx)
resp, err := l.GetOrganizationList()
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/organization/getorgmembershandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"net/http"
"github.com/youruser/base/internal/logic/organization"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 获取机构成员
func GetOrgMembersHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.GetOrgMembersRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := organization.NewGetOrgMembersLogic(r.Context(), svcCtx)
resp, err := l.GetOrgMembers(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/organization/removeorgmemberhandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"net/http"
"github.com/youruser/base/internal/logic/organization"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 移除机构成员
func RemoveOrgMemberHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.RemoveOrgMemberRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := organization.NewRemoveOrgMemberLogic(r.Context(), svcCtx)
resp, err := l.RemoveOrgMember(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/organization/updateorganizationhandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"net/http"
"github.com/youruser/base/internal/logic/organization"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 更新机构
func UpdateOrganizationHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.UpdateOrgRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := organization.NewUpdateOrganizationLogic(r.Context(), svcCtx)
resp, err := l.UpdateOrganization(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/organization/updateorgmemberhandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"net/http"
"github.com/youruser/base/internal/logic/organization"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 更新机构成员角色
func UpdateOrgMemberHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.UpdateOrgMemberRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := organization.NewUpdateOrgMemberLogic(r.Context(), svcCtx)
resp, err := l.UpdateOrgMember(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

25
backend/internal/handler/profile/getuserorgshandler.go

@ -0,0 +1,25 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package profile
import (
"net/http"
"github.com/youruser/base/internal/logic/profile"
"github.com/youruser/base/internal/svc"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 获取我的机构列表
func GetUserOrgsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := profile.NewGetUserOrgsLogic(r.Context(), svcCtx)
resp, err := l.GetUserOrgs()
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/profile/switchorghandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package profile
import (
"net/http"
"github.com/youruser/base/internal/logic/profile"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 切换当前机构
func SwitchOrgHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.SwitchOrgRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := profile.NewSwitchOrgLogic(r.Context(), svcCtx)
resp, err := l.SwitchOrg(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/role/createrolehandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"net/http"
"github.com/youruser/base/internal/logic/role"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 创建角色
func CreateRoleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.CreateRoleRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := role.NewCreateRoleLogic(r.Context(), svcCtx)
resp, err := l.CreateRole(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/role/deleterolehandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"net/http"
"github.com/youruser/base/internal/logic/role"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 删除角色
func DeleteRoleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.DeleteRoleRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := role.NewDeleteRoleLogic(r.Context(), svcCtx)
resp, err := l.DeleteRole(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

25
backend/internal/handler/role/getrolelisthandler.go

@ -0,0 +1,25 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"net/http"
"github.com/youruser/base/internal/logic/role"
"github.com/youruser/base/internal/svc"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 获取角色列表
func GetRoleListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := role.NewGetRoleListLogic(r.Context(), svcCtx)
resp, err := l.GetRoleList()
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/role/getrolemenushandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"net/http"
"github.com/youruser/base/internal/logic/role"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 获取角色菜单
func GetRoleMenusHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.GetRoleMenusRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := role.NewGetRoleMenusLogic(r.Context(), svcCtx)
resp, err := l.GetRoleMenus(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/role/setrolemenushandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"net/http"
"github.com/youruser/base/internal/logic/role"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 设置角色菜单
func SetRoleMenusHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.SetRoleMenusRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := role.NewSetRoleMenusLogic(r.Context(), svcCtx)
resp, err := l.SetRoleMenus(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

32
backend/internal/handler/role/updaterolehandler.go

@ -0,0 +1,32 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"net/http"
"github.com/youruser/base/internal/logic/role"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
// 更新角色
func UpdateRoleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.UpdateRoleRequest
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := role.NewUpdateRoleLogic(r.Context(), svcCtx)
resp, err := l.UpdateRole(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

215
backend/internal/handler/routes.go

@ -8,7 +8,11 @@ import (
auth "github.com/youruser/base/internal/handler/auth" auth "github.com/youruser/base/internal/handler/auth"
dashboard "github.com/youruser/base/internal/handler/dashboard" dashboard "github.com/youruser/base/internal/handler/dashboard"
file "github.com/youruser/base/internal/handler/file"
menu "github.com/youruser/base/internal/handler/menu"
organization "github.com/youruser/base/internal/handler/organization"
profile "github.com/youruser/base/internal/handler/profile" profile "github.com/youruser/base/internal/handler/profile"
role "github.com/youruser/base/internal/handler/role"
user "github.com/youruser/base/internal/handler/user" user "github.com/youruser/base/internal/handler/user"
"github.com/youruser/base/internal/svc" "github.com/youruser/base/internal/svc"
@ -45,7 +49,7 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
server.AddRoutes( server.AddRoutes(
rest.WithMiddlewares( rest.WithMiddlewares(
[]rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth}, []rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth, serverCtx.Authz},
[]rest.Route{ []rest.Route{
{ {
// 获取最近活动列表 // 获取最近活动列表
@ -64,10 +68,166 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
rest.WithPrefix("/api/v1"), rest.WithPrefix("/api/v1"),
) )
server.AddRoutes(
rest.WithMiddlewares(
[]rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth, serverCtx.Authz},
[]rest.Route{
{
// 获取文件详情
Method: http.MethodGet,
Path: "/file/:id",
Handler: file.GetFileHandler(serverCtx),
},
{
// 更新文件信息
Method: http.MethodPut,
Path: "/file/:id",
Handler: file.UpdateFileHandler(serverCtx),
},
{
// 删除文件
Method: http.MethodDelete,
Path: "/file/:id",
Handler: file.DeleteFileHandler(serverCtx),
},
{
// 获取文件访问URL
Method: http.MethodGet,
Path: "/file/:id/url",
Handler: file.GetFileUrlHandler(serverCtx),
},
{
// 上传文件
Method: http.MethodPost,
Path: "/file/upload",
Handler: file.UploadFileHandler(serverCtx),
},
{
// 获取文件列表
Method: http.MethodGet,
Path: "/files",
Handler: file.GetFileListHandler(serverCtx),
},
}...,
),
rest.WithPrefix("/api/v1"),
)
server.AddRoutes( server.AddRoutes(
rest.WithMiddlewares( rest.WithMiddlewares(
[]rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth}, []rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth},
[]rest.Route{ []rest.Route{
{
// 获取当前用户可见菜单
Method: http.MethodGet,
Path: "/menus/current",
Handler: menu.GetCurrentMenusHandler(serverCtx),
},
}...,
),
rest.WithPrefix("/api/v1"),
)
server.AddRoutes(
rest.WithMiddlewares(
[]rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth, serverCtx.Authz},
[]rest.Route{
{
// 创建菜单
Method: http.MethodPost,
Path: "/menu",
Handler: menu.CreateMenuHandler(serverCtx),
},
{
// 更新菜单
Method: http.MethodPut,
Path: "/menu/:id",
Handler: menu.UpdateMenuHandler(serverCtx),
},
{
// 删除菜单
Method: http.MethodDelete,
Path: "/menu/:id",
Handler: menu.DeleteMenuHandler(serverCtx),
},
{
// 获取全部菜单列表
Method: http.MethodGet,
Path: "/menus",
Handler: menu.GetMenuListHandler(serverCtx),
},
}...,
),
rest.WithPrefix("/api/v1"),
)
server.AddRoutes(
rest.WithMiddlewares(
[]rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth, serverCtx.Authz},
[]rest.Route{
{
// 创建机构
Method: http.MethodPost,
Path: "/organization",
Handler: organization.CreateOrganizationHandler(serverCtx),
},
{
// 更新机构
Method: http.MethodPut,
Path: "/organization/:id",
Handler: organization.UpdateOrganizationHandler(serverCtx),
},
{
// 删除机构
Method: http.MethodDelete,
Path: "/organization/:id",
Handler: organization.DeleteOrganizationHandler(serverCtx),
},
{
// 添加机构成员
Method: http.MethodPost,
Path: "/organization/:id/member",
Handler: organization.AddOrgMemberHandler(serverCtx),
},
{
// 更新机构成员角色
Method: http.MethodPut,
Path: "/organization/:id/member/:userId",
Handler: organization.UpdateOrgMemberHandler(serverCtx),
},
{
// 移除机构成员
Method: http.MethodDelete,
Path: "/organization/:id/member/:userId",
Handler: organization.RemoveOrgMemberHandler(serverCtx),
},
{
// 获取机构成员
Method: http.MethodGet,
Path: "/organization/:id/members",
Handler: organization.GetOrgMembersHandler(serverCtx),
},
{
// 获取机构列表
Method: http.MethodGet,
Path: "/organizations",
Handler: organization.GetOrganizationListHandler(serverCtx),
},
}...,
),
rest.WithPrefix("/api/v1"),
)
server.AddRoutes(
rest.WithMiddlewares(
[]rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth, serverCtx.Authz},
[]rest.Route{
{
// 切换当前机构
Method: http.MethodPut,
Path: "/profile/current-org",
Handler: profile.SwitchOrgHandler(serverCtx),
},
{ {
// 获取个人信息 // 获取个人信息
Method: http.MethodGet, Method: http.MethodGet,
@ -80,6 +240,12 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
Path: "/profile/me", Path: "/profile/me",
Handler: profile.UpdateProfileHandler(serverCtx), Handler: profile.UpdateProfileHandler(serverCtx),
}, },
{
// 获取我的机构列表
Method: http.MethodGet,
Path: "/profile/orgs",
Handler: profile.GetUserOrgsHandler(serverCtx),
},
{ {
// 修改密码 // 修改密码
Method: http.MethodPost, Method: http.MethodPost,
@ -93,7 +259,52 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
server.AddRoutes( server.AddRoutes(
rest.WithMiddlewares( rest.WithMiddlewares(
[]rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth}, []rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth, serverCtx.Authz},
[]rest.Route{
{
// 创建角色
Method: http.MethodPost,
Path: "/role",
Handler: role.CreateRoleHandler(serverCtx),
},
{
// 更新角色
Method: http.MethodPut,
Path: "/role/:id",
Handler: role.UpdateRoleHandler(serverCtx),
},
{
// 删除角色
Method: http.MethodDelete,
Path: "/role/:id",
Handler: role.DeleteRoleHandler(serverCtx),
},
{
// 获取角色菜单
Method: http.MethodGet,
Path: "/role/:id/menus",
Handler: role.GetRoleMenusHandler(serverCtx),
},
{
// 设置角色菜单
Method: http.MethodPut,
Path: "/role/:id/menus",
Handler: role.SetRoleMenusHandler(serverCtx),
},
{
// 获取角色列表
Method: http.MethodGet,
Path: "/roles",
Handler: role.GetRoleListHandler(serverCtx),
},
}...,
),
rest.WithPrefix("/api/v1"),
)
server.AddRoutes(
rest.WithMiddlewares(
[]rest.Middleware{serverCtx.Cors, serverCtx.Log, serverCtx.Auth, serverCtx.Authz},
[]rest.Route{ []rest.Route{
{ {
// 创建用户 // 创建用户

34
backend/internal/logic/menu/createmenulogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package menu
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type CreateMenuLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 创建菜单
func NewCreateMenuLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateMenuLogic {
return &CreateMenuLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *CreateMenuLogic) CreateMenu(req *types.CreateMenuRequest) (resp *types.MenuItem, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/menu/deletemenulogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package menu
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type DeleteMenuLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 删除菜单
func NewDeleteMenuLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteMenuLogic {
return &DeleteMenuLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *DeleteMenuLogic) DeleteMenu(req *types.DeleteMenuRequest) (resp *types.Response, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/menu/getcurrentmenuslogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package menu
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetCurrentMenusLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 获取当前用户可见菜单
func NewGetCurrentMenusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetCurrentMenusLogic {
return &GetCurrentMenusLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetCurrentMenusLogic) GetCurrentMenus() (resp *types.MenuListResponse, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/menu/getmenulistlogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package menu
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetMenuListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 获取全部菜单列表
func NewGetMenuListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetMenuListLogic {
return &GetMenuListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetMenuListLogic) GetMenuList() (resp *types.MenuListResponse, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/menu/updatemenulogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package menu
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type UpdateMenuLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 更新菜单
func NewUpdateMenuLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateMenuLogic {
return &UpdateMenuLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *UpdateMenuLogic) UpdateMenu(req *types.UpdateMenuRequest) (resp *types.MenuItem, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/organization/addorgmemberlogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type AddOrgMemberLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 添加机构成员
func NewAddOrgMemberLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AddOrgMemberLogic {
return &AddOrgMemberLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *AddOrgMemberLogic) AddOrgMember(req *types.AddOrgMemberRequest) (resp *types.Response, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/organization/createorganizationlogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type CreateOrganizationLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 创建机构
func NewCreateOrganizationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateOrganizationLogic {
return &CreateOrganizationLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *CreateOrganizationLogic) CreateOrganization(req *types.CreateOrgRequest) (resp *types.OrgInfo, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/organization/deleteorganizationlogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type DeleteOrganizationLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 删除机构
func NewDeleteOrganizationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteOrganizationLogic {
return &DeleteOrganizationLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *DeleteOrganizationLogic) DeleteOrganization(req *types.DeleteOrgRequest) (resp *types.Response, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/organization/getorganizationlistlogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetOrganizationListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 获取机构列表
func NewGetOrganizationListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetOrganizationListLogic {
return &GetOrganizationListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetOrganizationListLogic) GetOrganizationList() (resp *types.OrgListResponse, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/organization/getorgmemberslogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetOrgMembersLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 获取机构成员
func NewGetOrgMembersLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetOrgMembersLogic {
return &GetOrgMembersLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetOrgMembersLogic) GetOrgMembers(req *types.GetOrgMembersRequest) (resp *types.OrgMembersResponse, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/organization/removeorgmemberlogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type RemoveOrgMemberLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 移除机构成员
func NewRemoveOrgMemberLogic(ctx context.Context, svcCtx *svc.ServiceContext) *RemoveOrgMemberLogic {
return &RemoveOrgMemberLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *RemoveOrgMemberLogic) RemoveOrgMember(req *types.RemoveOrgMemberRequest) (resp *types.Response, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/organization/updateorganizationlogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type UpdateOrganizationLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 更新机构
func NewUpdateOrganizationLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateOrganizationLogic {
return &UpdateOrganizationLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *UpdateOrganizationLogic) UpdateOrganization(req *types.UpdateOrgRequest) (resp *types.OrgInfo, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/organization/updateorgmemberlogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package organization
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type UpdateOrgMemberLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 更新机构成员角色
func NewUpdateOrgMemberLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateOrgMemberLogic {
return &UpdateOrgMemberLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *UpdateOrgMemberLogic) UpdateOrgMember(req *types.UpdateOrgMemberRequest) (resp *types.Response, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/profile/getuserorgslogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package profile
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetUserOrgsLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 获取我的机构列表
func NewGetUserOrgsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetUserOrgsLogic {
return &GetUserOrgsLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetUserOrgsLogic) GetUserOrgs() (resp *types.UserOrgsResponse, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/profile/switchorglogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package profile
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type SwitchOrgLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 切换当前机构
func NewSwitchOrgLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SwitchOrgLogic {
return &SwitchOrgLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *SwitchOrgLogic) SwitchOrg(req *types.SwitchOrgRequest) (resp *types.SwitchOrgResponse, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/role/createrolelogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type CreateRoleLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 创建角色
func NewCreateRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *CreateRoleLogic {
return &CreateRoleLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *CreateRoleLogic) CreateRole(req *types.CreateRoleRequest) (resp *types.RoleInfo, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/role/deleterolelogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type DeleteRoleLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 删除角色
func NewDeleteRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteRoleLogic {
return &DeleteRoleLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *DeleteRoleLogic) DeleteRole(req *types.DeleteRoleRequest) (resp *types.Response, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/role/getrolelistlogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetRoleListLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 获取角色列表
func NewGetRoleListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetRoleListLogic {
return &GetRoleListLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetRoleListLogic) GetRoleList() (resp *types.RoleListResponse, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/role/getrolemenuslogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetRoleMenusLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 获取角色菜单
func NewGetRoleMenusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetRoleMenusLogic {
return &GetRoleMenusLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetRoleMenusLogic) GetRoleMenus(req *types.GetRoleMenusRequest) (resp *types.RoleMenusResponse, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/role/setrolemenuslogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type SetRoleMenusLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 设置角色菜单
func NewSetRoleMenusLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SetRoleMenusLogic {
return &SetRoleMenusLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *SetRoleMenusLogic) SetRoleMenus(req *types.SetRoleMenusRequest) (resp *types.Response, err error) {
// todo: add your logic here and delete this line
return
}

34
backend/internal/logic/role/updaterolelogic.go

@ -0,0 +1,34 @@
// Code scaffolded by goctl. Safe to edit.
// goctl 1.9.2
package role
import (
"context"
"github.com/youruser/base/internal/svc"
"github.com/youruser/base/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type UpdateRoleLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
// 更新角色
func NewUpdateRoleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UpdateRoleLogic {
return &UpdateRoleLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *UpdateRoleLogic) UpdateRole(req *types.UpdateRoleRequest) (resp *types.RoleInfo, err error) {
// todo: add your logic here and delete this line
return
}

245
backend/internal/types/types.go

@ -11,11 +11,45 @@ type Activity struct {
Status string `json:"status"` // 状态 success/error Status string `json:"status"` // 状态 success/error
} }
type AddOrgMemberRequest struct {
Id int64 `path:"id"`
UserId int64 `json:"userId" validate:"required"`
RoleId int64 `json:"roleId" validate:"required"`
}
type ChangePasswordRequest struct { type ChangePasswordRequest struct {
OldPassword string `json:"oldPassword" validate:"required,min=6,max=32"` // 旧密码 OldPassword string `json:"oldPassword" validate:"required,min=6,max=32"` // 旧密码
NewPassword string `json:"newPassword" validate:"required,min=6,max=32"` // 新密码 NewPassword string `json:"newPassword" validate:"required,min=6,max=32"` // 新密码
} }
type CreateMenuRequest struct {
ParentId int64 `json:"parentId,optional"`
Name string `json:"name" validate:"required"`
Path string `json:"path,optional"`
Icon string `json:"icon,optional"`
Component string `json:"component,optional"`
Type string `json:"type,optional"`
SortOrder int `json:"sortOrder,optional"`
Visible *bool `json:"visible,optional"`
}
type CreateOrgRequest struct {
ParentId int64 `json:"parentId,optional"`
Name string `json:"name" validate:"required"`
Code string `json:"code" validate:"required"`
Leader string `json:"leader,optional"`
Phone string `json:"phone,optional"`
Email string `json:"email,optional"`
SortOrder int `json:"sortOrder,optional"`
}
type CreateRoleRequest struct {
Name string `json:"name" validate:"required"`
Code string `json:"code" validate:"required"`
Description string `json:"description,optional"`
SortOrder int `json:"sortOrder,optional"`
}
type CreateUserRequest struct { type CreateUserRequest struct {
Username string `json:"username" validate:"required,min=3,max=32"` // 用户名 Username string `json:"username" validate:"required,min=3,max=32"` // 用户名
Email string `json:"email" validate:"required,email"` // 邮箱 Email string `json:"email" validate:"required,email"` // 邮箱
@ -33,10 +67,66 @@ type DashboardStatsResponse struct {
UserGrowth int `json:"userGrowth"` // 用户增长率 UserGrowth int `json:"userGrowth"` // 用户增长率
} }
type DeleteFileRequest struct {
Id int64 `path:"id"`
}
type DeleteMenuRequest struct {
Id int64 `path:"id"`
}
type DeleteOrgRequest struct {
Id int64 `path:"id"`
}
type DeleteRoleRequest struct {
Id int64 `path:"id"`
}
type DeleteUserRequest struct { type DeleteUserRequest struct {
Id int64 `path:"id" validate:"required,min=1"` // 用户ID Id int64 `path:"id" validate:"required,min=1"` // 用户ID
} }
type FileInfo struct {
Id int64 `json:"id"`
Name string `json:"name"`
Key string `json:"key"`
Size int64 `json:"size"`
MimeType string `json:"mimeType"`
Category string `json:"category"`
IsPublic bool `json:"isPublic"`
UserId int64 `json:"userId"`
StorageType string `json:"storageType"`
Url string `json:"url"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
type FileListRequest struct {
Page int `form:"page,default=1"`
PageSize int `form:"pageSize,default=20"`
Keyword string `form:"keyword,optional"`
Category string `form:"category,optional"`
MimeType string `form:"mimeType,optional"`
}
type FileListResponse struct {
Total int64 `json:"total"`
List []FileInfo `json:"list"`
}
type FileUrlResponse struct {
Url string `json:"url"`
}
type GetFileRequest struct {
Id int64 `path:"id"`
}
type GetOrgMembersRequest struct {
Id int64 `path:"id"`
}
type GetProfileResponse struct { type GetProfileResponse struct {
Id int64 `json:"id"` // 用户ID Id int64 `json:"id"` // 用户ID
Username string `json:"username"` // 用户名 Username string `json:"username"` // 用户名
@ -49,6 +139,10 @@ type GetProfileResponse struct {
UpdatedAt string `json:"updatedAt"` // 更新时间 UpdatedAt string `json:"updatedAt"` // 更新时间
} }
type GetRoleMenusRequest struct {
Id int64 `path:"id"`
}
type GetUserRequest struct { type GetUserRequest struct {
Id int64 `path:"id" validate:"required,min=1"` // 用户ID Id int64 `path:"id" validate:"required,min=1"` // 用户ID
} }
@ -65,6 +159,61 @@ type LoginResponse struct {
Token string `json:"token"` // JWT Token Token string `json:"token"` // JWT Token
} }
type MenuItem struct {
Id int64 `json:"id"`
ParentId int64 `json:"parentId"`
Name string `json:"name"`
Path string `json:"path"`
Icon string `json:"icon"`
Component string `json:"component"`
Type string `json:"type"`
SortOrder int `json:"sortOrder"`
Visible bool `json:"visible"`
Status int `json:"status"`
Children []MenuItem `json:"children"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
type MenuListResponse struct {
List []MenuItem `json:"list"`
}
type OrgInfo struct {
Id int64 `json:"id"`
ParentId int64 `json:"parentId"`
Name string `json:"name"`
Code string `json:"code"`
Leader string `json:"leader"`
Phone string `json:"phone"`
Email string `json:"email"`
SortOrder int `json:"sortOrder"`
Status int `json:"status"`
MemberCount int64 `json:"memberCount"`
Children []OrgInfo `json:"children"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
type OrgListResponse struct {
List []OrgInfo `json:"list"`
}
type OrgMember struct {
UserId int64 `json:"userId"`
Username string `json:"username"`
Email string `json:"email"`
Phone string `json:"phone"`
RoleId int64 `json:"roleId"`
RoleName string `json:"roleName"`
RoleCode string `json:"roleCode"`
CreatedAt string `json:"createdAt"`
}
type OrgMembersResponse struct {
List []OrgMember `json:"list"`
}
type RecentActivitiesRequest struct { type RecentActivitiesRequest struct {
Limit int `form:"limit,default=10"` // 数量限制 Limit int `form:"limit,default=10"` // 数量限制
} }
@ -84,6 +233,11 @@ type RegisterRequest struct {
Email string `json:"email,optional"` // 邮箱(可选) Email string `json:"email,optional"` // 邮箱(可选)
} }
type RemoveOrgMemberRequest struct {
Id int64 `path:"id"`
UserId int64 `path:"userId"`
}
type Response struct { type Response struct {
Code int `json:"code"` // 状态码 Code int `json:"code"` // 状态码
Message string `json:"message"` // 消息 Message string `json:"message"` // 消息
@ -91,6 +245,77 @@ type Response struct {
Data interface{} `json:"data"` // 数据 Data interface{} `json:"data"` // 数据
} }
type RoleInfo struct {
Id int64 `json:"id"`
Name string `json:"name"`
Code string `json:"code"`
Description string `json:"description"`
IsSystem bool `json:"isSystem"`
SortOrder int `json:"sortOrder"`
Status int `json:"status"`
CreatedAt string `json:"createdAt"`
UpdatedAt string `json:"updatedAt"`
}
type RoleListResponse struct {
List []RoleInfo `json:"list"`
}
type RoleMenusResponse struct {
MenuIds []int64 `json:"menuIds"`
}
type SetRoleMenusRequest struct {
Id int64 `path:"id"`
MenuIds []int64 `json:"menuIds"`
}
type SwitchOrgRequest struct {
OrgId int64 `json:"orgId" validate:"required"`
}
type SwitchOrgResponse struct {
Token string `json:"token"`
}
type UpdateFileRequest struct {
Id int64 `path:"id"`
Name string `json:"name,optional"`
Category string `json:"category,optional"`
IsPublic *bool `json:"isPublic,optional"`
}
type UpdateMenuRequest struct {
Id int64 `path:"id"`
ParentId *int64 `json:"parentId,optional"`
Name string `json:"name,optional"`
Path string `json:"path,optional"`
Icon string `json:"icon,optional"`
Component string `json:"component,optional"`
Type string `json:"type,optional"`
SortOrder *int `json:"sortOrder,optional"`
Visible *bool `json:"visible,optional"`
Status *int `json:"status,optional"`
}
type UpdateOrgMemberRequest struct {
Id int64 `path:"id"`
UserId int64 `path:"userId"`
RoleId int64 `json:"roleId" validate:"required"`
}
type UpdateOrgRequest struct {
Id int64 `path:"id"`
ParentId *int64 `json:"parentId,optional"`
Name string `json:"name,optional"`
Code string `json:"code,optional"`
Leader string `json:"leader,optional"`
Phone string `json:"phone,optional"`
Email string `json:"email,optional"`
SortOrder *int `json:"sortOrder,optional"`
Status *int `json:"status,optional"`
}
type UpdateProfileRequest struct { type UpdateProfileRequest struct {
Username string `json:"username,optional" validate:"min=3,max=32"` // 用户名 Username string `json:"username,optional" validate:"min=3,max=32"` // 用户名
Phone string `json:"phone,optional"` // 手机号 Phone string `json:"phone,optional"` // 手机号
@ -98,6 +323,14 @@ type UpdateProfileRequest struct {
Bio string `json:"bio,optional"` // 个人简介 Bio string `json:"bio,optional"` // 个人简介
} }
type UpdateRoleRequest struct {
Id int64 `path:"id"`
Name string `json:"name,optional"`
Description string `json:"description,optional"`
SortOrder *int `json:"sortOrder,optional"`
Status *int `json:"status,optional"`
}
type UpdateUserRequest struct { type UpdateUserRequest struct {
Id int64 `path:"id" validate:"required,min=1"` // 用户ID Id int64 `path:"id" validate:"required,min=1"` // 用户ID
Username string `json:"username,optional"` // 用户名 Username string `json:"username,optional"` // 用户名
@ -132,3 +365,15 @@ type UserListResponse struct {
Total int64 `json:"total"` // 总数 Total int64 `json:"total"` // 总数
List []UserInfo `json:"list"` // 用户列表 List []UserInfo `json:"list"` // 用户列表
} }
type UserOrgInfo struct {
OrgId int64 `json:"orgId"`
OrgName string `json:"orgName"`
RoleId int64 `json:"roleId"`
RoleName string `json:"roleName"`
RoleCode string `json:"roleCode"`
}
type UserOrgsResponse struct {
List []UserOrgInfo `json:"list"`
}

Loading…
Cancel
Save