github.com/mweagle/Sparta@v1.15.0/aws/step/dynamodb.go (about)

     1  package step
     2  
     3  import (
     4  	"math/rand"
     5  
     6  	"github.com/aws/aws-sdk-go/service/dynamodb"
     7  	gocf "github.com/mweagle/go-cloudformation"
     8  )
     9  
    10  ////////////////////////////////////////////////////////////////////////////////
    11  /*
    12     ___     _     ___ _
    13    / __|___| |_  |_ _| |_ ___ _ __
    14   | (_ / -_)  _|  | ||  _/ -_) '  \
    15    \___\___|\__| |___|\__\___|_|_|_|
    16  */
    17  ////////////////////////////////////////////////////////////////////////////////
    18  
    19  // DynamoDBGetItemParameters represents params for the DynamoDBGetItem
    20  // parameters. Ref: https://docs.aws.amazon.com/step-functions/latest/dg/connectors-ddb.html
    21  type DynamoDBGetItemParameters struct {
    22  	Key                      map[string]*dynamodb.AttributeValue `json:",omitempty"`
    23  	TableName                gocf.Stringable                     `json:",omitempty"`
    24  	AttributesToGet          []string                            `json:",omitempty"`
    25  	ConsistentRead           bool                                `json:",omitempty"`
    26  	ExpressionAttributeNames map[string]string                   `json:",omitempty"`
    27  	ProjectionExpression     string                              `json:",omitempty"`
    28  	ReturnConsumedCapacity   string                              `json:",omitempty"`
    29  }
    30  
    31  // DynamoDBGetItemState represents bindings for
    32  // https://docs.aws.amazon.com/step-functions/latest/dg/connectors-ddb.html
    33  type DynamoDBGetItemState struct {
    34  	BaseTask
    35  	parameters DynamoDBGetItemParameters
    36  }
    37  
    38  // MarshalJSON for custom marshalling, since this will be stringified and we need it
    39  // to turn into a stringified
    40  // Ref: https://docs.aws.amazon.com/step-functions/latest/dg/connectors-sns.html
    41  func (dgis *DynamoDBGetItemState) MarshalJSON() ([]byte, error) {
    42  	return dgis.BaseTask.marshalMergedParams("arn:aws:states:::dynamodb:getItem",
    43  		&dgis.parameters)
    44  }
    45  
    46  // NewDynamoDBGetItemState returns an initialized DynamoDB GetItem state
    47  func NewDynamoDBGetItemState(stateName string,
    48  	parameters DynamoDBGetItemParameters) *DynamoDBGetItemState {
    49  
    50  	dgis := &DynamoDBGetItemState{
    51  		BaseTask: BaseTask{
    52  			baseInnerState: baseInnerState{
    53  				name: stateName,
    54  				id:   rand.Int63(),
    55  			},
    56  		},
    57  		parameters: parameters,
    58  	}
    59  	return dgis
    60  }
    61  
    62  ////////////////////////////////////////////////////////////////////////////////
    63  /*
    64    ___      _     ___ _
    65   | _ \_  _| |_  |_ _| |_ ___ _ __
    66   |  _/ || |  _|  | ||  _/ -_) '  \
    67   |_|  \_,_|\__| |___|\__\___|_|_|_|
    68  
    69  */
    70  ////////////////////////////////////////////////////////////////////////////////
    71  
    72  // DynamoDBPutItemParameters represents params for the SNS notification
    73  // Ref: https://docs.aws.amazon.com/sns/latest/api/API_Publish.html#API_Publish_RequestParameters
    74  type DynamoDBPutItemParameters struct {
    75  	Item                        map[string]*dynamodb.AttributeValue
    76  	TableName                   gocf.Stringable
    77  	ConditionExpression         string
    78  	ConsistentRead              bool
    79  	ExpressionAttributeNames    map[string]string
    80  	ExpressionAttributeValues   map[string]*dynamodb.AttributeValue
    81  	ReturnConsumedCapacity      string // INDEXES | TOTAL | NONE
    82  	ReturnItemCollectionMetrics string // SIZE | NONE
    83  	ReturnValues                string // NONE | ALL_OLD | UPDATED_OLD | ALL_NEW | UPDATED_NEW
    84  }
    85  
    86  // DynamoDBPutItemState represents bindings for
    87  // https://docs.aws.amazon.com/step-functions/latest/dg/connectors-ddb.html
    88  type DynamoDBPutItemState struct {
    89  	BaseTask
    90  	parameters DynamoDBPutItemParameters
    91  }
    92  
    93  // MarshalJSON for custom marshalling, since this will be stringified and we need it
    94  // to turn into a stringified
    95  // Ref: https://docs.aws.amazon.com/step-functions/latest/dg/connectors-sns.html
    96  func (dgis *DynamoDBPutItemState) MarshalJSON() ([]byte, error) {
    97  	return dgis.BaseTask.marshalMergedParams("arn:aws:states:::dynamodb:putItem",
    98  		&dgis.parameters)
    99  }
   100  
   101  // NewDynamoDBPutItemState returns an initialized DynamoDB PutItem state
   102  func NewDynamoDBPutItemState(stateName string,
   103  	parameters DynamoDBPutItemParameters) *DynamoDBPutItemState {
   104  
   105  	dpis := &DynamoDBPutItemState{
   106  		BaseTask: BaseTask{
   107  			baseInnerState: baseInnerState{
   108  				name: stateName,
   109  				id:   rand.Int63(),
   110  			},
   111  		},
   112  		parameters: parameters,
   113  	}
   114  	return dpis
   115  }