Packages
step_flow
1.7.1
1.9.0-rc2
1.9.0-rc1
1.9.0-rc0
1.8.2
1.8.1
1.8.1-rc8
1.8.1-rc7
1.8.1-rc6
1.8.1-rc5
1.8.1-rc4
1.8.1-rc3
1.8.1-rc2
1.8.1-rc1
1.8.1-rc0
1.8.0
1.8.0-rc3
1.8.0-rc2
1.8.0-rc1
1.8.0-rc0
1.7.3
1.7.3-rc4
1.7.3-rc3
1.7.3-rc2
1.7.3-rc1
1.7.3-rc0
1.7.2
1.7.2-rc4
1.7.2-rc3
1.7.2-rc2
1.7.2-rc1
1.7.2-rc0
1.7.1
1.7.0
1.7.0-rc1
1.7.0-rc0
1.6.1
1.6.1-rc1
1.6.1-rc0
1.6.0
1.6.0-rc9
1.6.0-rc8
1.6.0-rc7
1.6.0-rc6
1.6.0-rc5
1.6.0-rc4
1.6.0-rc3
1.6.0-rc20
1.6.0-rc2
1.6.0-rc19
1.6.0-rc18
1.6.0-rc17
1.6.0-rc16
1.6.0-rc15
1.6.0-rc14
1.6.0-rc13
1.6.0-rc12
1.6.0-rc11
1.6.0-rc10
1.6.0-rc1
1.5.0
1.5.0-rc1
1.4.2-rc2
1.4.2-rc1
1.4.1
1.4.1-rc1
1.4.0
1.4.0-rc4
1.4.0-rc3
1.4.0-rc2
1.4.0-rc1
1.3.1
1.3.0
1.3.0-rc
1.2.0
1.1.0
1.0.0
1.0.0-rc9
1.0.0-rc8
1.0.0-rc7
1.0.0-rc6
1.0.0-rc5
1.0.0-rc1
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.4
0.0.3
0.0.2
0.0.1
Step flow manager for Elixir applications
Current section
Files
Jump to
Current section
Files
lib/step_flow/web_controllers/notification_endpoint.ex
defmodule StepFlow.WebController.NotificationEndpoint do
@moduledoc false
use StepFlow, :controller
use OpenApiSpex.ControllerSpecs
alias StepFlow.NotificationHooks.NotificationEndpoint
alias StepFlow.NotificationHooks.NotificationEndpoints
alias StepFlow.WebController.Helpers
alias StepFlow.WebController.OpenApiSchemas
action_fallback(StepFlow.WebController.Fallback)
tags ["Notification Endpoints"]
security [%{"authorization" => %OpenApiSpex.SecurityScheme{type: "http", scheme: "bearer"}}]
operation :index,
summary: "List notification endpoints",
description: "List notification endpoints",
type: :object,
responses: [
ok:
{"NotificationEndpoints", "application/json",
OpenApiSchemas.Notifications.NotificationEndpoints},
forbidden: "Forbidden"
]
def index(conn, params) do
notification_endpoints = NotificationEndpoints.list_notification_endpoints(params)
conn
|> put_view(StepFlow.NotificationEndpointView)
|> render("index.json", notification_endpoints: notification_endpoints)
end
operation :create,
summary: "Create notification endpoint",
description: "Create a notification endpoint",
type: :object,
request_body:
{"NotificationEndpoint", "application/json",
OpenApiSchemas.Notifications.NotificationEndpoint},
responses: [
ok:
{"NotificationEndpoint", "application/json",
OpenApiSchemas.Notifications.NotificationEndpoint},
forbidden: "Forbidden",
not_found: "Not Found"
]
def create(%Plug.Conn{assigns: %{current_user: user}} = conn, notification_endpoint_params) do
if Helpers.has_right?(
"notification_endpoint::" <>
StepFlow.Map.get_by_key_or_atom(notification_endpoint_params, :endpoint_placeholder),
user,
"create"
) do
case NotificationEndpoints.create_notification_endpoint(notification_endpoint_params) do
{:ok, %NotificationEndpoint{} = notification_endpoint} ->
conn
|> put_status(:created)
|> put_view(StepFlow.NotificationEndpointView)
|> render("show.json", notification_endpoint: notification_endpoint)
{:error, _changeset} ->
conn
|> put_status(:bad_request)
|> put_view(StepFlow.NotificationEndpointView)
|> render("error.json",
errors: %{
reason: "Cannot create a Notification Endpoint with this endpoint placeholder."
}
)
end
else
conn
|> put_status(:forbidden)
|> put_view(StepFlow.NotificationEndpointView)
|> render("error.json",
errors: %{reason: "Cannot create a Notification Endpoint with this user."}
)
end
end
operation :show,
summary: "Get notification endpoint",
description: "Get a notification endpoint",
type: :object,
parameters: [
id: [
in: :path,
description: "Endpoint placeholder",
type: :string,
example: "my_endpoint"
]
],
responses: [
ok:
{"NotificationEndpoint", "application/json",
OpenApiSchemas.Notifications.NotificationEndpoint},
forbidden: "Forbidden",
not_found: "Not Found"
]
def show(conn, %{"id" => endpoint_placeholder}) do
case NotificationEndpoints.get_notification_endpoint_by_placeholder(endpoint_placeholder) do
nil ->
conn
|> put_status(:not_found)
|> put_view(StepFlow.NotificationEndpointView)
|> render("error.json",
errors: %{
reason:
"There is no notification endpoint with this placeholder: " <> endpoint_placeholder
}
)
notification_endpoint ->
conn
|> put_view(StepFlow.NotificationEndpointView)
|> render("show.json", notification_endpoint: notification_endpoint)
end
end
operation :update,
summary: "Edit notification endpoint",
description: "Edit notification endpoint",
type: :object,
parameters: [
id: [
in: :path,
description: "Endpoint identifier",
type: :string,
example: "my_endpoint"
]
],
request_body:
{"Notification Body", "application/json", OpenApiSchemas.Notifications.NotificationEndpoint},
responses: [
ok: {"Notification", "application/json", OpenApiSchemas.Notifications.NotificationEndpoint},
forbidden: "Forbidden"
]
def update(conn, %{"id" => identifier, "notification_endpoint" => params}) do
notification_endpoint = NotificationEndpoints.get_notification_endpoint!(identifier)
case NotificationEndpoints.update_notification_endpoint(notification_endpoint, params) do
{:ok, %NotificationEndpoint{} = notification_endpoint} ->
conn
|> put_status(:created)
|> put_view(StepFlow.NotificationEndpointView)
|> render("show.json", notification_endpoint: notification_endpoint)
{:error, _} ->
conn
|> put_status(:unprocessable_entity)
|> put_view(StepFlow.NotificationEndpointView)
|> render("error.json",
errors: %{reason: "Cannot change a Notification Endpoint."}
)
end
end
operation :delete,
summary: "Delete notification endpoint",
description: "Delete a notification endpoint by placeholder",
type: :object,
parameters: [
endpoint_placeholder: [
in: :path,
description: "Endpoint placeholder",
type: :string,
example: "my_endpoint"
]
],
responses: [
no_content: "No Content",
forbidden: "Forbidden",
not_found: "Not Found"
]
def delete(%Plug.Conn{assigns: %{current_user: user}} = conn, %{"id" => endpoint_placeholder}) do
case NotificationEndpoints.get_notification_endpoint_by_placeholder(endpoint_placeholder) do
nil ->
conn
|> put_status(:not_found)
|> put_view(StepFlow.NotificationEndpointView)
|> render("error.json",
errors: %{
reason:
"Cannot delete, there is no notification endpoint with this placeholder: " <>
endpoint_placeholder
}
)
notification_endpoint ->
if Helpers.has_right?("notification_endpoint::*", user, "delete") do
case NotificationEndpoints.delete_notification_endpoint(notification_endpoint) do
{:ok, %NotificationEndpoint{}} ->
send_resp(conn, :no_content, "")
end
else
conn
|> put_status(:forbidden)
|> put_view(StepFlow.NotificationEndpointView)
|> render("error.json",
errors: %{reason: "Cannot delete a Notification Endpoint with this user."}
)
end
end
end
end