You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.4 KiB

package db
import (
"context"
"log"
"github.com/aws/aws-sdk-go-v2/aws"
awsconfig "github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/dynamodb"
"github.com/mnrva-dev/owltier.com/server/config"
)
var (
handle Handle
)
const (
GSI_NAME = "gsi1"
GSI_ATTR = "gsi1pk"
)
type Handle struct {
client *dynamodb.Client
table string
gsiName string
gsiAttr string
}
func init() {
handle = DBConfig(
config.Environment(),
GSI_NAME,
GSI_ATTR,
)
}
func CreateLocalClient() *dynamodb.Client {
cfg, err := awsconfig.LoadDefaultConfig(context.TODO(),
awsconfig.WithRegion("us-east-1"),
awsconfig.WithEndpointResolver(aws.EndpointResolverFunc(
func(service, region string) (aws.Endpoint, error) {
return aws.Endpoint{URL: "http://localhost:8000"}, nil
})),
awsconfig.WithCredentialsProvider(credentials.StaticCredentialsProvider{
Value: aws.Credentials{
AccessKeyID: "dummy", SecretAccessKey: "dummy", SessionToken: "dummy",
Source: "Hard-coded credentials; values are irrelevant for local DynamoDB",
},
}),
)
if err != nil {
panic(err)
}
return dynamodb.NewFromConfig(cfg)
}
func DBConfig(env, gsiname, gsiattr string) Handle {
var c *dynamodb.Client
if env == "local" {
c = CreateLocalClient()
log.Println("* Local Environment Detected")
}
return Handle{
client: c,
table: config.DbTable(),
gsiName: gsiname,
gsiAttr: gsiattr,
}
}