github.com/akamai/AkamaiOPEN-edgegrid-golang/v8@v8.1.0/pkg/botman/custom_bot_category_sequence.go (about)

     1  package botman
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/http"
     7  
     8  	validation "github.com/go-ozzo/ozzo-validation/v4"
     9  )
    10  
    11  type (
    12  	// The CustomBotCategorySequence interface supports retrieving and updating custom bot category sequence
    13  	CustomBotCategorySequence interface {
    14  		// GetCustomBotCategorySequence https://techdocs.akamai.com/bot-manager/reference/get-custom-bot-category-sequence
    15  		GetCustomBotCategorySequence(ctx context.Context, params GetCustomBotCategorySequenceRequest) (*CustomBotCategorySequenceResponse, error)
    16  
    17  		// UpdateCustomBotCategorySequence https://techdocs.akamai.com/bot-manager/reference/put-custom-bot-category-sequence
    18  		UpdateCustomBotCategorySequence(ctx context.Context, params UpdateCustomBotCategorySequenceRequest) (*CustomBotCategorySequenceResponse, error)
    19  	}
    20  
    21  	// GetCustomBotCategorySequenceRequest is used to retrieve custom bot category sequence
    22  	GetCustomBotCategorySequenceRequest struct {
    23  		ConfigID int64
    24  		Version  int64
    25  	}
    26  
    27  	// CustomBotCategorySequenceResponse is used to retrieve custom bot category sequence
    28  	CustomBotCategorySequenceResponse struct {
    29  		Sequence []string `json:"sequence"`
    30  	}
    31  
    32  	// UpdateCustomBotCategorySequenceRequest is used to update custom bot category sequence
    33  	UpdateCustomBotCategorySequenceRequest struct {
    34  		ConfigID int64    `json:"-"`
    35  		Version  int64    `json:"-"`
    36  		Sequence []string `json:"sequence"`
    37  	}
    38  )
    39  
    40  // Validate validates a GetCustomBotCategorySequenceRequest.
    41  func (v GetCustomBotCategorySequenceRequest) Validate() error {
    42  	return validation.Errors{
    43  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    44  		"Version":  validation.Validate(v.Version, validation.Required),
    45  	}.Filter()
    46  }
    47  
    48  // Validate validates an UpdateCustomBotCategorySequenceRequest.
    49  func (v UpdateCustomBotCategorySequenceRequest) Validate() error {
    50  	return validation.Errors{
    51  		"ConfigID": validation.Validate(v.ConfigID, validation.Required),
    52  		"Version":  validation.Validate(v.Version, validation.Required),
    53  		"Sequence": validation.Validate(v.Sequence, validation.Required),
    54  	}.Filter()
    55  }
    56  
    57  func (b *botman) GetCustomBotCategorySequence(ctx context.Context, params GetCustomBotCategorySequenceRequest) (*CustomBotCategorySequenceResponse, error) {
    58  	logger := b.Log(ctx)
    59  	logger.Debug("GetCustomBotCategorySequence")
    60  
    61  	if err := params.Validate(); err != nil {
    62  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    63  	}
    64  
    65  	uri := fmt.Sprintf(
    66  		"/appsec/v1/configs/%d/versions/%d/custom-bot-category-sequence",
    67  		params.ConfigID,
    68  		params.Version)
    69  
    70  	req, err := http.NewRequestWithContext(ctx, http.MethodGet, uri, nil)
    71  	if err != nil {
    72  		return nil, fmt.Errorf("failed to create GetCustomBotCategorySequence request: %w", err)
    73  	}
    74  
    75  	var result CustomBotCategorySequenceResponse
    76  	resp, err := b.Exec(req, &result)
    77  	if err != nil {
    78  		return nil, fmt.Errorf("GetCustomBotCategorySequence request failed: %w", err)
    79  	}
    80  
    81  	if resp.StatusCode != http.StatusOK {
    82  		return nil, b.Error(resp)
    83  	}
    84  
    85  	return &result, nil
    86  }
    87  
    88  func (b *botman) UpdateCustomBotCategorySequence(ctx context.Context, params UpdateCustomBotCategorySequenceRequest) (*CustomBotCategorySequenceResponse, error) {
    89  	logger := b.Log(ctx)
    90  	logger.Debug("UpdateCustomBotCategorySequence")
    91  
    92  	if err := params.Validate(); err != nil {
    93  		return nil, fmt.Errorf("%w: %s", ErrStructValidation, err.Error())
    94  	}
    95  
    96  	putURL := fmt.Sprintf(
    97  		"/appsec/v1/configs/%d/versions/%d/custom-bot-category-sequence",
    98  		params.ConfigID,
    99  		params.Version)
   100  
   101  	req, err := http.NewRequestWithContext(ctx, http.MethodPut, putURL, nil)
   102  	if err != nil {
   103  		return nil, fmt.Errorf("failed to create UpdateCustomBotCategorySequence request: %w", err)
   104  	}
   105  
   106  	var result CustomBotCategorySequenceResponse
   107  	resp, err := b.Exec(req, &result, params)
   108  	if err != nil {
   109  		return nil, fmt.Errorf("UpdateCustomBotCategorySequence request failed: %w", err)
   110  	}
   111  
   112  	if resp.StatusCode != http.StatusOK {
   113  		return nil, b.Error(resp)
   114  	}
   115  
   116  	return &result, nil
   117  }