organizations.go 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. // Copyright 2020-2021 InfluxData, Inc. All rights reserved.
  2. // Use of this source code is governed by MIT
  3. // license that can be found in the LICENSE file.
  4. package api
  5. import (
  6. "context"
  7. "fmt"
  8. "github.com/influxdata/influxdb-client-go/v2/domain"
  9. )
  10. // OrganizationsAPI provides methods for managing Organizations in a InfluxDB server.
  11. type OrganizationsAPI interface {
  12. // GetOrganizations returns all organizations.
  13. // GetOrganizations supports PagingOptions: Offset, Limit, Descending
  14. GetOrganizations(ctx context.Context, pagingOptions ...PagingOption) (*[]domain.Organization, error)
  15. // FindOrganizationByName returns an organization found using orgName.
  16. FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error)
  17. // FindOrganizationByID returns an organization found using orgID.
  18. FindOrganizationByID(ctx context.Context, orgID string) (*domain.Organization, error)
  19. // FindOrganizationsByUserID returns organizations an user with userID belongs to.
  20. // FindOrganizationsByUserID supports PagingOptions: Offset, Limit, Descending
  21. FindOrganizationsByUserID(ctx context.Context, userID string, pagingOptions ...PagingOption) (*[]domain.Organization, error)
  22. // CreateOrganization creates new organization.
  23. CreateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error)
  24. // CreateOrganizationWithName creates new organization with orgName and with status active.
  25. CreateOrganizationWithName(ctx context.Context, orgName string) (*domain.Organization, error)
  26. // UpdateOrganization updates organization.
  27. UpdateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error)
  28. // DeleteOrganization deletes an organization.
  29. DeleteOrganization(ctx context.Context, org *domain.Organization) error
  30. // DeleteOrganizationWithID deletes an organization with orgID.
  31. DeleteOrganizationWithID(ctx context.Context, orgID string) error
  32. // GetMembers returns members of an organization.
  33. GetMembers(ctx context.Context, org *domain.Organization) (*[]domain.ResourceMember, error)
  34. // GetMembersWithID returns members of an organization with orgID.
  35. GetMembersWithID(ctx context.Context, orgID string) (*[]domain.ResourceMember, error)
  36. // AddMember adds a member to an organization.
  37. AddMember(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceMember, error)
  38. // AddMemberWithID adds a member with id memberID to an organization with orgID.
  39. AddMemberWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceMember, error)
  40. // RemoveMember removes a member from an organization.
  41. RemoveMember(ctx context.Context, org *domain.Organization, user *domain.User) error
  42. // RemoveMemberWithID removes a member with id memberID from an organization with orgID.
  43. RemoveMemberWithID(ctx context.Context, orgID, memberID string) error
  44. // GetOwners returns owners of an organization.
  45. GetOwners(ctx context.Context, org *domain.Organization) (*[]domain.ResourceOwner, error)
  46. // GetOwnersWithID returns owners of an organization with orgID.
  47. GetOwnersWithID(ctx context.Context, orgID string) (*[]domain.ResourceOwner, error)
  48. // AddOwner adds an owner to an organization.
  49. AddOwner(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceOwner, error)
  50. // AddOwnerWithID adds an owner with id memberID to an organization with orgID.
  51. AddOwnerWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceOwner, error)
  52. // RemoveOwner removes an owner from an organization.
  53. RemoveOwner(ctx context.Context, org *domain.Organization, user *domain.User) error
  54. // RemoveOwnerWithID removes an owner with id memberID from an organization with orgID.
  55. RemoveOwnerWithID(ctx context.Context, orgID, memberID string) error
  56. }
  57. // organizationsAPI implements OrganizationsAPI
  58. type organizationsAPI struct {
  59. apiClient *domain.Client
  60. }
  61. // NewOrganizationsAPI creates new instance of OrganizationsAPI
  62. func NewOrganizationsAPI(apiClient *domain.Client) OrganizationsAPI {
  63. return &organizationsAPI{
  64. apiClient: apiClient,
  65. }
  66. }
  67. func (o *organizationsAPI) getOrganizations(ctx context.Context, params *domain.GetOrgsParams, pagingOptions ...PagingOption) (*[]domain.Organization, error) {
  68. options := defaultPaging()
  69. for _, opt := range pagingOptions {
  70. opt(options)
  71. }
  72. if options.limit > 0 {
  73. params.Limit = &options.limit
  74. }
  75. params.Offset = &options.offset
  76. params.Descending = &options.descending
  77. response, err := o.apiClient.GetOrgs(ctx, params)
  78. if err != nil {
  79. return nil, err
  80. }
  81. return response.Orgs, nil
  82. }
  83. func (o *organizationsAPI) GetOrganizations(ctx context.Context, pagingOptions ...PagingOption) (*[]domain.Organization, error) {
  84. params := &domain.GetOrgsParams{}
  85. return o.getOrganizations(ctx, params, pagingOptions...)
  86. }
  87. func (o *organizationsAPI) FindOrganizationByName(ctx context.Context, orgName string) (*domain.Organization, error) {
  88. params := &domain.GetOrgsParams{Org: &orgName}
  89. organizations, err := o.getOrganizations(ctx, params)
  90. if err != nil {
  91. return nil, err
  92. }
  93. if organizations != nil && len(*organizations) > 0 {
  94. return &(*organizations)[0], nil
  95. }
  96. return nil, fmt.Errorf("organization '%s' not found", orgName)
  97. }
  98. func (o *organizationsAPI) FindOrganizationByID(ctx context.Context, orgID string) (*domain.Organization, error) {
  99. params := &domain.GetOrgsIDAllParams{
  100. OrgID: orgID,
  101. }
  102. return o.apiClient.GetOrgsID(ctx, params)
  103. }
  104. func (o *organizationsAPI) FindOrganizationsByUserID(ctx context.Context, userID string, pagingOptions ...PagingOption) (*[]domain.Organization, error) {
  105. params := &domain.GetOrgsParams{UserID: &userID}
  106. return o.getOrganizations(ctx, params, pagingOptions...)
  107. }
  108. func (o *organizationsAPI) CreateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) {
  109. params := &domain.PostOrgsAllParams{
  110. Body: domain.PostOrgsJSONRequestBody{
  111. Name: org.Name,
  112. Description: org.Description,
  113. },
  114. }
  115. return o.apiClient.PostOrgs(ctx, params)
  116. }
  117. func (o *organizationsAPI) CreateOrganizationWithName(ctx context.Context, orgName string) (*domain.Organization, error) {
  118. status := domain.OrganizationStatusActive
  119. org := &domain.Organization{Name: orgName, Status: &status}
  120. return o.CreateOrganization(ctx, org)
  121. }
  122. func (o *organizationsAPI) DeleteOrganization(ctx context.Context, org *domain.Organization) error {
  123. return o.DeleteOrganizationWithID(ctx, *org.Id)
  124. }
  125. func (o *organizationsAPI) DeleteOrganizationWithID(ctx context.Context, orgID string) error {
  126. params := &domain.DeleteOrgsIDAllParams{
  127. OrgID: orgID,
  128. }
  129. return o.apiClient.DeleteOrgsID(ctx, params)
  130. }
  131. func (o *organizationsAPI) UpdateOrganization(ctx context.Context, org *domain.Organization) (*domain.Organization, error) {
  132. params := &domain.PatchOrgsIDAllParams{
  133. Body: domain.PatchOrgsIDJSONRequestBody{
  134. Name: &org.Name,
  135. Description: org.Description,
  136. },
  137. OrgID: *org.Id,
  138. }
  139. return o.apiClient.PatchOrgsID(ctx, params)
  140. }
  141. func (o *organizationsAPI) GetMembers(ctx context.Context, org *domain.Organization) (*[]domain.ResourceMember, error) {
  142. return o.GetMembersWithID(ctx, *org.Id)
  143. }
  144. func (o *organizationsAPI) GetMembersWithID(ctx context.Context, orgID string) (*[]domain.ResourceMember, error) {
  145. params := &domain.GetOrgsIDMembersAllParams{
  146. OrgID: orgID,
  147. }
  148. response, err := o.apiClient.GetOrgsIDMembers(ctx, params)
  149. if err != nil {
  150. return nil, err
  151. }
  152. return response.Users, nil
  153. }
  154. func (o *organizationsAPI) AddMember(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceMember, error) {
  155. return o.AddMemberWithID(ctx, *org.Id, *user.Id)
  156. }
  157. func (o *organizationsAPI) AddMemberWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceMember, error) {
  158. params := &domain.PostOrgsIDMembersAllParams{
  159. Body: domain.PostOrgsIDMembersJSONRequestBody{Id: memberID},
  160. OrgID: orgID,
  161. }
  162. return o.apiClient.PostOrgsIDMembers(ctx, params)
  163. }
  164. func (o *organizationsAPI) RemoveMember(ctx context.Context, org *domain.Organization, user *domain.User) error {
  165. return o.RemoveMemberWithID(ctx, *org.Id, *user.Id)
  166. }
  167. func (o *organizationsAPI) RemoveMemberWithID(ctx context.Context, orgID, memberID string) error {
  168. params := &domain.DeleteOrgsIDMembersIDAllParams{
  169. OrgID: orgID,
  170. UserID: memberID,
  171. }
  172. return o.apiClient.DeleteOrgsIDMembersID(ctx, params)
  173. }
  174. func (o *organizationsAPI) GetOwners(ctx context.Context, org *domain.Organization) (*[]domain.ResourceOwner, error) {
  175. return o.GetOwnersWithID(ctx, *org.Id)
  176. }
  177. func (o *organizationsAPI) GetOwnersWithID(ctx context.Context, orgID string) (*[]domain.ResourceOwner, error) {
  178. params := &domain.GetOrgsIDOwnersAllParams{
  179. OrgID: orgID,
  180. }
  181. response, err := o.apiClient.GetOrgsIDOwners(ctx, params)
  182. if err != nil {
  183. return nil, err
  184. }
  185. return response.Users, nil
  186. }
  187. func (o *organizationsAPI) AddOwner(ctx context.Context, org *domain.Organization, user *domain.User) (*domain.ResourceOwner, error) {
  188. return o.AddOwnerWithID(ctx, *org.Id, *user.Id)
  189. }
  190. func (o *organizationsAPI) AddOwnerWithID(ctx context.Context, orgID, memberID string) (*domain.ResourceOwner, error) {
  191. params := &domain.PostOrgsIDOwnersAllParams{
  192. Body: domain.PostOrgsIDOwnersJSONRequestBody{Id: memberID},
  193. OrgID: orgID,
  194. }
  195. return o.apiClient.PostOrgsIDOwners(ctx, params)
  196. }
  197. func (o *organizationsAPI) RemoveOwner(ctx context.Context, org *domain.Organization, user *domain.User) error {
  198. return o.RemoveOwnerWithID(ctx, *org.Id, *user.Id)
  199. }
  200. func (o *organizationsAPI) RemoveOwnerWithID(ctx context.Context, orgID, memberID string) error {
  201. params := &domain.DeleteOrgsIDOwnersIDAllParams{
  202. OrgID: orgID,
  203. UserID: memberID,
  204. }
  205. return o.apiClient.DeleteOrgsIDOwnersID(ctx, params)
  206. }