Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions docs/data-sources/phone_emergency_address.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs with own template
page_title: "zoom_phone_emergency_address Data Source - zoom"
subcategory: "Phone"
description: |-
Fetches information about a specific Zoom Phone emergency address.
API Permissions
The following API permissions are required in order to use this data source.
This data source requires the phone:read:emergency_address:admin.
---

# zoom_phone_emergency_address (Data Source)

Fetches information about a specific Zoom Phone emergency address.

## API Permissions

The following API permissions are required in order to use this data source.
This data source requires the `phone:read:emergency_address:admin`.



<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `id` (String) The emergency address ID.

### Read-Only

- `address_line1` (String) The emergency address line 1.
- `address_line2` (String) The emergency address line 2.
- `city` (String) The emergency address city.
- `country` (String) The two-lettered country code (Alpha-2 code in ISO-3166 format) of the emergency address.
- `is_default` (Boolean) Indicates whether the emergency address is default or not.
- `level` (String) The emergency address owner level.
- `0`: Account/Company-level emergency address.
- `1`: User/Personal-level emergency address.
- `2`: Unknown company/pending emergency address.
- `site_id` (String) The unique identifier of the site to which this emergency address belongs.
- `state_code` (String) The emergency address state code.
- `status` (String) The emergency address verification status.
- `1`: Verification not required.
- `2`: Unverified.
- `3`: Verification requested.
- `4`: Verified.
- `5`: Rejected.
- `6`: Verification failed.
- `user_id` (String) User ID to which the personal emergency address belongs.
- `zip` (String) The emergency address zip code.
56 changes: 56 additions & 0 deletions docs/resources/phone_emergency_address.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs with own template
page_title: "zoom_phone_emergency_address Resource - zoom"
subcategory: "Phone"
description: |-
Manages a emergency address within Zoom Phone.
API Permissions
The following API permissions are required in order to use this resource.
This resource requires the phone:read:emergency_address:admin, phone:write:emergency_address:admin, phone:update:emergency_address:admin, phone:delete:emergency_address:admin.
---

# zoom_phone_emergency_address (Resource)

Manages a emergency address within Zoom Phone.

## API Permissions

The following API permissions are required in order to use this resource.
This resource requires the `phone:read:emergency_address:admin`, `phone:write:emergency_address:admin`, `phone:update:emergency_address:admin`, `phone:delete:emergency_address:admin`.



<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `address_line1` (String) The emergency address line 1.
- `city` (String) The emergency address city.
- `country` (String) The two-lettered country code (Alpha-2 code in ISO-3166 format) of the emergency address.
- `state_code` (String) The emergency address state code.
- `zip` (String) The emergency address zip code.

### Optional

- `address_line2` (String) The emergency address line 2.
- `is_default` (Boolean) Indicates whether the emergency address is default or not.
- `site_id` (String) The unique identifier of the site to which this emergency address belongs. Exactly one of `site_id` or `user_id` must be specified.
- `user_id` (String) User ID to which the personal emergency address belongs. Exactly one of `site_id` or `user_id` must be specified.

### Read-Only

- `id` (String) The emergency address ID.
- `level` (Number) The emergency address owner level.
- `0`: Account/Company-level emergency address.
- `1`: User/Personal-level emergency address.
- `2`: Unknown company/pending emergency address.
- `status` (Number) The emergency address verification status.
- `1`: Verification not required.
- `2`: Unverified.
- `3`: Verification requested.
- `4`: Verified.
- `5`: Rejected.
- `6`: Verification failed.


19 changes: 15 additions & 4 deletions generated/api/zoomphone/oas_schemas_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions generated/api/zoomuser/oas_schemas_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions internal/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"github.com/folio-sec/terraform-provider-zoom/internal/services/phone/callqueuemember"
"github.com/folio-sec/terraform-provider-zoom/internal/services/phone/callqueuephonenumber"
"github.com/folio-sec/terraform-provider-zoom/internal/services/phone/callqueuepolicy"
"github.com/folio-sec/terraform-provider-zoom/internal/services/phone/emergencyaddress"
"github.com/folio-sec/terraform-provider-zoom/internal/services/phone/externalcontact"
"github.com/folio-sec/terraform-provider-zoom/internal/services/phone/phonenumbers"
"github.com/folio-sec/terraform-provider-zoom/internal/services/phone/sharedlinegroup"
Expand Down Expand Up @@ -229,6 +230,7 @@ func (p *ZoomProvider) Resources(_ context.Context) []func() resource.Resource {
usercallingplans.NewPhoneUserCallingPlansResource,
userphonenumber.NewPhoneUserPhoneNumbersResource,
site.NewPhoneSiteResource,
emergencyaddress.NewEmergencyAddressResource,
}
}

Expand All @@ -242,6 +244,7 @@ func (p *ZoomProvider) DataSources(_ context.Context) []func() datasource.DataSo
sharedlinegroup.NewPhoneSharedLineGroupDataSource,
user.NewUsersDataSource,
site.NewPhoneSiteDataSource,
emergencyaddress.NewDataSource,
}
}

Expand Down
134 changes: 134 additions & 0 deletions internal/services/phone/emergencyaddress/emergency_address_crud.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
package emergencyaddress

import (
"context"
"errors"
"fmt"

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

type crud struct {
client *zoomphone.Client
}

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

func (c *crud) create(ctx context.Context, req *createDto) (*readDto, error) {
res, err := c.client.AddEmergencyAddress(ctx, zoomphone.NewOptAddEmergencyAddressReq(
zoomphone.AddEmergencyAddressReq{
AddressLine1: req.addressLine1.ValueString(),
AddressLine2: util.ToPhoneOptString(req.addressLine2),
City: req.city.ValueString(),
Country: req.country.ValueString(),
IsDefault: util.ToPhoneOptBool(req.isDefault),
SiteID: util.ToPhoneOptString(req.siteID),
StateCode: req.state.ValueString(),
Zip: req.zip.ValueString(),
}))
if err != nil {
return nil, err
}

return &readDto{
id: util.FromOptString(res.ID),
addressLine1: util.FromOptString(res.AddressLine1),
addressLine2: util.FromOptString(res.AddressLine2),
city: util.FromOptString(res.City),
country: util.FromOptString(res.Country),
isDefault: util.FromOptBool(res.IsDefault),
level: util.FromOptInt(res.Level),
site: readDtoSite{
ID: util.FromOptString(res.Site.Value.ID),
Name: util.FromOptString(res.Site.Value.Name),
},
owner: readDtoOwner{
ID: util.FromOptString(res.Owner.Value.ID),
ExtensionNumber: util.FromOptInt64(res.Owner.Value.ExtensionNumber),
Name: util.FromOptString(res.Owner.Value.Name),
},
stateCode: util.FromOptString(res.StateCode),
status: util.FromOptInt(res.Status),
zip: util.FromOptString(res.Zip),
}, nil
}

func (c *crud) read(ctx context.Context, emergencyAddressID types.String) (*readDto, error) {
res, err := c.client.GetEmergencyAddress(ctx, zoomphone.GetEmergencyAddressParams{
EmergencyAddressId: emergencyAddressID.ValueString(),
})
if err != nil {
var status *zoomphone.ErrorResponseStatusCode
if errors.As(err, &status) {
if status.StatusCode == 400 && status.Response.Code.Value == 300 {
return nil, nil // already deleted
}
}
return nil, fmt.Errorf("unable to read phone emergency address: %v", err)
}

return &readDto{
id: util.FromOptString(res.ID),
addressLine1: util.FromOptString(res.AddressLine1),
addressLine2: util.FromOptString(res.AddressLine2),
city: util.FromOptString(res.City),
country: util.FromOptString(res.Country),
isDefault: util.FromOptBool(res.IsDefault),
level: util.FromOptInt(res.Level),
site: readDtoSite{
ID: util.FromOptString(res.Site.Value.ID),
Name: util.FromOptString(res.Site.Value.Name),
},
owner: readDtoOwner{
ID: util.FromOptString(res.Owner.Value.ID),
ExtensionNumber: util.FromOptInt64(res.Owner.Value.ExtensionNumber),
Name: util.FromOptString(res.Owner.Value.Name),
},
stateCode: util.FromOptString(res.StateCode),
status: util.FromOptInt(res.Status),
zip: util.FromOptString(res.Zip),
}, nil
}

func (c *crud) update(ctx context.Context, req *updateDto) error {
_, err := c.client.UpdateEmergencyAddress(ctx, zoomphone.NewOptUpdateEmergencyAddressReq(
zoomphone.UpdateEmergencyAddressReq{
AddressLine1: zoomphone.NewOptString(req.addressLine1.ValueString()),
AddressLine2: zoomphone.NewOptString(req.addressLine2.ValueString()),
City: zoomphone.NewOptString(req.city.ValueString()),
Country: zoomphone.NewOptString(req.country.ValueString()),
IsDefault: zoomphone.NewOptBool(req.isDefault.ValueBool()),
StateCode: zoomphone.NewOptString(req.state.ValueString()),
Zip: zoomphone.NewOptString(req.zip.ValueString()),
}), zoomphone.UpdateEmergencyAddressParams{
EmergencyAddressId: req.id.ValueString(),
})
if err != nil {
return fmt.Errorf("error updating phone emergency address: %v", err)
}

return nil
}

func (c *crud) delete(ctx context.Context, emergencyAddressID types.String) error {
err := c.client.DeleteEmergencyAddress(ctx, zoomphone.DeleteEmergencyAddressParams{
EmergencyAddressId: emergencyAddressID.ValueString(),
})
if err != nil {
var status *zoomphone.ErrorResponseStatusCode
if errors.As(err, &status) {
if status.StatusCode == 400 && status.Response.Code.Value == 404 {
return nil // already deleted
}
}
return fmt.Errorf("error deleting phone emergency address: %v", err)
}

return nil
}
Loading
Loading