github.com/cloudwan/edgelq-sdk@v1.15.4/iam/access/v1/organization/organization.pb.api_access.go (about) 1 // Code generated by protoc-gen-goten-access 2 // Resource: Organization 3 // DO NOT EDIT!!! 4 5 package organization_access 6 7 import ( 8 "context" 9 10 "google.golang.org/grpc" 11 "google.golang.org/grpc/codes" 12 "google.golang.org/grpc/metadata" 13 "google.golang.org/grpc/status" 14 15 gotenaccess "github.com/cloudwan/goten-sdk/runtime/access" 16 gotenresource "github.com/cloudwan/goten-sdk/runtime/resource" 17 gotenfilter "github.com/cloudwan/goten-sdk/runtime/resource/filter" 18 "github.com/cloudwan/goten-sdk/types/watch_type" 19 20 organization_client "github.com/cloudwan/edgelq-sdk/iam/client/v1/organization" 21 organization "github.com/cloudwan/edgelq-sdk/iam/resources/v1/organization" 22 ) 23 24 var ( 25 _ = new(context.Context) 26 27 _ = metadata.MD{} 28 _ = new(grpc.ClientConnInterface) 29 _ = codes.NotFound 30 _ = status.Status{} 31 32 _ = new(gotenaccess.Watcher) 33 _ = watch_type.WatchType_STATEFUL 34 _ = new(gotenresource.ListQuery) 35 _ = gotenfilter.Eq 36 ) 37 38 type apiOrganizationAccess struct { 39 client organization_client.OrganizationServiceClient 40 } 41 42 func NewApiOrganizationAccess(client organization_client.OrganizationServiceClient) organization.OrganizationAccess { 43 return &apiOrganizationAccess{client: client} 44 } 45 46 func (a *apiOrganizationAccess) GetOrganization(ctx context.Context, query *organization.GetQuery, opts ...gotenresource.GetOption) (*organization.Organization, error) { 47 getOpts := gotenresource.MakeGetOptions(opts) 48 callHeaders := metadata.MD{} 49 if getOpts.GetSkipCache() { 50 callHeaders["cache-control"] = []string{"no-cache"} 51 } 52 callOpts := []grpc.CallOption{} 53 if len(callHeaders) > 0 { 54 callOpts = append(callOpts, grpc.Header(&callHeaders)) 55 } 56 if !query.Reference.IsFullyQualified() { 57 return nil, status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", query.Reference) 58 } 59 request := &organization_client.GetOrganizationRequest{ 60 Name: &query.Reference.Name, 61 FieldMask: query.Mask, 62 } 63 res, err := a.client.GetOrganization(ctx, request, callOpts...) 64 if err != nil { 65 return nil, err 66 } 67 query.Reference.Resolve(res) 68 return res, nil 69 } 70 71 func (a *apiOrganizationAccess) BatchGetOrganizations(ctx context.Context, refs []*organization.Reference, opts ...gotenresource.BatchGetOption) error { 72 batchGetOpts := gotenresource.MakeBatchGetOptions(opts) 73 callHeaders := metadata.MD{} 74 if batchGetOpts.GetSkipCache() { 75 callHeaders["cache-control"] = []string{"no-cache"} 76 } 77 callOpts := []grpc.CallOption{} 78 if len(callHeaders) > 0 { 79 callOpts = append(callOpts, grpc.Header(&callHeaders)) 80 } 81 asNames := make([]*organization.Name, 0, len(refs)) 82 for _, ref := range refs { 83 if !ref.IsFullyQualified() { 84 return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", ref) 85 } 86 asNames = append(asNames, &ref.Name) 87 } 88 request := &organization_client.BatchGetOrganizationsRequest{ 89 Names: asNames, 90 } 91 fieldMask := batchGetOpts.GetFieldMask(organization.GetDescriptor()) 92 if fieldMask != nil { 93 request.FieldMask = fieldMask.(*organization.Organization_FieldMask) 94 } 95 resp, err := a.client.BatchGetOrganizations(ctx, request, callOpts...) 96 if err != nil { 97 return err 98 } 99 resultMap := make(map[organization.Name]*organization.Organization, len(refs)) 100 for _, resolvedRes := range resp.GetOrganizations() { 101 resultMap[*resolvedRes.GetName()] = resolvedRes 102 } 103 for _, ref := range refs { 104 resolvedRes := resultMap[ref.Name] 105 if resolvedRes != nil { 106 ref.Resolve(resolvedRes) 107 } 108 } 109 if batchGetOpts.MustResolveAll() && len(resp.GetMissing()) > 0 { 110 return status.Errorf(codes.NotFound, "Number of references not found: %d", len(resp.GetMissing())) 111 } 112 return nil 113 } 114 115 func (a *apiOrganizationAccess) QueryOrganizations(ctx context.Context, query *organization.ListQuery, opts ...gotenresource.QueryOption) (*organization.QueryResultSnapshot, error) { 116 qOpts := gotenresource.MakeQueryOptions(opts) 117 callHeaders := metadata.MD{} 118 if qOpts.GetSkipCache() { 119 callHeaders["cache-control"] = []string{"no-cache"} 120 } 121 callOpts := []grpc.CallOption{} 122 if len(callHeaders) > 0 { 123 callOpts = append(callOpts, grpc.Header(&callHeaders)) 124 } 125 request := &organization_client.ListOrganizationsRequest{ 126 Filter: query.Filter, 127 FieldMask: query.Mask, 128 IncludePagingInfo: query.WithPagingInfo, 129 } 130 if query.Pager != nil { 131 request.PageSize = int32(query.Pager.Limit) 132 request.OrderBy = query.Pager.OrderBy 133 request.PageToken = query.Pager.Cursor 134 } 135 resp, err := a.client.ListOrganizations(ctx, request) 136 if err != nil { 137 return nil, err 138 } 139 return &organization.QueryResultSnapshot{ 140 Organizations: resp.Organizations, 141 NextPageCursor: resp.NextPageToken, 142 PrevPageCursor: resp.PrevPageToken, 143 TotalResultsCount: resp.TotalResultsCount, 144 CurrentOffset: resp.CurrentOffset, 145 }, nil 146 } 147 148 func (a *apiOrganizationAccess) SearchOrganizations(ctx context.Context, query *organization.SearchQuery, opts ...gotenresource.QueryOption) (*organization.QueryResultSnapshot, error) { 149 qOpts := gotenresource.MakeQueryOptions(opts) 150 callHeaders := metadata.MD{} 151 if qOpts.GetSkipCache() { 152 callHeaders["cache-control"] = []string{"no-cache"} 153 } 154 callOpts := []grpc.CallOption{} 155 if len(callHeaders) > 0 { 156 callOpts = append(callOpts, grpc.Header(&callHeaders)) 157 } 158 request := &organization_client.SearchOrganizationsRequest{ 159 Phrase: query.Phrase, 160 Filter: query.Filter, 161 FieldMask: query.Mask, 162 } 163 if query.Pager != nil { 164 request.PageSize = int32(query.Pager.Limit) 165 request.OrderBy = query.Pager.OrderBy 166 request.PageToken = query.Pager.Cursor 167 } 168 resp, err := a.client.SearchOrganizations(ctx, request, callOpts...) 169 if err != nil { 170 return nil, err 171 } 172 return &organization.QueryResultSnapshot{ 173 Organizations: resp.Organizations, 174 NextPageCursor: resp.NextPageToken, 175 PrevPageCursor: resp.PrevPageToken, 176 CurrentOffset: resp.CurrentOffset, 177 TotalResultsCount: resp.TotalResultsCount, 178 }, nil 179 } 180 181 func (a *apiOrganizationAccess) WatchOrganization(ctx context.Context, query *organization.GetQuery, observerCb func(*organization.OrganizationChange) error) error { 182 if !query.Reference.IsFullyQualified() { 183 return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", query.Reference) 184 } 185 request := &organization_client.WatchOrganizationRequest{ 186 Name: &query.Reference.Name, 187 FieldMask: query.Mask, 188 } 189 ctx, cancel := context.WithCancel(ctx) 190 defer cancel() 191 192 changesStream, initErr := a.client.WatchOrganization(ctx, request) 193 if initErr != nil { 194 return initErr 195 } 196 for { 197 resp, err := changesStream.Recv() 198 if err != nil { 199 return status.Errorf(status.Code(err), "watch recv error: %s", err) 200 } 201 change := resp.GetChange() 202 if err := observerCb(change); err != nil { 203 return err 204 } 205 } 206 } 207 208 func (a *apiOrganizationAccess) WatchOrganizations(ctx context.Context, query *organization.WatchQuery, observerCb func(*organization.QueryResultChange) error) error { 209 request := &organization_client.WatchOrganizationsRequest{ 210 Filter: query.Filter, 211 FieldMask: query.Mask, 212 MaxChunkSize: int32(query.ChunkSize), 213 Type: query.WatchType, 214 ResumeToken: query.ResumeToken, 215 StartingTime: query.StartingTime, 216 } 217 if query.Pager != nil { 218 request.OrderBy = query.Pager.OrderBy 219 request.PageSize = int32(query.Pager.Limit) 220 request.PageToken = query.Pager.Cursor 221 } 222 ctx, cancel := context.WithCancel(ctx) 223 defer cancel() 224 225 changesStream, initErr := a.client.WatchOrganizations(ctx, request) 226 if initErr != nil { 227 return initErr 228 } 229 for { 230 respChange, err := changesStream.Recv() 231 if err != nil { 232 return status.Errorf(status.Code(err), "watch recv error: %s", err) 233 } 234 changesWithPaging := &organization.QueryResultChange{ 235 Changes: respChange.OrganizationChanges, 236 IsCurrent: respChange.IsCurrent, 237 IsHardReset: respChange.IsHardReset, 238 IsSoftReset: respChange.IsSoftReset, 239 ResumeToken: respChange.ResumeToken, 240 SnapshotSize: respChange.SnapshotSize, 241 } 242 if respChange.PageTokenChange != nil { 243 changesWithPaging.PrevPageCursor = respChange.PageTokenChange.PrevPageToken 244 changesWithPaging.NextPageCursor = respChange.PageTokenChange.NextPageToken 245 } 246 if err := observerCb(changesWithPaging); err != nil { 247 return err 248 } 249 } 250 } 251 252 func (a *apiOrganizationAccess) SaveOrganization(ctx context.Context, res *organization.Organization, opts ...gotenresource.SaveOption) error { 253 saveOpts := gotenresource.MakeSaveOptions(opts) 254 var resp *organization.Organization 255 var err error 256 if !saveOpts.OnlyCreate() { 257 updateRequest := &organization_client.UpdateOrganizationRequest{ 258 Organization: res, 259 AllowMissing: !saveOpts.OnlyUpdate(), 260 } 261 if updateMask := saveOpts.GetUpdateMask(); updateMask != nil { 262 updateRequest.UpdateMask = updateMask.(*organization.Organization_FieldMask) 263 } 264 if mask, conditionalState := saveOpts.GetCAS(); mask != nil && conditionalState != nil { 265 updateRequest.Cas = &organization_client.UpdateOrganizationRequest_CAS{ 266 ConditionalState: conditionalState.(*organization.Organization), 267 FieldMask: mask.(*organization.Organization_FieldMask), 268 } 269 } 270 resp, err = a.client.UpdateOrganization(ctx, updateRequest) 271 if err != nil { 272 return err 273 } 274 } else { 275 createRequest := &organization_client.CreateOrganizationRequest{ 276 Organization: res, 277 } 278 resp, err = a.client.CreateOrganization(ctx, createRequest) 279 if err != nil { 280 return err 281 } 282 } 283 // Ensure object is updated - but in most shallow way possible 284 res.MakeDiffFieldMask(resp).Set(res, resp) 285 return nil 286 } 287 288 func (a *apiOrganizationAccess) DeleteOrganization(ctx context.Context, ref *organization.Reference, opts ...gotenresource.DeleteOption) error { 289 delOpts := gotenresource.MakeDeleteOptions(opts) 290 if !ref.IsFullyQualified() { 291 return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", ref) 292 } 293 request := &organization_client.DeleteOrganizationRequest{ 294 Name: &ref.Name, 295 AllowMissing: delOpts.AllowMissing(), 296 } 297 _, err := a.client.DeleteOrganization(ctx, request) 298 return err 299 } 300 301 func GetApiAccessBuilder() *gotenaccess.ApiAccessBuilder { 302 return gotenaccess.GetRegistry().FindApiAccessBuilder(organization.GetDescriptor()) 303 } 304 305 func init() { 306 gotenaccess.GetRegistry().RegisterApiAccessConstructor(organization.GetDescriptor(), func(cc grpc.ClientConnInterface) gotenresource.Access { 307 return organization.AsAnyCastAccess(NewApiOrganizationAccess(organization_client.NewOrganizationServiceClient(cc))) 308 }) 309 }