bool CreatePlayerDataTable(const std::unique_ptr<DynamoDBClient>& client) { AWS_LOGSTREAM_INFO(SchemaTag, "Creating " << ExampleTableName << " table"); // Build the create request CreateTableRequest createTableRequest; AttributeDefinition identityAttribute; identityAttribute.SetAttributeName(IdentityColumnName); identityAttribute.SetAttributeType(ScalarAttributeType::S); KeySchemaElement identityKeySchemaElement; identityKeySchemaElement.WithAttributeName(IdentityColumnName).WithKeyType(KeyType::HASH); ProvisionedThroughput provisionedThroughput; provisionedThroughput.SetReadCapacityUnits(5); provisionedThroughput.SetWriteCapacityUnits(1); createTableRequest.AddAttributeDefinitions(identityAttribute); createTableRequest.AddKeySchema(identityKeySchemaElement); createTableRequest.WithProvisionedThroughput(provisionedThroughput); createTableRequest.WithTableName(ExampleTableName); CreateTableOutcome createTableOutcome = client->CreateTable(createTableRequest); assert(createTableOutcome.IsSuccess() || createTableOutcome.GetError().GetErrorType() == DynamoDBErrors::RESOURCE_IN_USE); if(!createTableOutcome.IsSuccess()) { AWSError<DynamoDBErrors> error = createTableOutcome.GetError(); AWS_LOGSTREAM_ERROR(SchemaTag, "Failed to create table: " << ExampleTableName << ": " << error.GetMessage().c_str() << "(" << error.GetExceptionName() << ")"); return false; } // Wait for table to become active WaitOnTableStatus(client, ExampleTableName, TableStatusWaitUntil::ACTIVE); return true; }
bool DropPlayerDataTable(const std::unique_ptr<DynamoDBClient>& client) { AWS_LOGSTREAM_INFO(SchemaTag, "Dropping old table: " << ExampleTableName); DeleteTableRequest deleteTableRequest; deleteTableRequest.SetTableName(ExampleTableName); DeleteTableOutcome deleteTableOutcome = client->DeleteTable(deleteTableRequest); if (!deleteTableOutcome.IsSuccess()) { AWSError<DynamoDBErrors> error = deleteTableOutcome.GetError(); AWS_LOGSTREAM_ERROR(SchemaTag, "Failed to drop old table: " << ExampleTableName << ": " << error.GetMessage() << "(" << error.GetExceptionName() << ")"); return false; } WaitOnTableStatus(client, ExampleTableName, TableStatusWaitUntil::GONE); return true; }