b_menu.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. package internal
  2. import (
  3. "context"
  4. "github.com/gogf/gf/util/guid"
  5. "yx-dataset-server/app/errors"
  6. "yx-dataset-server/app/model"
  7. "yx-dataset-server/app/schema"
  8. )
  9. // NewMenu 创建Menu
  10. func NewMenu(
  11. mMenu model.IMenu,
  12. mTrans model.ITrans,
  13. mRoleMenu model.IRoleMenu,
  14. mUser model.IUser,
  15. ) *Menu {
  16. return &Menu{
  17. MenuModel: mMenu,
  18. transModel: mTrans,
  19. roleMenuModel: mRoleMenu,
  20. userModel: mUser,
  21. }
  22. }
  23. // Menu 创建Menu对象
  24. type Menu struct {
  25. MenuModel model.IMenu
  26. transModel model.ITrans
  27. roleMenuModel model.IRoleMenu
  28. userModel model.IUser
  29. }
  30. // Query 查询数据
  31. func (a *Menu) Query(ctx context.Context, params schema.MenuQueryParam, opts ...schema.MenuQueryOptions) (*schema.MenuQueryResult, error) {
  32. var menuQueryParam schema.MenuQueryParam
  33. userID := GetUserID(ctx)
  34. user, err := a.userModel.Get(ctx, userID)
  35. if err != nil {
  36. return nil, err
  37. }
  38. if !CheckIsRootUser(ctx) {
  39. roleMenu, err := a.roleMenuModel.Query(ctx, schema.RoleMenuQueryParam{RoleId: user.RoleId})
  40. if err != nil {
  41. return nil, err
  42. }
  43. menuQueryParam.RecordIDs = roleMenu.Data.ToMenuIds()
  44. }
  45. menu, err := a.MenuModel.Query(ctx, menuQueryParam)
  46. if err != nil {
  47. return nil, err
  48. }
  49. return menu, nil
  50. }
  51. // QueryTree 查询数据
  52. func (a *Menu) QueryTree(ctx context.Context, params schema.MenuQueryParam, opts ...schema.MenuQueryOptions) (schema.MenuTrees, error) {
  53. var menuQueryParam schema.MenuQueryParam
  54. userID := GetUserID(ctx)
  55. user, err := a.userModel.Get(ctx, userID)
  56. if err != nil {
  57. return nil, err
  58. }
  59. if !CheckIsRootUser(ctx) {
  60. roleMenu, err := a.roleMenuModel.Query(ctx, schema.RoleMenuQueryParam{RoleId: user.RoleId})
  61. if err != nil {
  62. return nil, err
  63. }
  64. menuQueryParam.RecordIDs = roleMenu.Data.ToMenuIds()
  65. }
  66. menu, err := a.MenuModel.Query(ctx, menuQueryParam)
  67. if err != nil {
  68. return nil, err
  69. }
  70. return schema.ToTree(menu.Data.ToTrees(), ""), nil
  71. }
  72. // Get 查询指定数据
  73. func (a *Menu) Get(ctx context.Context, recordID string, opts ...schema.MenuQueryOptions) (*schema.Menu, error) {
  74. item, err := a.MenuModel.Get(ctx, recordID, opts...)
  75. if err != nil {
  76. return nil, err
  77. } else if item == nil {
  78. return nil, errors.ErrNotFound
  79. }
  80. return item, nil
  81. }
  82. func (a *Menu) getUpdate(ctx context.Context, recordID string) (*schema.Menu, error) {
  83. return a.Get(ctx, recordID)
  84. }
  85. // Create 创建数据
  86. func (a *Menu) Create(ctx context.Context, item schema.Menu) error {
  87. item.RecordID = guid.S()
  88. sequence, err := a.MenuModel.GetMaxSequence(ctx)
  89. if err != nil {
  90. return err
  91. }
  92. if sequence > 0 {
  93. item.Sequence = sequence + 1
  94. }
  95. return a.MenuModel.Create(ctx, item)
  96. }
  97. // Update 更新数据
  98. func (a *Menu) Update(ctx context.Context, recordID string, item schema.Menu) error {
  99. oldItem, err := a.MenuModel.Get(ctx, recordID)
  100. if err != nil {
  101. return err
  102. } else if oldItem == nil {
  103. return errors.ErrNotFound
  104. }
  105. return a.MenuModel.Update(ctx, recordID, item)
  106. }
  107. // Delete 删除数据
  108. func (a *Menu) Delete(ctx context.Context, recordID string) error {
  109. oldItem, err := a.MenuModel.Get(ctx, recordID)
  110. if err != nil {
  111. return err
  112. } else if oldItem == nil {
  113. return errors.ErrNotFound
  114. }
  115. return a.MenuModel.Delete(ctx, recordID)
  116. }
  117. func (a *Menu) UpdateSequence(ctx context.Context, recordID string, sequence int) error {
  118. item, err := a.MenuModel.Get(ctx, recordID)
  119. if err != nil {
  120. return err
  121. } else if item == nil {
  122. return errors.ErrNotFound
  123. }
  124. err = ExecTrans(ctx, a.transModel, func(ctx context.Context) error {
  125. err = a.MenuModel.UpdateBatchSequenceMinus(ctx, item.Sequence, sequence)
  126. if err != nil {
  127. return err
  128. }
  129. return a.MenuModel.UpdateSequence(ctx, recordID, sequence)
  130. })
  131. return err
  132. }
  133. // UpdateStatus 更新状态
  134. func (a *Menu) UpdateStatus(ctx context.Context, recordID string, status int) error {
  135. oldItem, err := a.MenuModel.Get(ctx, recordID)
  136. if err != nil {
  137. return err
  138. } else if oldItem == nil {
  139. return errors.ErrNotFound
  140. }
  141. return a.MenuModel.UpdateStatus(ctx, recordID, status)
  142. }