Skip to content

Commit 064f068

Browse files
authored
Merge pull request #390 from construct-d/dev
Fix ueberauth providers configuration format in installer
2 parents b111f4f + 7549706 commit 064f068

7 files changed

Lines changed: 218 additions & 80 deletions

File tree

config/config.exs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,14 @@ config :ueberauth, Ueberauth, providers: %{}
3737
# Configure Oban (if using job processing)
3838
config :phoenix_kit, Oban,
3939
repo: PhoenixKit.Repo,
40-
queues: [default: 10, emails: 50, file_processing: 20, posts: 10],
40+
queues: [default: 10, emails: 50, file_processing: 20, posts: 10, scheduled_jobs: 1],
4141
plugins: [
42-
# Keep completed/cancelled/discarded jobs for 30 days for dashboard visibility
43-
{Oban.Plugins.Pruner, max_age: 60 * 60 * 24 * 30},
42+
# Main pruner: 30 days for most queues
43+
{Oban.Plugins.Pruner,
44+
max_age: 60 * 60 * 24 * 30,
45+
queue: [:default, :emails, :file_processing, :posts, :sitemap, :sqs_polling, :sync]},
46+
# Dedicated pruner: 1 day only for scheduled_jobs (cron runs every minute)
47+
{Oban.Plugins.Pruner, max_age: 60 * 60 * 24, queue: [:scheduled_jobs]},
4448
{Oban.Plugins.Cron,
4549
crontab: [
4650
{"* * * * *", PhoenixKit.ScheduledJobs.Workers.ProcessScheduledJobsWorker},

lib/phoenix_kit/install/oauth_config.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defmodule PhoenixKit.Install.OAuthConfig do
1717
```
1818
1919
This approach allows:
20-
- **Minimal compile-time configuration** - Only `config :ueberauth, Ueberauth, providers: []`
20+
- **Minimal compile-time configuration** - Only `config :ueberauth, Ueberauth, providers: %{}`
2121
- **Database-driven credentials** - Credentials loaded from Settings table at runtime
2222
- **Dynamic provider management** - Add/remove/modify providers without app restart
2323
@@ -70,7 +70,7 @@ defmodule PhoenixKit.Install.OAuthConfig do
7070
7171
# Configure Ueberauth (minimal configuration for compilation)
7272
# OAuth providers are configured dynamically at runtime from database
73-
config :ueberauth, Ueberauth, providers: []
73+
config :ueberauth, Ueberauth, providers: %{}
7474
"""
7575

7676
try do
@@ -184,7 +184,7 @@ defmodule PhoenixKit.Install.OAuthConfig do
184184
185185
Please add the following to config/config.exs:
186186
187-
config :ueberauth, Ueberauth, providers: []
187+
config :ueberauth, Ueberauth, providers: %{}
188188
189189
This minimal configuration is required for compilation.
190190
OAuth providers are configured dynamically at runtime from the database.

lib/phoenix_kit/install/oban_config.ex

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,12 +118,16 @@ defmodule PhoenixKit.Install.ObanConfig do
118118
emails: 50, # Email processing
119119
file_processing: 20, # File variant generation (storage system)
120120
posts: 10, # Posts scheduled publishing
121+
scheduled_jobs: 1, # Scheduled jobs cron (1-day retention)
121122
sitemap: 5, # Sitemap generation
122123
sqs_polling: 1, # SQS polling for email events (only one concurrent job)
123124
sync: 5 # Sync data import
124125
],
125126
plugins: [
126-
{Oban.Plugins.Pruner, max_age: 60 * 60 * 24 * 30}, # Keep jobs for 30 days
127+
# Main pruner: 30 days for most queues
128+
{Oban.Plugins.Pruner, max_age: 60 * 60 * 24 * 30, queue: [:default, :emails, :file_processing, :posts, :sitemap, :sqs_polling, :sync]},
129+
# Dedicated pruner: 1 day only for scheduled_jobs (cron runs every minute)
130+
{Oban.Plugins.Pruner, max_age: 60 * 60 * 24, queue: [:scheduled_jobs]},
127131
{Oban.Plugins.Cron,
128132
crontab: [
129133
{"* * * * *", PhoenixKit.ScheduledJobs.Workers.ProcessScheduledJobsWorker}
@@ -767,12 +771,16 @@ defmodule PhoenixKit.Install.ObanConfig do
767771
emails: 50,
768772
file_processing: 20,
769773
posts: 10,
774+
scheduled_jobs: 1, # Scheduled jobs cron (1-day retention)
770775
sitemap: 5,
771776
sqs_polling: 1,
772777
sync: 5
773778
],
774779
plugins: [
775-
{Oban.Plugins.Pruner, max_age: 60 * 60 * 24 * 30}, # Keep jobs for 30 days
780+
# Main pruner: 30 days for most queues
781+
{Oban.Plugins.Pruner, max_age: 60 * 60 * 24 * 30, queue: [:default, :emails, :file_processing, :posts, :sitemap, :sqs_polling, :sync]},
782+
# Dedicated pruner: 1 day only for scheduled_jobs (cron runs every minute)
783+
{Oban.Plugins.Pruner, max_age: 60 * 60 * 24, queue: [:scheduled_jobs]},
776784
{Oban.Plugins.Cron,
777785
crontab: [
778786
{"* * * * *", PhoenixKit.ScheduledJobs.Workers.ProcessScheduledJobsWorker}

lib/phoenix_kit/scheduled_jobs/workers/process_scheduled_jobs_worker.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ defmodule PhoenixKit.ScheduledJobs.Workers.ProcessScheduledJobsWorker do
3535
- Worker itself always returns :ok to prevent Oban retries
3636
"""
3737

38-
use Oban.Worker, queue: :default, max_attempts: 1
38+
use Oban.Worker, queue: :scheduled_jobs, max_attempts: 1
3939

4040
require Logger
4141

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
defmodule PhoenixKit.Settings.Queries do
2+
@moduledoc """
3+
Ecto queries for Settings context.
4+
5+
This module encapsulates all database queries for settings management,
6+
providing a centralized location for query logic.
7+
"""
8+
9+
import Ecto.Query
10+
11+
alias PhoenixKit.RepoHelper
12+
alias PhoenixKit.Settings.Setting
13+
14+
# Single record queries
15+
16+
@doc """
17+
Gets a setting record by key.
18+
19+
## Examples
20+
21+
iex> PhoenixKit.Settings.Queries.get_setting_by_key("time_zone")
22+
%Setting{key: "time_zone", value: "0"}
23+
24+
iex> PhoenixKit.Settings.Queries.get_setting_by_key("non_existent")
25+
nil
26+
"""
27+
def get_setting_by_key(key) when is_binary(key) do
28+
repo().get_by(Setting, key: key)
29+
end
30+
31+
# Multiple records queries
32+
33+
@doc """
34+
Lists all settings ordered by key.
35+
36+
## Examples
37+
38+
iex> PhoenixKit.Settings.Queries.list_settings()
39+
[%Setting{key: "date_format", value: "Y-m-d"}, %Setting{key: "time_zone", value: "0"}, ...]
40+
"""
41+
def list_settings do
42+
Setting
43+
|> order_by([s], s.key)
44+
|> repo().all()
45+
end
46+
47+
@doc """
48+
Gets all settings as a list of {key, value} tuples.
49+
50+
## Examples
51+
52+
iex> PhoenixKit.Settings.Queries.list_settings_key_values()
53+
[{"time_zone", "0"}, {"date_format", "Y-m-d"}]
54+
"""
55+
def list_settings_key_values do
56+
Setting
57+
|> select([s], {s.key, s.value})
58+
|> repo().all()
59+
end
60+
61+
@doc """
62+
Lists settings for specific keys as a list of {key, value} tuples.
63+
64+
## Examples
65+
66+
iex> PhoenixKit.Settings.Queries.list_settings_key_values_by_keys(["time_zone", "date_format"])
67+
[{"time_zone", "0"}, {"date_format", "Y-m-d"}]
68+
"""
69+
def list_settings_key_values_by_keys(keys) when is_list(keys) do
70+
Setting
71+
|> where([s], s.key in ^keys)
72+
|> select([s], {s.key, s.value})
73+
|> repo().all()
74+
end
75+
76+
@doc """
77+
Lists setting records for specific keys.
78+
79+
## Examples
80+
81+
iex> PhoenixKit.Settings.Queries.list_settings_by_keys(["time_zone"])
82+
[%Setting{key: "time_zone", value: "0"}]
83+
"""
84+
def list_settings_by_keys(keys) when is_list(keys) do
85+
Setting
86+
|> where([s], s.key in ^keys)
87+
|> repo().all()
88+
end
89+
90+
@doc """
91+
Lists settings by keys with JSON priority as a list of {key, value} tuples.
92+
93+
Returns a list where value_json is used if present, otherwise falls back to
94+
the string value.
95+
96+
## Examples
97+
98+
iex> PhoenixKit.Settings.Queries.list_settings_with_json_priority_by_keys(["theme"])
99+
[{"theme", %{"primary" => "#3b82f6"}}]
100+
"""
101+
def list_settings_with_json_priority_by_keys(keys) when is_list(keys) do
102+
Setting
103+
|> where([s], s.key in ^keys)
104+
|> repo().all()
105+
|> Enum.map(fn setting ->
106+
value = if setting.value_json, do: setting.value_json, else: setting.value
107+
{setting.key, value}
108+
end)
109+
end
110+
111+
# Write operations
112+
113+
@doc """
114+
Inserts a new setting.
115+
116+
## Examples
117+
118+
iex> %Setting{} |> Setting.changeset(%{key: "theme", value: "dark"})
119+
...> |> PhoenixKit.Settings.Queries.insert_setting()
120+
{:ok, %Setting{}}
121+
"""
122+
def insert_setting(changeset) do
123+
repo().insert(changeset)
124+
end
125+
126+
@doc """
127+
Updates an existing setting.
128+
129+
## Examples
130+
131+
iex> setting |> Setting.update_changeset(%{value: "light"})
132+
...> |> PhoenixKit.Settings.Queries.update_setting()
133+
{:ok, %Setting{}}
134+
"""
135+
def update_setting(changeset) do
136+
repo().update(changeset)
137+
end
138+
139+
# Transaction
140+
141+
@doc """
142+
Executes a transaction with multiple operations.
143+
144+
## Examples
145+
146+
iex> Ecto.Multi.new()
147+
...> |> multi_operation()
148+
...> |> PhoenixKit.Settings.Queries.transaction()
149+
{:ok, result}
150+
"""
151+
def transaction(multi) do
152+
repo().transaction(multi)
153+
end
154+
155+
# Private functions
156+
157+
defp repo do
158+
RepoHelper.repo()
159+
end
160+
end

0 commit comments

Comments
 (0)