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  }