This commit is contained in:
@@ -6,32 +6,16 @@ defmodule WorkloadServiceWeb.TaskController do
|
|||||||
alias WorkloadService.Workload.Queries
|
alias WorkloadService.Workload.Queries
|
||||||
alias WorkloadService.Aggregates.TaskId
|
alias WorkloadService.Aggregates.TaskId
|
||||||
alias WorkloadServiceWeb.Schemas.Task, as: S
|
alias WorkloadServiceWeb.Schemas.Task, as: S
|
||||||
|
alias WorkloadServiceWeb.QueryHelpers
|
||||||
|
|
||||||
tags(["Tasks"])
|
tags(["Tasks"])
|
||||||
|
|
||||||
operation(:list,
|
operation(:list,
|
||||||
summary: "List tasks",
|
summary: "List tasks",
|
||||||
parameters: [
|
parameters: QueryHelpers.flop(
|
||||||
"page[number]": [in: :query, type: :integer, required: false, example: 1],
|
[:status, :application_id],
|
||||||
"page[size]": [in: :query, type: :integer, required: false, example: 20],
|
[:created_at, :updated_at, :status]
|
||||||
filters: [
|
),
|
||||||
in: :query,
|
|
||||||
schema: %OpenApiSpex.Schema{
|
|
||||||
type: :array,
|
|
||||||
items: %OpenApiSpex.Schema{
|
|
||||||
type: :object,
|
|
||||||
properties: %{
|
|
||||||
field: %OpenApiSpex.Schema{type: :string},
|
|
||||||
op: %OpenApiSpex.Schema{type: :string, default: "=="},
|
|
||||||
value: %OpenApiSpex.Schema{type: :string}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
required: false,
|
|
||||||
style: :deepObject,
|
|
||||||
explode: true
|
|
||||||
]
|
|
||||||
],
|
|
||||||
responses: [
|
responses: [
|
||||||
ok: {"Task list", "application/json", S.TaskListResponse},
|
ok: {"Task list", "application/json", S.TaskListResponse},
|
||||||
bad_request: {"Invalid params", "application/json", S.ErrorResponse}
|
bad_request: {"Invalid params", "application/json", S.ErrorResponse}
|
||||||
|
|||||||
28
lib/workload_service_web/query_helpers.ex
Normal file
28
lib/workload_service_web/query_helpers.ex
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
defmodule WorkloadServiceWeb.QueryHelpers do
|
||||||
|
@moduledoc false
|
||||||
|
|
||||||
|
alias OpenApiSpex.Schema
|
||||||
|
|
||||||
|
@filter_count 3
|
||||||
|
|
||||||
|
def flop(filter_fields, order_fields, other \\ []) do
|
||||||
|
filter_params = build_filter_params(filter_fields, @filter_count)
|
||||||
|
|
||||||
|
[
|
||||||
|
page: [in: :query, schema: %Schema{type: :number, default: 1}],
|
||||||
|
page_size: [in: :query, schema: %Schema{type: :number, default: 20}],
|
||||||
|
"order_by[]": [in: :query, schema: %Schema{type: :array, items: %Schema{type: :string, enum: order_fields}}],
|
||||||
|
"order_directions[]": [in: :query, schema: %Schema{type: :array, items: %Schema{type: :string, enum: ["asc", "desc"]}}]
|
||||||
|
] ++ filter_params ++ other
|
||||||
|
end
|
||||||
|
|
||||||
|
defp build_filter_params(fields, count) do
|
||||||
|
for i <- 0..(count - 1) do
|
||||||
|
[
|
||||||
|
{"filters[#{i}][field]", [in: :query, schema: %Schema{type: :string, enum: fields}]},
|
||||||
|
{"filters[#{i}][op]", [in: :query, schema: %Schema{type: :string, enum: Flop.Filter.allowed_operators(:all)}]},
|
||||||
|
{"filters[#{i}][value]", [in: :query, schema: %Schema{type: :string}]}
|
||||||
|
]
|
||||||
|
end |> List.flatten()
|
||||||
|
end
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user