Skip to content

Commit

Permalink
updated models for ticket form
Browse files Browse the repository at this point in the history
  • Loading branch information
clearnote01 committed Oct 8, 2024
1 parent 9e4febf commit 09ac4ea
Show file tree
Hide file tree
Showing 6 changed files with 213 additions and 30 deletions.
31 changes: 31 additions & 0 deletions zendesk/client/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package client

import (
"net/url"

"github.com/google/go-querystring/query"
"github.com/nukosuke/go-zendesk/zendesk"
)

type (
Client struct {
// use struct embedding for extension
zendesk.Client
}
)

// addOptions build query string
func addOptions(s string, opts interface{}) (string, error) {
u, err := url.Parse(s)
if err != nil {
return s, err
}

qs, err := query.Values(opts)
if err != nil {
return s, err
}

u.RawQuery = qs.Encode()
return u.String(), nil
}
121 changes: 121 additions & 0 deletions zendesk/client/ticket_form.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
package client

import (
"context"
"encoding/json"
"fmt"

"github.com/nukosuke/terraform-provider-zendesk/zendesk/models"

"github.com/nukosuke/go-zendesk/zendesk"
)

// TicketFormAPI an interface containing all ticket form related methods
type TicketFormAPI interface {
GetTicketForms(ctx context.Context, options *zendesk.TicketFormListOptions) ([]models.TicketForm, zendesk.Page, error)
CreateTicketForm(ctx context.Context, ticketForm models.TicketForm) (models.TicketForm, error)
DeleteTicketForm(ctx context.Context, id int64) error
UpdateTicketForm(ctx context.Context, id int64, form models.TicketForm) (models.TicketForm, error)
GetTicketForm(ctx context.Context, id int64) (models.TicketForm, error)
}

// GetTicketForms fetches ticket forms
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#list-ticket-forms
func (z *Client) GetTicketForms(ctx context.Context, options *zendesk.TicketFormListOptions) ([]models.TicketForm, zendesk.Page, error) {
var data struct {
TicketForms []models.TicketForm `json:"ticket_forms"`
zendesk.Page
}

tmp := options
if tmp == nil {
tmp = &zendesk.TicketFormListOptions{}
}

u, err := addOptions("/ticket_forms.json", tmp)
if err != nil {
return nil, zendesk.Page{}, err
}

body, err := z.Get(ctx, u)
if err != nil {
return []models.TicketForm{}, zendesk.Page{}, err
}

err = json.Unmarshal(body, &data)
if err != nil {
return []models.TicketForm{}, zendesk.Page{}, err
}
return data.TicketForms, data.Page, nil
}

// CreateTicketForm creates new ticket form
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#create-ticket-forms
func (z *Client) CreateTicketForm(ctx context.Context, ticketForm models.TicketForm) (models.TicketForm, error) {
var data, result struct {
TicketForm models.TicketForm `json:"ticket_form"`
}
data.TicketForm = ticketForm

body, err := z.Post(ctx, "/ticket_forms.json", data)
if err != nil {
return models.TicketForm{}, err
}

err = json.Unmarshal(body, &result)
if err != nil {
return models.TicketForm{}, err
}
return result.TicketForm, nil
}

// GetTicketForm returns the specified ticket form
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#show-ticket-form
func (z *Client) GetTicketForm(ctx context.Context, id int64) (models.TicketForm, error) {
var result struct {
TicketForm models.TicketForm `json:"ticket_form"`
}

body, err := z.Get(ctx, fmt.Sprintf("/ticket_forms/%d.json", id))
if err != nil {
return models.TicketForm{}, err
}

err = json.Unmarshal(body, &result)
if err != nil {
return models.TicketForm{}, err
}
return result.TicketForm, nil
}

// UpdateTicketForm updates the specified ticket form and returns the updated form
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#update-ticket-forms
func (z *Client) UpdateTicketForm(ctx context.Context, id int64, form models.TicketForm) (models.TicketForm, error) {
var data, result struct {
TicketForm models.TicketForm `json:"ticket_form"`
}

data.TicketForm = form
body, err := z.Put(ctx, fmt.Sprintf("/ticket_forms/%d.json", id), data)
if err != nil {
return models.TicketForm{}, err
}

err = json.Unmarshal(body, &result)
if err != nil {
return models.TicketForm{}, err
}

return result.TicketForm, nil
}

// DeleteTicketForm deletes the specified ticket form
// ref: https://developer.zendesk.com/rest_api/docs/support/ticket_forms#delete-ticket-form
func (z *Client) DeleteTicketForm(ctx context.Context, id int64) error {
err := z.Delete(ctx, fmt.Sprintf("/ticket_forms/%d.json", id))
if err != nil {
return err
}

return nil
}
30 changes: 30 additions & 0 deletions zendesk/models/ticket_form.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package models

type TicketForm struct {
ID int64 `json:"id,omitempty"`
URL string `json:"url,omitempty"`
Name string `json:"name"`
RawName string `json:"raw_name,omitempty"`
DisplayName string `json:"display_name,omitempty"`
RawDisplayName string `json:"raw_display_name,omitempty"`
Position int64 `json:"position"`
Active bool `json:"active,omitempty"`
EndUserVisible bool `json:"end_user_visible,omitempty"`
Default bool `json:"default,omitempty"`
TicketFieldIDs []int64 `json:"ticket_field_ids,omitempty"`
InAllBrands bool `json:"in_all_brands,omitempty"`
RestrictedBrandIDs []int64 `json:"restricted_brand_ids,omitempty"`
}

type TicketFormListOptions struct {
PageOptions
Active bool `url:"active,omitempty"`
EndUserVisible bool `url:"end_user_visible,omitempty"`
FallbackToDefault bool `url:"fallback_to_default,omitempty"`
AssociatedToBrand bool `url:"associated_to_brand,omitempty"`
}

type PageOptions struct {
PerPage int `url:"per_page,omitempty"`
Page int `url:"page,omitempty"`
}
26 changes: 13 additions & 13 deletions zendesk/resource_zendesk_user_field.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
client "github.com/nukosuke/go-zendesk/zendesk"
newClient "github.com/nukosuke/terraform-provider-zendesk/zendesk/client"
)

// https://developer.zendesk.com/rest_api/docs/core/user_fields
Expand Down Expand Up @@ -366,11 +366,11 @@ func unmarshalUserField(d identifiableGetterSetter) (UserField, error) {
}

func resourceZendeskUserFieldCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
zd := meta.(*client.Client)
zd := meta.(*newClient.Client)
return createUserField(ctx, d, zd)
}

func createUserField(ctx context.Context, d identifiableGetterSetter, zd *client.Client) diag.Diagnostics {
func createUserField(ctx context.Context, d identifiableGetterSetter, zd *newClient.Client) diag.Diagnostics {
var diags diag.Diagnostics

tf, err := unmarshalUserField(d)
Expand All @@ -394,7 +394,7 @@ func createUserField(ctx context.Context, d identifiableGetterSetter, zd *client
return diags
}

func CreateUserField(ctx context.Context, z *client.Client, userField UserField) (UserField, error) {
func CreateUserField(ctx context.Context, z *newClient.Client, userField UserField) (UserField, error) {
var data, result struct {
UserField UserField `json:"user_field"`
}
Expand All @@ -415,11 +415,11 @@ func CreateUserField(ctx context.Context, z *client.Client, userField UserField)
}

func resourceZendeskUserFieldRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
zd := meta.(*client.Client)
zd := meta.(*newClient.Client)
return readUserField(ctx, d, zd)
}

func readUserField(ctx context.Context, d identifiableGetterSetter, zd *client.Client) diag.Diagnostics {
func readUserField(ctx context.Context, d identifiableGetterSetter, zd *newClient.Client) diag.Diagnostics {
var diags diag.Diagnostics

id, err := strconv.ParseInt(d.Id(), 10, 64)
Expand Down Expand Up @@ -448,11 +448,11 @@ func resourceZendeskUserFieldUpdate(ctx context.Context, d *schema.ResourceData,
)
}
}
zd := meta.(*client.Client)
zd := meta.(*newClient.Client)
return updateUserField(ctx, d, zd)
}

func updateUserField(ctx context.Context, d identifiableGetterSetter, zd *client.Client) diag.Diagnostics {
func updateUserField(ctx context.Context, d identifiableGetterSetter, zd *newClient.Client) diag.Diagnostics {
var diags diag.Diagnostics

tf, err := unmarshalUserField(d)
Expand Down Expand Up @@ -482,11 +482,11 @@ func updateUserField(ctx context.Context, d identifiableGetterSetter, zd *client
}

func resourceZendeskUserFieldDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
zd := meta.(*client.Client)
zd := meta.(*newClient.Client)
return deleteUserField(ctx, d, zd)
}

func deleteUserField(ctx context.Context, d identifiable, zd *client.Client) diag.Diagnostics {
func deleteUserField(ctx context.Context, d identifiable, zd *newClient.Client) diag.Diagnostics {
var diags diag.Diagnostics

id, err := strconv.ParseInt(d.Id(), 10, 64)
Expand All @@ -504,7 +504,7 @@ func deleteUserField(ctx context.Context, d identifiable, zd *client.Client) dia

// GetUserField gets a specified ticket field
// ref: https://developer.zendesk.com/rest_api/docs/support/user_fields#show-ticket-field
func GetUserField(ctx context.Context, z *client.Client, userID int64) (UserField, error) {
func GetUserField(ctx context.Context, z *newClient.Client, userID int64) (UserField, error) {
var result struct {
UserField UserField `json:"user_field"`
}
Expand All @@ -526,7 +526,7 @@ func GetUserField(ctx context.Context, z *client.Client, userID int64) (UserFiel

// UpdateUserField updates a field with the specified ticket field
// ref: https://developer.zendesk.com/rest_api/docs/support/user_fields#update-ticket-field
func UpdateUserField(ctx context.Context, z *client.Client, ticketID int64, field UserField) (UserField, error) {
func UpdateUserField(ctx context.Context, z *newClient.Client, ticketID int64, field UserField) (UserField, error) {
var result, data struct {
UserField UserField `json:"user_field"`
}
Expand All @@ -551,7 +551,7 @@ func UpdateUserField(ctx context.Context, z *client.Client, ticketID int64, fiel

// DeleteUserField deletes the specified ticket field
// ref: https://developer.zendesk.com/rest_api/docs/support/user_fields#Delete-ticket-field
func DeleteUserField(ctx context.Context, z *client.Client, ticketID int64) error {
func DeleteUserField(ctx context.Context, z *newClient.Client, ticketID int64) error {
err := z.Delete(ctx, fmt.Sprintf("/user_fields/%d.json", ticketID))

if err != nil {
Expand Down
26 changes: 13 additions & 13 deletions zendesk/resource_zendesk_view.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
client "github.com/nukosuke/go-zendesk/zendesk"
newClient "github.com/nukosuke/terraform-provider-zendesk/zendesk/client"
)

// https://developer.zendesk.com/api-reference/ticketing/business-rules/views/
Expand Down Expand Up @@ -285,11 +285,11 @@ func unmarshalViews(d identifiableGetterSetter) (View, error) {
}

func resourceZendeskViewsCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
zd := meta.(*client.Client)
zd := meta.(*newClient.Client)
return createViews(ctx, d, zd)
}

func createViews(ctx context.Context, d identifiableGetterSetter, zd *client.Client) diag.Diagnostics {
func createViews(ctx context.Context, d identifiableGetterSetter, zd *newClient.Client) diag.Diagnostics {
var diags diag.Diagnostics

tf, err := unmarshalViews(d)
Expand All @@ -314,11 +314,11 @@ func createViews(ctx context.Context, d identifiableGetterSetter, zd *client.Cli
}

func resourceZendeskViewsRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
zd := meta.(*client.Client)
zd := meta.(*newClient.Client)
return readViews(ctx, d, zd)
}

func readViews(ctx context.Context, d identifiableGetterSetter, zd *client.Client) diag.Diagnostics {
func readViews(ctx context.Context, d identifiableGetterSetter, zd *newClient.Client) diag.Diagnostics {
var diags diag.Diagnostics

id, err := strconv.ParseInt(d.Id(), 10, 64)
Expand All @@ -340,11 +340,11 @@ func readViews(ctx context.Context, d identifiableGetterSetter, zd *client.Clien
}

func resourceZendeskViewsUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
zd := meta.(*client.Client)
zd := meta.(*newClient.Client)
return updateViews(ctx, d, zd)
}

func updateViews(ctx context.Context, d identifiableGetterSetter, zd *client.Client) diag.Diagnostics {
func updateViews(ctx context.Context, d identifiableGetterSetter, zd *newClient.Client) diag.Diagnostics {
var diags diag.Diagnostics

tf, err := unmarshalViews(d)
Expand Down Expand Up @@ -404,11 +404,11 @@ func mapViewToViewCreateOrUpdate(view View) ViewCreateOrUpdate {
}

func resourceZendeskViewsDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
zd := meta.(*client.Client)
zd := meta.(*newClient.Client)
return deleteViews(ctx, d, zd)
}

func deleteViews(ctx context.Context, d identifiable, zd *client.Client) diag.Diagnostics {
func deleteViews(ctx context.Context, d identifiable, zd *newClient.Client) diag.Diagnostics {
var diags diag.Diagnostics

id, err := strconv.ParseInt(d.Id(), 10, 64)
Expand Down Expand Up @@ -518,7 +518,7 @@ func viewConditionSchema(desc string) *schema.Schema {
}
}

func CreateView(ctx context.Context, z *client.Client, field View) (View, error) {
func CreateView(ctx context.Context, z *newClient.Client, field View) (View, error) {
var result struct {
View View `json:"view"`
}
Expand All @@ -540,7 +540,7 @@ func CreateView(ctx context.Context, z *client.Client, field View) (View, error)
return result.View, nil
}

func GetView(ctx context.Context, z *client.Client, viewID int64) (View, error) {
func GetView(ctx context.Context, z *newClient.Client, viewID int64) (View, error) {
var result struct {
View View `json:"view"`
}
Expand All @@ -563,7 +563,7 @@ func GetView(ctx context.Context, z *client.Client, viewID int64) (View, error)

// UpdateView updates a field with the specified ticket field
// ref: https://developer.zendesk.com/rest_api/docs/support/user_fields#update-ticket-field
func UpdateView(ctx context.Context, z *client.Client, ticketID int64, field View) (View, error) {
func UpdateView(ctx context.Context, z *newClient.Client, ticketID int64, field View) (View, error) {
var result struct {
View View `json:"view"`
}
Expand Down Expand Up @@ -595,7 +595,7 @@ func UpdateView(ctx context.Context, z *client.Client, ticketID int64, field Vie

// DeleteView deletes the specified ticket field
// ref: https://developer.zendesk.com/rest_api/docs/support/user_fields#Delete-ticket-field
func DeleteView(ctx context.Context, z *client.Client, viewID int64) error {
func DeleteView(ctx context.Context, z *newClient.Client, viewID int64) error {
err := z.Delete(ctx, fmt.Sprintf("/views/%d.json", viewID))

if err != nil {
Expand Down
Loading

0 comments on commit 09ac4ea

Please sign in to comment.