package workos
import (
"context"
"encoding/json"
"fmt"
"net/url"
)
type OrganizationMembershipService struct {
client *Client
}
type OrganizationMembershipRole interface {
isOrganizationMembershipRole ()
applyToBody (map [string ]any )
}
type OrganizationMembershipRoleSingle struct {
Slug string
}
func (p OrganizationMembershipRoleSingle ) isOrganizationMembershipRole () {}
func (p OrganizationMembershipRoleSingle ) applyToBody (m map [string ]any ) {
m ["role_slug" ] = p .Slug
}
type OrganizationMembershipRoleMultiple struct {
Slugs []string
}
func (p OrganizationMembershipRoleMultiple ) isOrganizationMembershipRole () {}
func (p OrganizationMembershipRoleMultiple ) applyToBody (m map [string ]any ) {
m ["role_slugs" ] = p .Slugs
}
type OrganizationMembershipListParams struct {
PaginationParams
OrganizationID *string `url:"organization_id,omitempty" json:"-"`
Statuses []UserManagementOrganizationMembershipStatuses `url:"statuses,omitempty" json:"-"`
UserID *string `url:"user_id,omitempty" json:"-"`
}
func (s *OrganizationMembershipService ) List (ctx context .Context , params *OrganizationMembershipListParams , opts ...RequestOption ) *Iterator [UserOrganizationMembership ] {
return newIterator [UserOrganizationMembership ](ctx , s .client , "GET" , "/user_management/organization_memberships" , params , "after" , "data" , opts , map [string ]string {"limit" : "10" , "order" : "desc" })
}
type OrganizationMembershipCreateParams struct {
UserID string `json:"user_id" url:"-"`
OrganizationID string `json:"organization_id" url:"-"`
Role OrganizationMembershipRole `url:"-" json:"-"`
}
func (p OrganizationMembershipCreateParams ) MarshalJSON () ([]byte , error ) {
type Alias OrganizationMembershipCreateParams
data , err := json .Marshal (Alias (p ))
if err != nil {
return nil , err
}
if p .Role == nil {
return data , nil
}
var m map [string ]any
if err := json .Unmarshal (data , &m ); err != nil {
return nil , err
}
if p .Role != nil {
p .Role .applyToBody (m )
}
return json .Marshal (m )
}
func (s *OrganizationMembershipService ) Create (ctx context .Context , params *OrganizationMembershipCreateParams , opts ...RequestOption ) (*OrganizationMembership , error ) {
var result OrganizationMembership
_ , err := s .client .request (ctx , "POST" , "/user_management/organization_memberships" , nil , params , &result , opts )
if err != nil {
return nil , err
}
return &result , nil
}
func (s *OrganizationMembershipService ) Get (ctx context .Context , id string , opts ...RequestOption ) (*UserOrganizationMembership , error ) {
var result UserOrganizationMembership
_ , err := s .client .request (ctx , "GET" , fmt .Sprintf ("/user_management/organization_memberships/%s" , url .PathEscape (id )), nil , nil , &result , opts )
if err != nil {
return nil , err
}
return &result , nil
}
type OrganizationMembershipUpdateParams struct {
Role OrganizationMembershipRole `url:"-" json:"-"`
}
func (p OrganizationMembershipUpdateParams ) MarshalJSON () ([]byte , error ) {
type Alias OrganizationMembershipUpdateParams
data , err := json .Marshal (Alias (p ))
if err != nil {
return nil , err
}
if p .Role == nil {
return data , nil
}
var m map [string ]any
if err := json .Unmarshal (data , &m ); err != nil {
return nil , err
}
if p .Role != nil {
p .Role .applyToBody (m )
}
return json .Marshal (m )
}
func (s *OrganizationMembershipService ) Update (ctx context .Context , id string , params *OrganizationMembershipUpdateParams , opts ...RequestOption ) (*UserOrganizationMembership , error ) {
var result UserOrganizationMembership
_ , err := s .client .request (ctx , "PUT" , fmt .Sprintf ("/user_management/organization_memberships/%s" , url .PathEscape (id )), nil , params , &result , opts )
if err != nil {
return nil , err
}
return &result , nil
}
func (s *OrganizationMembershipService ) Delete (ctx context .Context , id string , opts ...RequestOption ) error {
_ , err := s .client .request (ctx , "DELETE" , fmt .Sprintf ("/user_management/organization_memberships/%s" , url .PathEscape (id )), nil , nil , nil , opts )
return err
}
func (s *OrganizationMembershipService ) Deactivate (ctx context .Context , id string , opts ...RequestOption ) (*OrganizationMembership , error ) {
var result OrganizationMembership
_ , err := s .client .request (ctx , "PUT" , fmt .Sprintf ("/user_management/organization_memberships/%s/deactivate" , url .PathEscape (id )), nil , nil , &result , opts )
if err != nil {
return nil , err
}
return &result , nil
}
func (s *OrganizationMembershipService ) Reactivate (ctx context .Context , id string , opts ...RequestOption ) (*UserOrganizationMembership , error ) {
var result UserOrganizationMembership
_ , err := s .client .request (ctx , "PUT" , fmt .Sprintf ("/user_management/organization_memberships/%s/reactivate" , url .PathEscape (id )), nil , nil , &result , opts )
if err != nil {
return nil , err
}
return &result , nil
}
type OrganizationMembershipListGroupsParams struct {
PaginationParams
}
func (s *OrganizationMembershipService ) ListGroups (ctx context .Context , omID string , params *OrganizationMembershipListGroupsParams , opts ...RequestOption ) *Iterator [Group ] {
return newIterator [Group ](ctx , s .client , "GET" , fmt .Sprintf ("/user_management/organization_memberships/%s/groups" , url .PathEscape (omID )), params , "after" , "data" , opts , map [string ]string {"limit" : "10" , "order" : "desc" })
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .