rentease/internal/config/config.go
Ruidy 8384d85e3e
feat(stripe): add Stripe payment sync and webhook support
Introduce Stripe integration for automatic payment ingestion and refund
tracking. Adds new fields to the payment model for Stripe IDs and
status,
Stripe client driver, sync service, cron job, manual API endpoint, and
public webhook handler for real-time updates. Includes tests and
documentation. Manual cash entry remains supported.
2025-10-03 21:39:59 +02:00

70 lines
2.6 KiB
Go

package config
import (
"context"
"fmt"
"github.com/joho/godotenv"
"github.com/sethvargo/go-envconfig"
)
// Config holds the application configuration settings loaded from environment variables
type Config struct {
// App
// AppName is the name of the application
AppName string `env:"APP_NAME, default=rentease"`
// DatabaseURL is the connection string for the database
DatabaseURL string `env:"DATABASE_URL, required"`
// Debug enables debug mode when true
Debug bool `env:"DEBUG, default=false"`
// LogLevel is the logging level (e.g., debug, info, warn, error)
LogLevel string `env:"LOG_LEVEL, default=info"`
// Origins is the list of allowed origins
Origins []string `env:"ORIGINS, required"`
// Port is the HTTP server port number
Port int `env:"PORT, default=4200"`
// SentryDsn is the DSN for Sentry error reporting
SentryDsn string `env:"SENTRY_DSN"`
// Auth
// Admin is the email used to access the admin panel
Admin string `env:"ADMIN, required"`
// AdminSecret is the password used to access the admin panel
AdminSecret string `env:"ADMIN_SECRET, required"`
// APIKey is the API access key
APIKey string `env:"API_KEY, required"`
// SecretKey is the secret key used for JWT token signing
SecretKey string `env:"SECRET_KEY, required"`
// SessionSecret is the secret key used for session signing
SessionSecret string `env:"SESSION_SECRET, required"`
// StripeSecretKey is the API key used to authenticate with Stripe
StripeSecretKey string `env:"STRIPE_SECRET_KEY"`
// StripeWebhookSecret is the signing secret for validating Stripe webhooks
StripeWebhookSecret string `env:"STRIPE_WEBHOOK_SECRET"`
// StripeConnectAccount is the connected account ID when using Stripe Connect (optional)
StripeConnectAccount string `env:"STRIPE_CONNECT_ACCOUNT"`
}
// New creates a [Config] struct. It first parses the environment variables. You can use a .env file.
// Please note that the env variables must be prefixed, e.g. with "APP_" to be accounted for.
func New(ctx context.Context) (*Config, error) {
_ = godotenv.Load()
config := new(Config)
if err := envconfig.ProcessWith(ctx, &envconfig.Config{
Target: config,
Lookuper: envconfig.PrefixLookuper("APP_", envconfig.OsLookuper()),
}); err != nil {
return nil, fmt.Errorf("could not parse environment variables: %w", err)
}
return config, nil
}
// MustConfig is a helper that wraps [New] and panics if an error occurs.
// Use it in cases a [Config] is required and you want to exit the application if an error occurs.
func MustConfig(ctx context.Context) *Config {
c, err := New(ctx)
if err != nil {
panic(err)
}
return c
}