mirror of
https://github.com/mxpv/podsync.git
synced 2024-05-11 05:55:04 +00:00
Configure DynamoDB table names
This commit is contained in:
@ -20,6 +20,8 @@ services:
|
||||
- PATREON_WEBHOOKS_SECRET={PATREON_WEBHOOKS_SECRET}
|
||||
- COOKIE_SECRET={COOKIE_SECRET}
|
||||
- GIN_MODE=release
|
||||
- DYNAMO_FEEDS_TABLE_NAME=Prod_Feeds
|
||||
- DYNAMO_PLEDGES_TABLE_NAME=Prod_Pledges
|
||||
volumes:
|
||||
- {PATH_TO_GOOGLE_CREDENTIALS_FILE_FOR_USE_OUTSIDE_GOOGLE_CLOUD}:/google-credentials.json
|
||||
ytdl:
|
||||
|
@ -9,17 +9,19 @@ import (
|
||||
const FileName = "podsync"
|
||||
|
||||
type AppConfig struct {
|
||||
YouTubeApiKey string `yaml:"youtubeApiKey"`
|
||||
VimeoApiKey string `yaml:"vimeoApiKey"`
|
||||
PatreonClientId string `yaml:"patreonClientId"`
|
||||
PatreonSecret string `yaml:"patreonSecret"`
|
||||
PatreonRedirectURL string `yaml:"patreonRedirectUrl"`
|
||||
PatreonWebhooksSecret string `json:"patreonWebhooksSecret"`
|
||||
PostgresConnectionURL string `yaml:"postgresConnectionUrl"`
|
||||
RedisURL string `yaml:"redisUrl"`
|
||||
CookieSecret string `yaml:"cookieSecret"`
|
||||
AssetsPath string `yaml:"assetsPath"`
|
||||
TemplatesPath string `yaml:"templatesPath"`
|
||||
YouTubeApiKey string `yaml:"youtubeApiKey"`
|
||||
VimeoApiKey string `yaml:"vimeoApiKey"`
|
||||
PatreonClientId string `yaml:"patreonClientId"`
|
||||
PatreonSecret string `yaml:"patreonSecret"`
|
||||
PatreonRedirectURL string `yaml:"patreonRedirectUrl"`
|
||||
PatreonWebhooksSecret string `json:"patreonWebhooksSecret"`
|
||||
PostgresConnectionURL string `yaml:"postgresConnectionUrl"`
|
||||
RedisURL string `yaml:"redisUrl"`
|
||||
CookieSecret string `yaml:"cookieSecret"`
|
||||
AssetsPath string `yaml:"assetsPath"`
|
||||
TemplatesPath string `yaml:"templatesPath"`
|
||||
DynamoFeedsTableName string `yaml:"dynamoFeedsTableName"`
|
||||
DynamoPledgesTableName string `yaml:"dynamoPledgesTableName"`
|
||||
}
|
||||
|
||||
func ReadConfiguration() (cfg *AppConfig, err error) {
|
||||
@ -34,17 +36,19 @@ func ReadConfiguration() (cfg *AppConfig, err error) {
|
||||
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
|
||||
|
||||
envmap := map[string]string{
|
||||
"youtubeApiKey": "YOUTUBE_API_KEY",
|
||||
"vimeoApiKey": "VIMEO_API_KEY",
|
||||
"patreonClientId": "PATREON_CLIENT_ID",
|
||||
"patreonSecret": "PATREON_SECRET",
|
||||
"patreonRedirectUrl": "PATREON_REDIRECT_URL",
|
||||
"patreonWebhooksSecret": "PATREON_WEBHOOKS_SECRET",
|
||||
"postgresConnectionUrl": "POSTGRES_CONNECTION_URL",
|
||||
"redisUrl": "REDIS_CONNECTION_URL",
|
||||
"cookieSecret": "COOKIE_SECRET",
|
||||
"assetsPath": "ASSETS_PATH",
|
||||
"templatesPath": "TEMPLATES_PATH",
|
||||
"youtubeApiKey": "YOUTUBE_API_KEY",
|
||||
"vimeoApiKey": "VIMEO_API_KEY",
|
||||
"patreonClientId": "PATREON_CLIENT_ID",
|
||||
"patreonSecret": "PATREON_SECRET",
|
||||
"patreonRedirectUrl": "PATREON_REDIRECT_URL",
|
||||
"patreonWebhooksSecret": "PATREON_WEBHOOKS_SECRET",
|
||||
"postgresConnectionUrl": "POSTGRES_CONNECTION_URL",
|
||||
"redisUrl": "REDIS_CONNECTION_URL",
|
||||
"cookieSecret": "COOKIE_SECRET",
|
||||
"assetsPath": "ASSETS_PATH",
|
||||
"templatesPath": "TEMPLATES_PATH",
|
||||
"dynamoFeedsTableName": "DYNAMO_FEEDS_TABLE_NAME",
|
||||
"dynamoPledgesTableName": "DYNAMO_PLEDGES_TABLE_NAME",
|
||||
}
|
||||
|
||||
for k, v := range envmap {
|
||||
|
@ -20,6 +20,8 @@ patreonRedirectUrl: "7"
|
||||
assetsPath: "8"
|
||||
templatesPath: "9"
|
||||
patreonWebhooksSecret: "10"
|
||||
dynamoFeedsTableName: "11"
|
||||
dynamoPledgesTableName: "12"
|
||||
`
|
||||
|
||||
func TestReadYaml(t *testing.T) {
|
||||
@ -42,6 +44,8 @@ func TestReadYaml(t *testing.T) {
|
||||
require.Equal(t, "8", cfg.AssetsPath)
|
||||
require.Equal(t, "9", cfg.TemplatesPath)
|
||||
require.Equal(t, "10", cfg.PatreonWebhooksSecret)
|
||||
require.Equal(t, "11", cfg.DynamoFeedsTableName)
|
||||
require.Equal(t, "12", cfg.DynamoPledgesTableName)
|
||||
}
|
||||
|
||||
func TestReadEnv(t *testing.T) {
|
||||
@ -58,6 +62,8 @@ func TestReadEnv(t *testing.T) {
|
||||
os.Setenv("ASSETS_PATH", "88")
|
||||
os.Setenv("TEMPLATES_PATH", "99")
|
||||
os.Setenv("PATREON_WEBHOOKS_SECRET", "1010")
|
||||
os.Setenv("DYNAMO_FEEDS_TABLE_NAME", "1111")
|
||||
os.Setenv("DYNAMO_PLEDGES_TABLE_NAME", "1212")
|
||||
|
||||
cfg, err := ReadConfiguration()
|
||||
require.NoError(t, err)
|
||||
@ -72,4 +78,6 @@ func TestReadEnv(t *testing.T) {
|
||||
require.Equal(t, "88", cfg.AssetsPath)
|
||||
require.Equal(t, "99", cfg.TemplatesPath)
|
||||
require.Equal(t, "1010", cfg.PatreonWebhooksSecret)
|
||||
require.Equal(t, "1111", cfg.DynamoFeedsTableName)
|
||||
require.Equal(t, "1212", cfg.DynamoPledgesTableName)
|
||||
}
|
||||
|
@ -29,8 +29,6 @@ const (
|
||||
)
|
||||
|
||||
var (
|
||||
pledgesTableName = aws.String("Pledges")
|
||||
feedsTableName = aws.String("Feeds")
|
||||
feedTimeToLiveField = aws.String("ExpirationTime")
|
||||
feedDowngradeIndexName = aws.String("UserID-HashID-Index")
|
||||
)
|
||||
@ -56,7 +54,9 @@ Feeds:
|
||||
TTL attr: ExpirationTime
|
||||
*/
|
||||
type Dynamo struct {
|
||||
dynamo *dynamodb.DynamoDB
|
||||
dynamo *dynamodb.DynamoDB
|
||||
FeedsTableName *string
|
||||
PledgesTableName *string
|
||||
}
|
||||
|
||||
func NewDynamo(cfg ...*aws.Config) (Dynamo, error) {
|
||||
@ -76,7 +76,11 @@ func NewDynamo(cfg ...*aws.Config) (Dynamo, error) {
|
||||
return Dynamo{}, err
|
||||
}
|
||||
|
||||
return Dynamo{dynamo: db}, nil
|
||||
return Dynamo{
|
||||
dynamo: db,
|
||||
FeedsTableName: aws.String("Feeds"),
|
||||
PledgesTableName: aws.String("Pledges"),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (d Dynamo) SaveFeed(feed *model.Feed) error {
|
||||
@ -97,7 +101,7 @@ func (d Dynamo) SaveFeed(feed *model.Feed) error {
|
||||
}
|
||||
|
||||
input := &dynamodb.PutItemInput{
|
||||
TableName: feedsTableName,
|
||||
TableName: d.FeedsTableName,
|
||||
Item: item,
|
||||
ConditionExpression: aws.String("attribute_not_exists(HashID)"),
|
||||
}
|
||||
@ -116,7 +120,7 @@ func (d Dynamo) GetFeed(hashID string) (*model.Feed, error) {
|
||||
logger.Debug("getting feed")
|
||||
|
||||
getInput := &dynamodb.GetItemInput{
|
||||
TableName: feedsTableName,
|
||||
TableName: d.FeedsTableName,
|
||||
Key: map[string]*dynamodb.AttributeValue{
|
||||
"HashID": {S: aws.String(hashID)},
|
||||
},
|
||||
@ -158,7 +162,7 @@ func (d Dynamo) GetFeed(hashID string) (*model.Feed, error) {
|
||||
}
|
||||
|
||||
updateInput := &dynamodb.UpdateItemInput{
|
||||
TableName: feedsTableName,
|
||||
TableName: d.FeedsTableName,
|
||||
Key: getInput.Key,
|
||||
UpdateExpression: updateExpression.Update(),
|
||||
}
|
||||
@ -198,7 +202,7 @@ func (d Dynamo) GetMetadata(hashID string) (*model.Feed, error) {
|
||||
}
|
||||
|
||||
input := &dynamodb.GetItemInput{
|
||||
TableName: feedsTableName,
|
||||
TableName: d.FeedsTableName,
|
||||
Key: map[string]*dynamodb.AttributeValue{
|
||||
"HashID": {S: aws.String(hashID)},
|
||||
},
|
||||
@ -255,7 +259,7 @@ func (d Dynamo) Downgrade(userID string, featureLevel int) error {
|
||||
logger.Debug("querying hash ids")
|
||||
|
||||
queryInput := &dynamodb.QueryInput{
|
||||
TableName: feedsTableName,
|
||||
TableName: d.FeedsTableName,
|
||||
IndexName: feedDowngradeIndexName,
|
||||
KeyConditionExpression: keyConditionExpression.KeyCondition(),
|
||||
ExpressionAttributeNames: keyConditionExpression.Names(),
|
||||
@ -304,7 +308,7 @@ func (d Dynamo) Downgrade(userID string, featureLevel int) error {
|
||||
|
||||
for _, key := range keys {
|
||||
input := &dynamodb.UpdateItemInput{
|
||||
TableName: feedsTableName,
|
||||
TableName: d.FeedsTableName,
|
||||
Key: key,
|
||||
ConditionExpression: updateExpression.Condition(),
|
||||
UpdateExpression: updateExpression.Update(),
|
||||
@ -338,7 +342,7 @@ func (d Dynamo) Downgrade(userID string, featureLevel int) error {
|
||||
|
||||
for _, key := range keys {
|
||||
input := &dynamodb.UpdateItemInput{
|
||||
TableName: feedsTableName,
|
||||
TableName: d.FeedsTableName,
|
||||
Key: key,
|
||||
UpdateExpression: updateExpression.Update(),
|
||||
ExpressionAttributeNames: updateExpression.Names(),
|
||||
@ -370,7 +374,7 @@ func (d Dynamo) AddPledge(pledge *model.Pledge) error {
|
||||
}
|
||||
|
||||
input := &dynamodb.PutItemInput{
|
||||
TableName: pledgesTableName,
|
||||
TableName: d.PledgesTableName,
|
||||
Item: item,
|
||||
ConditionExpression: aws.String("attribute_not_exists(PatronID)"),
|
||||
}
|
||||
@ -405,7 +409,7 @@ func (d Dynamo) UpdatePledge(patronID string, pledge *model.Pledge) error {
|
||||
}
|
||||
|
||||
input := &dynamodb.UpdateItemInput{
|
||||
TableName: pledgesTableName,
|
||||
TableName: d.PledgesTableName,
|
||||
Key: map[string]*dynamodb.AttributeValue{
|
||||
pledgesPrimaryKey: {N: aws.String(patronID)},
|
||||
},
|
||||
@ -432,7 +436,7 @@ func (d Dynamo) DeletePledge(pledge *model.Pledge) error {
|
||||
logger.Infof("deleting pledge %s", pk)
|
||||
|
||||
input := &dynamodb.DeleteItemInput{
|
||||
TableName: pledgesTableName,
|
||||
TableName: d.PledgesTableName,
|
||||
Key: map[string]*dynamodb.AttributeValue{
|
||||
pledgesPrimaryKey: {N: aws.String(pk)},
|
||||
},
|
||||
@ -452,7 +456,7 @@ func (d Dynamo) GetPledge(patronID string) (*model.Pledge, error) {
|
||||
logger.Debug("getting pledge")
|
||||
|
||||
input := &dynamodb.GetItemInput{
|
||||
TableName: pledgesTableName,
|
||||
TableName: d.PledgesTableName,
|
||||
Key: map[string]*dynamodb.AttributeValue{
|
||||
pledgesPrimaryKey: {N: aws.String(patronID)},
|
||||
},
|
||||
|
@ -21,12 +21,12 @@ func createDynamo(t *testing.T) storage {
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
d.dynamo.DeleteTable(&dynamodb.DeleteTableInput{TableName: pledgesTableName})
|
||||
d.dynamo.DeleteTable(&dynamodb.DeleteTableInput{TableName: feedsTableName})
|
||||
d.dynamo.DeleteTable(&dynamodb.DeleteTableInput{TableName: d.PledgesTableName})
|
||||
d.dynamo.DeleteTable(&dynamodb.DeleteTableInput{TableName: d.FeedsTableName})
|
||||
|
||||
// Create Pledges table
|
||||
_, err = d.dynamo.CreateTable(&dynamodb.CreateTableInput{
|
||||
TableName: pledgesTableName,
|
||||
TableName: d.PledgesTableName,
|
||||
AttributeDefinitions: []*dynamodb.AttributeDefinition{
|
||||
{
|
||||
AttributeName: aws.String(pledgesPrimaryKey),
|
||||
@ -49,7 +49,7 @@ func createDynamo(t *testing.T) storage {
|
||||
|
||||
// Create Feeds table
|
||||
_, err = d.dynamo.CreateTable(&dynamodb.CreateTableInput{
|
||||
TableName: feedsTableName,
|
||||
TableName: d.FeedsTableName,
|
||||
AttributeDefinitions: []*dynamodb.AttributeDefinition{
|
||||
{
|
||||
AttributeName: aws.String(feedsPrimaryKey),
|
||||
@ -100,14 +100,14 @@ func createDynamo(t *testing.T) storage {
|
||||
|
||||
require.NoError(t, err)
|
||||
|
||||
err = d.dynamo.WaitUntilTableExists(&dynamodb.DescribeTableInput{TableName: pledgesTableName})
|
||||
err = d.dynamo.WaitUntilTableExists(&dynamodb.DescribeTableInput{TableName: d.PledgesTableName})
|
||||
require.NoError(t, err)
|
||||
|
||||
err = d.dynamo.WaitUntilTableExists(&dynamodb.DescribeTableInput{TableName: feedsTableName})
|
||||
err = d.dynamo.WaitUntilTableExists(&dynamodb.DescribeTableInput{TableName: d.FeedsTableName})
|
||||
require.NoError(t, err)
|
||||
|
||||
_, err = d.dynamo.UpdateTimeToLive(&dynamodb.UpdateTimeToLiveInput{
|
||||
TableName: feedsTableName,
|
||||
TableName: d.FeedsTableName,
|
||||
TimeToLiveSpecification: &dynamodb.TimeToLiveSpecification{
|
||||
AttributeName: feedTimeToLiveField,
|
||||
Enabled: aws.Bool(true),
|
||||
|
Reference in New Issue
Block a user