Packages
phoenix_kit
1.7.96
1.7.210
1.7.209
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/phoenix_kit/scheduled_jobs/handler.ex
defmodule PhoenixKit.ScheduledJobs.Handler do
@moduledoc """
Behaviour for scheduled job handlers.
Implement this behaviour to create handlers for different types of scheduled jobs.
The scheduler will dynamically load and call handlers based on the `handler_module`
stored in the scheduled job record.
## Example Implementation
defmodule MyApp.Posts.ScheduledPostHandler do
@behaviour PhoenixKit.ScheduledJobs.Handler
@impl true
def job_type, do: "publish_post"
@impl true
def resource_type, do: "post"
@impl true
def execute(post_uuid, _args) do
case MyApp.Posts.get_post(post_uuid) do
nil -> {:error, :not_found}
post -> MyApp.Posts.publish_post(post)
end
end
end
## Callbacks
- `job_type/0` - Returns a unique string identifying this job type (e.g., "publish_post", "send_email")
- `resource_type/0` - Returns the type of resource this handler operates on (e.g., "post", "email")
- `execute/2` - Executes the job. Receives the resource_uuid and args map. Returns `:ok` or `{:ok, result}` on success, `{:error, reason}` on failure.
## Return Values
The `execute/2` callback should return:
- `:ok` - Job completed successfully
- `{:ok, result}` - Job completed successfully with a result (logged but not stored)
- `{:error, reason}` - Job failed, will be retried if attempts < max_attempts
## Registration
Handlers don't need to be explicitly registered. The scheduler dynamically loads
the handler module from the job record and calls the execute function.
"""
@doc """
Returns the job type identifier for this handler.
This should be a unique string that identifies the type of job.
Examples: "publish_post", "send_email", "send_notification"
"""
@callback job_type() :: String.t()
@doc """
Returns the resource type this handler operates on.
This should match the `resource_type` field in the scheduled job record.
Examples: "post", "email", "notification"
"""
@callback resource_type() :: String.t()
@doc """
Executes the scheduled job.
## Parameters
- `resource_uuid` - The UUID of the target resource
- `args` - A map of additional arguments stored with the job
## Returns
- `:ok` - Job completed successfully
- `{:ok, result}` - Job completed successfully with additional result data
- `{:error, reason}` - Job failed (will be retried if attempts < max_attempts)
"""
@callback execute(resource_uuid :: binary(), args :: map()) ::
:ok | {:ok, any()} | {:error, any()}
end