cloudgroupjoints.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package models
  15. import (
  16. "context"
  17. "database/sql"
  18. "yunion.io/x/jsonutils"
  19. "yunion.io/x/log"
  20. "yunion.io/x/pkg/errors"
  21. "yunion.io/x/pkg/util/reflectutils"
  22. "yunion.io/x/sqlchemy"
  23. api "yunion.io/x/onecloud/pkg/apis/cloudid"
  24. "yunion.io/x/onecloud/pkg/cloudcommon/db"
  25. "yunion.io/x/onecloud/pkg/httperrors"
  26. "yunion.io/x/onecloud/pkg/mcclient"
  27. "yunion.io/x/onecloud/pkg/util/stringutils2"
  28. )
  29. // +onecloud:swagger-gen-ignore
  30. type SCloudgroupJointsManager struct {
  31. db.SJointResourceBaseManager
  32. }
  33. func NewCloudgroupJointsManager(dt interface{}, tableName string, keyword string, keywordPlural string, slave db.IVirtualModelManager) SCloudgroupJointsManager {
  34. return SCloudgroupJointsManager{
  35. SJointResourceBaseManager: db.NewJointResourceBaseManager(
  36. dt,
  37. tableName,
  38. keyword,
  39. keywordPlural,
  40. CloudgroupManager,
  41. slave,
  42. ),
  43. }
  44. }
  45. // +onecloud:swagger-gen-ignore
  46. type SCloudgroupJointsBase struct {
  47. db.SJointResourceBase
  48. // 用户组Id
  49. CloudgroupId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required" index:"true" json:"cloudgroup_id"`
  50. }
  51. func (self *SCloudgroupJointsBase) getCloudgroup() (*SCloudgroup, error) {
  52. group, err := CloudgroupManager.FetchById(self.CloudgroupId)
  53. if err != nil {
  54. return nil, errors.Wrap(err, "FetchById")
  55. }
  56. return group.(*SCloudgroup), nil
  57. }
  58. func (manager *SCloudgroupJointsManager) GetMasterFieldName() string {
  59. return "cloudgroup_id"
  60. }
  61. func (manager *SCloudgroupJointsManager) FetchCustomizeColumns(
  62. ctx context.Context,
  63. groupCred mcclient.TokenCredential,
  64. query jsonutils.JSONObject,
  65. objs []interface{},
  66. fields stringutils2.SSortedStrings,
  67. isList bool,
  68. ) []api.CloudgroupJointResourceDetails {
  69. rows := make([]api.CloudgroupJointResourceDetails, len(objs))
  70. jointRows := manager.SJointResourceBaseManager.FetchCustomizeColumns(ctx, groupCred, query, objs, fields, isList)
  71. groupIds := make([]string, len(rows))
  72. for i := range rows {
  73. rows[i] = api.CloudgroupJointResourceDetails{
  74. JointResourceBaseDetails: jointRows[i],
  75. }
  76. var base *SCloudgroupJointsBase
  77. reflectutils.FindAnonymouStructPointer(objs[i], &base)
  78. if base != nil && len(base.CloudgroupId) > 0 {
  79. groupIds[i] = base.CloudgroupId
  80. }
  81. }
  82. groupIdMaps, err := db.FetchIdNameMap2(CloudgroupManager, groupIds)
  83. if err != nil {
  84. log.Errorf("db.FetchIdNameMap2 fail %s", err)
  85. return rows
  86. }
  87. for i := range rows {
  88. if name, ok := groupIdMaps[groupIds[i]]; ok {
  89. rows[i].Cloudgroup = name
  90. }
  91. }
  92. return rows
  93. }
  94. func (manager *SCloudgroupJointsManager) ListItemFilter(
  95. ctx context.Context,
  96. q *sqlchemy.SQuery,
  97. groupCred mcclient.TokenCredential,
  98. query api.CloudgroupJointsListInput,
  99. ) (*sqlchemy.SQuery, error) {
  100. var err error
  101. q, err = manager.SJointResourceBaseManager.ListItemFilter(ctx, q, groupCred, query.JointResourceBaseListInput)
  102. if err != nil {
  103. return nil, errors.Wrap(err, "SJointResourceBaseManager.ListItemFilter")
  104. }
  105. if len(query.Cloudgroup) > 0 {
  106. group, err := CloudgroupManager.FetchByIdOrName(ctx, nil, query.Cloudgroup)
  107. if err != nil {
  108. if err == sql.ErrNoRows {
  109. return nil, httperrors.NewResourceNotFoundError2("cloudgroup", query.Cloudgroup)
  110. }
  111. return nil, httperrors.NewGeneralError(err)
  112. }
  113. q = q.Equals("cloudgroup_id", group.GetId())
  114. }
  115. return q, nil
  116. }
  117. func (manager *SCloudgroupJointsManager) OrderByExtraFields(
  118. ctx context.Context,
  119. q *sqlchemy.SQuery,
  120. groupCred mcclient.TokenCredential,
  121. query api.CloudgroupJointsListInput,
  122. ) (*sqlchemy.SQuery, error) {
  123. var err error
  124. q, err = manager.SJointResourceBaseManager.OrderByExtraFields(ctx, q, groupCred, query.JointResourceBaseListInput)
  125. if err != nil {
  126. return nil, errors.Wrap(err, "SJointResourceBaseManager.OrderByExtraFields")
  127. }
  128. return q, nil
  129. }
  130. func (self *SCloudgroupJointsBase) ValidateUpdateData(
  131. ctx context.Context,
  132. groupCred mcclient.TokenCredential,
  133. query jsonutils.JSONObject,
  134. input api.CloudgroupJointBaseUpdateInput,
  135. ) (api.CloudgroupJointBaseUpdateInput, error) {
  136. var err error
  137. input.JointResourceBaseUpdateInput, err = self.SJointResourceBase.ValidateUpdateData(ctx, groupCred, query, input.JointResourceBaseUpdateInput)
  138. if err != nil {
  139. return input, errors.Wrap(err, "SJointResourceBase.ValidateUpdateData")
  140. }
  141. return input, nil
  142. }
  143. func (manager *SCloudgroupJointsManager) ListItemExportKeys(ctx context.Context,
  144. q *sqlchemy.SQuery,
  145. groupCred mcclient.TokenCredential,
  146. keys stringutils2.SSortedStrings,
  147. ) (*sqlchemy.SQuery, error) {
  148. var err error
  149. q, err = manager.SJointResourceBaseManager.ListItemExportKeys(ctx, q, groupCred, keys)
  150. if err != nil {
  151. return nil, errors.Wrap(err, "SJointResourceBaseManager.ListItemExportKeys")
  152. }
  153. return q, nil
  154. }