package
0.0.0-20190806085950-af561f6ff7a1
Repository: https://github.com/kylebanks/go-kit.git
Documentation: pkg.go.dev

# README

gonamo

-- import "github.com/KyleBanks/go-kit/gonamo/"

Package gonamo provides a simple wrapper around the DynamoDB SDK.

The intention is to provide a minimal DynamoDB table representation that can be created, written to, queried and scanned.

The main starting point of a gonamo implementation is to define a model that you want to store in DynamoDB, and implement the "Persistable" interface:

type Repository struct {
	Owner string
	Name  string

	DateCreated time.Time
}

func (r Repository) HashKey() interface{} {
	return r.Owner
}

func (r Repository) RangeKey() interface{} {
	return r.Name
}

func (r Repository) Attributes() gonamo.AttributeMap {
	return := gonamo.AttributeMap{
		"owner":       gonamo.AttributeValue(gonamo.StringType, r.Owner),
		"name":        gonamo.AttributeValue(gonamo.StringType, r.Name),
		"dateCreated": gonamo.AttributeValue(gonamo.NumberType, r.DateCreated.Unix()),
	}
}

Next you will be able to create a Table using the NewTable method, by providing a table name and the key structure:

gonamo.HashRangeKeyDefinition{"owner", gonamo.StringType, "name", gonamo.StringType}
tbl, err := gonamo.NewTable("tableName", key, nil)

Usage

func AttributeValue

func AttributeValue(attributeType AttributeType, attributeValue interface{}) *dynamodb.AttributeValue

AttributeValue initializes and returns an AttributeValue based on the attributeType provided.

func AwsStringOrNil

func AwsStringOrNil(s string) *string

AwsStringOrNil returns an aws.String string pointer, or nil if the provided string is empty.

type AttributeMap

type AttributeMap map[string]*dynamodb.AttributeValue

AttributeMap represents a DynamoDB object in it's database representation. Each element of the map is identified by it's name, and contains the element type and value.

type AttributeMaps

type AttributeMaps []map[string]*dynamodb.AttributeValue

AttributeMaps is a slice of AttributeMap.

type AttributeType

type AttributeType string

AttributeType defines a type of attribute used when representing data in DynamoDB.

const (
	// StringType is used for string fields.
	StringType AttributeType = "S"
	// NumberType is used for numeric fields.
	NumberType AttributeType = "N"
	// BoolType is used for boolean fields.
	BoolType AttributeType = "BOOL"
	// StringArrayType is used for string array types.
	StringArrayType AttributeType = "SS"
)

type HashKeyDefinition

type HashKeyDefinition struct {
	HashName string
	HashType AttributeType
}

HashKeyDefinition implements the KeyProvider interface for a table utilizing only a Hash key element.

type HashRangeKeyDefinition

type HashRangeKeyDefinition struct {
	HashName string
	HashType AttributeType

	RangeName string
	RangeType AttributeType
}

HashRangeKeyDefinition implements the KeyProvider interface for a table utilizing Hash and Range key elements.

type KeyType

type KeyType string

KeyType defines a type of Key (hash or range).

const (
	// HashKey represents a DyanmoDB Hash key.
	HashKey KeyType = "HASH"
	// RangeKey represents a DynamoDB Range key.
	RangeKey KeyType = "RANGE"
)

type Options

type Options struct {
	Endpoint            string
	Region              string
	DefaultProvisioning int64
}

Options represents optional configurations for DynamoDB.

type Persistable

type Persistable interface {
	// HashKey returns the value of the Hash key used to represent this individual entity.
	HashKey() interface{}

	// RangeKey returns the value of the Range key used to represent this individual entity.
	// If the table has no Range key, this may simply return nil.
	RangeKey() interface{}

	// Attributes returns all attributes (including Hash and Range keys)
	// and their type for the persistable model.
	Attributes() AttributeMap
}

Persistable provides an interface for models that can be persisted.

type Table

type Table struct {
}

Table provides a Dynamo API wrapper around a specific table.

func NewTable

func NewTable(tableName string, k keyProvider, opts *Options) (*Table, error)

NewTable intializes and returns a Table.

Providing the optional Options allows you to further configure the table, and the client used to communicate with the DynamoDB service.

func (*Table) BatchDelete

func (d *Table) BatchDelete(persistables []Persistable) error

BatchDelete performs a batch of delete requests, one for each of the Persistables provided.

func (*Table) BatchWrite

func (d *Table) BatchWrite(persistables []Persistable) error

BatchWrite handles paging and sending a batch write against a single table.

func (*Table) CreateTableIfNecessary

func (d *Table) CreateTableIfNecessary() (bool, error)

CreateTableIfNecessary attempts to determine if a table already exists, and if not, will create the table.

The boolean returned will be true if the table had to be created, and false otherwise.

func (*Table) DeleteItem

func (d *Table) DeleteItem(p Persistable) (*dynamodb.DeleteItemOutput, error)

DeleteItem deletes the item identified by the provided hash and (optional) range key.

func (*Table) Describe

func (d *Table) Describe() (*dynamodb.DescribeTableOutput, error)

Describe returns the DynamoDB Table description.

func (*Table) Find

func (d *Table) Find(hashValue, rangeValue interface{}) (map[string]interface{}, error)

Find performs a GetItem on the underlying table with a particular hash and (optional) range key.

If the table has no range key, this would be the same output as FindAllByHash.

func (*Table) FindAllByHash

func (d *Table) FindAllByHash(hashValue interface{}) ([]map[string]interface{}, error)

FindAllByHash finds all items with the specified hash key value.

If the table has no range key, this would be the same output as Find.

func (*Table) PutItem

func (d *Table) PutItem(item AttributeMap) (*dynamodb.PutItemOutput, error)

PutItem performs an insert into DynamoDB.

func (*Table) ScanAll

func (d *Table) ScanAll(fn func(page []map[string]interface{}) bool) error

ScanAll performs a scan on the entire underlying DynamoDB table, and executes the provided function for each page of results. If the function returns false, the scan will complete.