Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
krrrr38 committed Aug 22, 2024
1 parent 4157cc9 commit 8624ebe
Show file tree
Hide file tree
Showing 4 changed files with 584 additions and 0 deletions.
73 changes: 73 additions & 0 deletions internal/services/user/user/user_crud.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package user

import (
"context"
"fmt"

"github.com/folio-sec/terraform-provider-zoom/generated/api/zoomuser"
"github.com/folio-sec/terraform-provider-zoom/internal/util"
"github.com/hashicorp/terraform-plugin-framework/types"
"github.com/samber/lo"
)

func newCrud(client *zoomuser.Client) *crud {
return &crud{
client: client,
}
}

type crud struct {
client *zoomuser.Client
}

func (c *crud) read(ctx context.Context, dto *readQueryDto) (*readDto, error) {
var user []*readDtoUser
nextPageToken := zoomuser.OptString{}
for {
ret, err := c.client.Users(ctx, zoomuser.UsersParams{
PageSize: zoomuser.NewOptInt(300), // max 300
NextPageToken: nextPageToken,
Status: util.ToUserOptString(dto.status),
RoleID: util.ToUserOptString(dto.roleID),
PageNumber: util.ToUserOptString(dto.pageNumber),
IncludeFields: util.ToUserOptString(dto.includeFields),
License: util.ToUserOptString(dto.license),
})
if err != nil {
return nil, fmt.Errorf("unable to read user: %v", err)
}
user = append(user, lo.Map(ret.Users, func(item zoomuser.UsersOKUsersItem, _index int) *readDtoUser {
return &readDtoUser{
id: util.FromOptString(item.ID),
email: types.StringValue(item.Email),
customAttributes: util.FromOptString(item.CustomAttributes),
dept: util.FromOptString(item.Dept),
employeeUniqueID: util.FromOptString(item.EmployeeUniqueID),
firstName: util.FromOptString(item.FirstName),
lastName: util.FromOptString(item.LastName),
groupIds: lo.Map(item.GroupIds, func(item string, index int) types.String {
return types.StringValue(item)
}),
hostKey: util.FromOptString(item.HostKey),
imGroupIds: lo.Map(item.ImGroupIds, func(item string, index int) types.String {
return types.StringValue(item)
}),
planUnitedType: util.FromOptString(item.PlanUnitedType),
pmi: util.FromOptInt64(item.Pmi),
roleID: util.FromOptString(item.RoleID),
status: util.FromOptString(item.Status),
typ: types.Int32Value(int32(item.Type)),
verified: util.FromOptInt(item.Verified),
displayName: util.FromOptString(item.DisplayName),
}
})...)
if ret.NextPageToken.Value == "" {
break
}
nextPageToken = ret.NextPageToken
}

return &readDto{
user: user,
}, nil
}
41 changes: 41 additions & 0 deletions internal/services/user/user/user_dto.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package user

import "github.com/hashicorp/terraform-plugin-framework/types"

type readQueryDto struct {
status types.String
roleID types.String
pageNumber types.String
includeFields types.String
license types.String
}

type readDto struct {
user []*readDtoUser
}

type readDtoUser struct {
id types.String
email types.String
customAttributes []*readDtoUserCustomAttributes
dept types.String
employeeUniqueID types.String
firstName types.String
lastName types.String
groupIds []types.String
hostKey types.String
imGroupIds []types.String
planUnitedType types.String
pmi types.Int64
roleID types.String
status types.String
typ types.Int32
verified types.Int32
displayName types.String
}

type readDtoUserCustomAttributes struct {
key types.String
name types.String
value types.String
}
Loading

0 comments on commit 8624ebe

Please sign in to comment.