b_role.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. // NewRole 创建Role
  10. func NewRole(
  11. mRole model.IRole,
  12. mRoleMenu model.IRoleMenu,
  13. mTrans model.ITrans,
  14. mMenu model.IMenu,
  15. ) *Role {
  16. return &Role{
  17. RoleModel: mRole,
  18. roleMenuModel: mRoleMenu,
  19. transModel: mTrans,
  20. menuModel: mMenu,
  21. }
  22. }
  23. // Role 创建Role对象
  24. type Role struct {
  25. RoleModel model.IRole
  26. roleMenuModel model.IRoleMenu
  27. transModel model.ITrans
  28. menuModel model.IMenu
  29. }
  30. // Query 查询数据
  31. func (a *Role) Query(ctx context.Context, params schema.RoleQueryParam, opts ...schema.RoleQueryOptions) (*schema.RoleQueryResult, error) {
  32. return a.RoleModel.Query(ctx, params, opts...)
  33. }
  34. // Get 查询指定数据
  35. func (a *Role) Get(ctx context.Context, recordID string, opts ...schema.RoleQueryOptions) (*schema.Role, error) {
  36. item, err := a.RoleModel.Get(ctx, recordID, opts...)
  37. if err != nil {
  38. return nil, err
  39. } else if item == nil {
  40. return nil, errors.ErrNotFound
  41. }
  42. roleMenu, err := a.roleMenuModel.Query(ctx, schema.RoleMenuQueryParam{RoleId: item.RecordID})
  43. if err != nil {
  44. return nil, err
  45. }
  46. menu, err := a.menuModel.Query(ctx, schema.MenuQueryParam{RecordIDs: roleMenu.Data.ToMenuIds()})
  47. if err != nil {
  48. return nil, err
  49. }
  50. item.Menus = menu.Data
  51. return item, nil
  52. }
  53. func (a *Role) checkCode(ctx context.Context, code string) error {
  54. result, err := a.RoleModel.Query(ctx, schema.RoleQueryParam{
  55. Code: code,
  56. }, schema.RoleQueryOptions{
  57. PageParam: &schema.PaginationParam{PageSize: -1},
  58. })
  59. if err != nil {
  60. return err
  61. } else if result.PageResult.Total > 0 {
  62. return errors.New400Response("编号已经存在")
  63. }
  64. return nil
  65. }
  66. func (a *Role) getUpdate(ctx context.Context, recordID string) (*schema.Role, error) {
  67. return a.Get(ctx, recordID)
  68. }
  69. // Create 创建数据
  70. func (a *Role) Create(ctx context.Context, item schema.Role) error {
  71. item.RecordID = guid.S()
  72. err := ExecTrans(ctx, a.transModel, func(ctx context.Context) error {
  73. if len(item.Menus) > 0 {
  74. for _, menu := range item.Menus {
  75. err := a.roleMenuModel.Create(ctx, schema.RoleMenu{
  76. RecordId: guid.S(),
  77. RoleId: item.RecordID,
  78. MenuId: menu.RecordID,
  79. })
  80. if err != nil {
  81. return err
  82. }
  83. }
  84. }
  85. return a.RoleModel.Create(ctx, item)
  86. })
  87. return err
  88. }
  89. // Update 更新数据
  90. func (a *Role) Update(ctx context.Context, recordID string, item schema.Role) error {
  91. oldItem, err := a.RoleModel.Get(ctx, recordID)
  92. if err != nil {
  93. return err
  94. } else if oldItem == nil {
  95. return errors.ErrNotFound
  96. }
  97. err = ExecTrans(ctx, a.transModel, func(ctx context.Context) error {
  98. err = a.roleMenuModel.DeleteByRoleId(ctx, recordID)
  99. if len(item.Menus) > 0 {
  100. for _, menu := range item.Menus {
  101. err := a.roleMenuModel.Create(ctx, schema.RoleMenu{
  102. RecordId: guid.S(),
  103. RoleId: oldItem.RecordID,
  104. MenuId: menu.RecordID,
  105. })
  106. if err != nil {
  107. return err
  108. }
  109. }
  110. }
  111. return a.RoleModel.Update(ctx, recordID, item)
  112. })
  113. return err
  114. }
  115. // Delete 删除数据
  116. func (a *Role) Delete(ctx context.Context, recordID string) error {
  117. oldItem, err := a.RoleModel.Get(ctx, recordID)
  118. if err != nil {
  119. return err
  120. } else if oldItem == nil {
  121. return errors.ErrNotFound
  122. }
  123. err = ExecTrans(ctx, a.transModel, func(ctx context.Context) error {
  124. err = a.roleMenuModel.DeleteByRoleId(ctx, recordID)
  125. if err != nil {
  126. return err
  127. }
  128. return a.RoleModel.Delete(ctx, recordID)
  129. })
  130. return err
  131. }