github.com/cloudwan/edgelq-sdk@v1.15.4/iam/access/v1alpha2/user/user.pb.api_access.go (about) 1 // Code generated by protoc-gen-goten-access 2 // Resource: User 3 // DO NOT EDIT!!! 4 5 package user_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 user_client "github.com/cloudwan/edgelq-sdk/iam/client/v1alpha2/user" 21 user "github.com/cloudwan/edgelq-sdk/iam/resources/v1alpha2/user" 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 apiUserAccess struct { 39 client user_client.UserServiceClient 40 } 41 42 func NewApiUserAccess(client user_client.UserServiceClient) user.UserAccess { 43 return &apiUserAccess{client: client} 44 } 45 46 func (a *apiUserAccess) GetUser(ctx context.Context, query *user.GetQuery, opts ...gotenresource.GetOption) (*user.User, 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 := &user_client.GetUserRequest{ 60 Name: &query.Reference.Name, 61 FieldMask: query.Mask, 62 } 63 res, err := a.client.GetUser(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 *apiUserAccess) BatchGetUsers(ctx context.Context, refs []*user.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([]*user.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 := &user_client.BatchGetUsersRequest{ 89 Names: asNames, 90 } 91 fieldMask := batchGetOpts.GetFieldMask(user.GetDescriptor()) 92 if fieldMask != nil { 93 request.FieldMask = fieldMask.(*user.User_FieldMask) 94 } 95 resp, err := a.client.BatchGetUsers(ctx, request, callOpts...) 96 if err != nil { 97 return err 98 } 99 resultMap := make(map[user.Name]*user.User, len(refs)) 100 for _, resolvedRes := range resp.GetUsers() { 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 *apiUserAccess) QueryUsers(ctx context.Context, query *user.ListQuery, opts ...gotenresource.QueryOption) (*user.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 := &user_client.ListUsersRequest{ 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.ListUsers(ctx, request) 136 if err != nil { 137 return nil, err 138 } 139 return &user.QueryResultSnapshot{ 140 Users: resp.Users, 141 NextPageCursor: resp.NextPageToken, 142 PrevPageCursor: resp.PrevPageToken, 143 TotalResultsCount: resp.TotalResultsCount, 144 CurrentOffset: resp.CurrentOffset, 145 }, nil 146 } 147 148 func (a *apiUserAccess) WatchUser(ctx context.Context, query *user.GetQuery, observerCb func(*user.UserChange) error) error { 149 if !query.Reference.IsFullyQualified() { 150 return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", query.Reference) 151 } 152 request := &user_client.WatchUserRequest{ 153 Name: &query.Reference.Name, 154 FieldMask: query.Mask, 155 } 156 ctx, cancel := context.WithCancel(ctx) 157 defer cancel() 158 159 changesStream, initErr := a.client.WatchUser(ctx, request) 160 if initErr != nil { 161 return initErr 162 } 163 for { 164 resp, err := changesStream.Recv() 165 if err != nil { 166 return status.Errorf(status.Code(err), "watch recv error: %s", err) 167 } 168 change := resp.GetChange() 169 if err := observerCb(change); err != nil { 170 return err 171 } 172 } 173 } 174 175 func (a *apiUserAccess) WatchUsers(ctx context.Context, query *user.WatchQuery, observerCb func(*user.QueryResultChange) error) error { 176 request := &user_client.WatchUsersRequest{ 177 Filter: query.Filter, 178 FieldMask: query.Mask, 179 MaxChunkSize: int32(query.ChunkSize), 180 Type: query.WatchType, 181 ResumeToken: query.ResumeToken, 182 StartingTime: query.StartingTime, 183 } 184 if query.Pager != nil { 185 request.OrderBy = query.Pager.OrderBy 186 request.PageSize = int32(query.Pager.Limit) 187 request.PageToken = query.Pager.Cursor 188 } 189 ctx, cancel := context.WithCancel(ctx) 190 defer cancel() 191 192 changesStream, initErr := a.client.WatchUsers(ctx, request) 193 if initErr != nil { 194 return initErr 195 } 196 for { 197 respChange, err := changesStream.Recv() 198 if err != nil { 199 return status.Errorf(status.Code(err), "watch recv error: %s", err) 200 } 201 changesWithPaging := &user.QueryResultChange{ 202 Changes: respChange.UserChanges, 203 IsCurrent: respChange.IsCurrent, 204 IsHardReset: respChange.IsHardReset, 205 IsSoftReset: respChange.IsSoftReset, 206 ResumeToken: respChange.ResumeToken, 207 SnapshotSize: respChange.SnapshotSize, 208 } 209 if respChange.PageTokenChange != nil { 210 changesWithPaging.PrevPageCursor = respChange.PageTokenChange.PrevPageToken 211 changesWithPaging.NextPageCursor = respChange.PageTokenChange.NextPageToken 212 } 213 if err := observerCb(changesWithPaging); err != nil { 214 return err 215 } 216 } 217 } 218 219 func (a *apiUserAccess) SaveUser(ctx context.Context, res *user.User, opts ...gotenresource.SaveOption) error { 220 saveOpts := gotenresource.MakeSaveOptions(opts) 221 var resp *user.User 222 var err error 223 if !saveOpts.OnlyCreate() { 224 updateRequest := &user_client.UpdateUserRequest{ 225 User: res, 226 AllowMissing: !saveOpts.OnlyUpdate(), 227 } 228 if updateMask := saveOpts.GetUpdateMask(); updateMask != nil { 229 updateRequest.UpdateMask = updateMask.(*user.User_FieldMask) 230 } 231 if mask, conditionalState := saveOpts.GetCAS(); mask != nil && conditionalState != nil { 232 updateRequest.Cas = &user_client.UpdateUserRequest_CAS{ 233 ConditionalState: conditionalState.(*user.User), 234 FieldMask: mask.(*user.User_FieldMask), 235 } 236 } 237 resp, err = a.client.UpdateUser(ctx, updateRequest) 238 if err != nil { 239 return err 240 } 241 } else { 242 createRequest := &user_client.CreateUserRequest{ 243 User: res, 244 } 245 resp, err = a.client.CreateUser(ctx, createRequest) 246 if err != nil { 247 return err 248 } 249 } 250 // Ensure object is updated - but in most shallow way possible 251 res.MakeDiffFieldMask(resp).Set(res, resp) 252 return nil 253 } 254 255 func (a *apiUserAccess) DeleteUser(ctx context.Context, ref *user.Reference, opts ...gotenresource.DeleteOption) error { 256 delOpts := gotenresource.MakeDeleteOptions(opts) 257 if !ref.IsFullyQualified() { 258 return status.Errorf(codes.InvalidArgument, "Reference %s is not fully specified", ref) 259 } 260 request := &user_client.DeleteUserRequest{ 261 Name: &ref.Name, 262 AllowMissing: delOpts.AllowMissing(), 263 } 264 _, err := a.client.DeleteUser(ctx, request) 265 return err 266 } 267 268 func GetApiAccessBuilder() *gotenaccess.ApiAccessBuilder { 269 return gotenaccess.GetRegistry().FindApiAccessBuilder(user.GetDescriptor()) 270 } 271 272 func init() { 273 gotenaccess.GetRegistry().RegisterApiAccessConstructor(user.GetDescriptor(), func(cc grpc.ClientConnInterface) gotenresource.Access { 274 return user.AsAnyCastAccess(NewApiUserAccess(user_client.NewUserServiceClient(cc))) 275 }) 276 }