# This file is responsible for configuring your application # and its dependencies with the aid of the Config module. # # This configuration file is loaded before any dependency and # is restricted to this project. # General application configuration import Config config :berrypod, :scopes, user: [ default: true, module: Berrypod.Accounts.Scope, assign_key: :current_scope, access_path: [:user, :id], schema_key: :user_id, schema_type: :binary_id, schema_table: :users, test_data_fixture: Berrypod.AccountsFixtures, test_setup_helper: :register_and_log_in_user ] config :berrypod, env: config_env(), ecto_repos: [Berrypod.Repo], generators: [timestamp_type: :utc_datetime, binary_id: true] # Configures the endpoint config :berrypod, BerrypodWeb.Endpoint, url: [host: "localhost"], adapter: Bandit.PhoenixAdapter, render_errors: [ formats: [html: BerrypodWeb.ErrorHTML, json: BerrypodWeb.ErrorJSON], layout: false ], pubsub_server: Berrypod.PubSub, live_view: [signing_salt: "HWdz7Vt8"] # Configures the mailer # # By default it uses the "Local" adapter which stores the emails # locally. You can see the emails in your browser, at "/dev/mailbox". # # For production it's recommended to configure a different adapter # at the `config/runtime.exs`. config :berrypod, Berrypod.Mailer, adapter: Swoosh.Adapters.Local # Configure esbuild (the version is required) config :esbuild, version: "0.25.4", berrypod: [ args: ~w(js/app.js --bundle --target=es2022 --outdir=../priv/static/assets/js --external:/fonts/* --external:/images/* --alias:@=.), cd: Path.expand("../assets", __DIR__), env: %{"NODE_PATH" => [Path.expand("../deps", __DIR__), Mix.Project.build_path()]} ], berrypod_shop_css: [ args: ~w(css/shop.css --bundle --outdir=../priv/static/assets/css), cd: Path.expand("../assets", __DIR__) ], berrypod_admin_css: [ args: ~w(css/admin.css --bundle --outdir=../priv/static/assets/css), cd: Path.expand("../assets", __DIR__) ] # Configures Elixir's Logger config :logger, :default_formatter, format: "$time $metadata[$level] $message\n", metadata: [:request_id, :oban_worker, :oban_queue] # Use Jason for JSON parsing in Phoenix config :phoenix, :json_library, Jason # ex_money configuration for currency handling config :ex_money, default_cldr_backend: Berrypod.Cldr # Error tracking (stored in DB, auto-captures Phoenix/LiveView/Oban errors) config :error_tracker, repo: Berrypod.Repo, otp_app: :berrypod, plugins: [ErrorTracker.Plugins.Pruner] # Stripe configuration config :stripity_stripe, api_version: "2024-12-18.acacia" # Oban configuration for background jobs config :berrypod, Oban, engine: Oban.Engines.Lite, repo: Berrypod.Repo, plugins: [ {Oban.Plugins.Pruner, max_age: 60}, {Oban.Plugins.Lifeline, rescue_after: :timer.minutes(5)}, {Oban.Plugins.Cron, crontab: [ {"*/30 * * * *", Berrypod.Orders.FulfilmentStatusWorker}, {"0 */6 * * *", Berrypod.Sync.ScheduledSyncWorker}, {"0 3 * * *", Berrypod.Analytics.RetentionWorker}, {"0 4 * * *", Berrypod.Orders.AbandonedCartPruneWorker}, {"0 5 * * 1", Berrypod.Workers.RedirectPrunerWorker}, {"30 3 * * *", Berrypod.Workers.DeadLinkCheckerWorker}, {"0 2 * * *", Berrypod.Newsletter.CleanupWorker}, {"*/5 * * * *", Berrypod.Newsletter.ScheduledCampaignWorker} ]} ], queues: [images: 2, sync: 1, checkout: 1, newsletter: 1] # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{config_env()}.exs"