// Seed seeds database with essential data. func (db UserDB) Seed(overwrite bool, jwtPass string) error { if err := data.SeedInit(jwtPass); err != nil { return err } for _, u := range data.SeedUsers { if err := db.SaveUser(&u); err != nil { return err } } return nil }
// Seed creates and populates the database, overwriting existing data if specified. func (db *DynamoDB) Seed(overwrite bool, jwtPass string) error { cred, err := db.DB.Config.Credentials.Get() if err != nil { return fmt.Errorf("dynamodb: failed to initialize: %v", err) } log.Printf("dynamodb: initialized with region: %v, access key ID: %v, endpoint: %v", *(db.DB.Config.Region), cred.AccessKeyID, db.DB.Config.Endpoint) if !overwrite { if tbls, err := db.listTables(); err != nil { return err } else if len(tbls) != 0 { return nil } } if err := db.deleteTables(); err != nil { return err } // create the tables for _, tbl := range db.Tables { tableParams := &dynamodb.CreateTableInput{ TableName: aws.String(tbl), ProvisionedThroughput: &dynamodb.ProvisionedThroughput{ ReadCapacityUnits: aws.Int64(1), WriteCapacityUnits: aws.Int64(1), }, AttributeDefinitions: []*dynamodb.AttributeDefinition{ { AttributeName: aws.String("ID"), AttributeType: aws.String("S"), }, { AttributeName: aws.String("Email"), AttributeType: aws.String("S"), }, }, KeySchema: []*dynamodb.KeySchemaElement{ { AttributeName: aws.String("ID"), KeyType: aws.String("HASH"), }, }, GlobalSecondaryIndexes: []*dynamodb.GlobalSecondaryIndex{ { IndexName: aws.String("Email"), KeySchema: []*dynamodb.KeySchemaElement{ { AttributeName: aws.String("Email"), KeyType: aws.String("HASH"), }, }, Projection: &dynamodb.Projection{ NonKeyAttributes: []*string{ aws.String("Email"), }, ProjectionType: aws.String("INCLUDE"), }, ProvisionedThroughput: &dynamodb.ProvisionedThroughput{ ReadCapacityUnits: aws.Int64(1), WriteCapacityUnits: aws.Int64(1), }, }, }, // LocalSecondaryIndexes: []*dynamodb.LocalSecondaryIndex{ // { // IndexName: aws.String("IndexName"), // KeySchema: []*dynamodb.KeySchemaElement{ // { // AttributeName: aws.String("KeySchemaAttributeName"), // KeyType: aws.String("KeyType"), // }, // // }, // Projection: &dynamodb.Projection{ // NonKeyAttributes: []*string{ // aws.String("NonKeyAttributeName"), // // }, // ProjectionType: aws.String("ProjectionType"), // }, // }, // }, // StreamSpecification: &dynamodb.StreamSpecification{ // StreamEnabled: aws.Bool(true), // StreamViewType: aws.String("StreamViewType"), // }, } if _, err := db.DB.CreateTable(tableParams); err != nil { return err } // tables with secondary indexes need to be created sequentially so wait till table is ready if err := db.DB.WaitUntilTableExists(&dynamodb.DescribeTableInput{TableName: aws.String(tbl)}); err != nil { return err } } // insert the seed data if err := data.SeedInit(jwtPass); err != nil { return err } for _, u := range data.SeedUsers { if err := db.SaveUser(&u); err != nil { return err } } return nil }