Skip to content

Commit 4d9bde1

Browse files
committed
define changeset/2 function in models
1 parent a96239d commit 4d9bde1

54 files changed

Lines changed: 176 additions & 216 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

modules/openapi-generator/src/main/resources/elixir/model.mustache

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,14 @@
2323
{{/vars}}
2424
end
2525

26-
@spec new(map()) :: t()
27-
def new(params) do
28-
%__MODULE__{}
26+
@spec changeset(t(), map()) :: Ecto.Changeset.t()
27+
def changeset(%__MODULE__{} = struct, params) do
28+
struct
2929
|> Ecto.Changeset.cast(params, [{{#primitiveVars}}{{#atom}}{{&baseName}}{{/atom}}{{^-last}}, {{/-last}}{{/primitiveVars}}])
3030
|> Ecto.Changeset.validate_required([{{#requiredPrimitiveVars}}{{#atom}}{{&baseName}}{{/atom}}{{^-last}}, {{/-last}}{{/requiredPrimitiveVars}}])
3131
{{#complexVars}}
3232
|> Ecto.Changeset.cast_embed({{#atom}}{{&baseName}}{{/atom}}{{#required}}, required: true{{/required}})
3333
{{/complexVars}}
34-
|> Ecto.Changeset.apply_action!(:insert)
3534
end
3635
end
3736
{{/model}}{{/models}}

modules/openapi-generator/src/main/resources/elixir/request_builder.ex.mustache

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -187,12 +187,18 @@ defmodule {{moduleName}}.RequestBuilder do
187187
defp decode(%Tesla.Env{} = env, false), do: {:ok, env}
188188

189189
defp decode(%Tesla.Env{body: body}, %{}) do
190-
JSON.decode!(body)
190+
JSON.decode(body)
191191
end
192192

193193
defp decode(%Tesla.Env{body: body}, module) do
194-
body
195-
|> JSON.decode!
196-
|> module.new
194+
case JSON.decode(body) do
195+
{:ok, params} ->
196+
module
197+
|> struct
198+
|> module.changeset(params)
199+
|> Ecto.Changeset.apply_action(:insert)
200+
{:error, error} ->
201+
{:error, error}
202+
end
197203
end
198204
end

samples/client/petstore/elixir/lib/openapi_petstore/model/_foo_get_default_response.ex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,12 @@ defmodule OpenapiPetstore.Model.FooGetDefaultResponse do
1717
embeds_one :string, OpenapiPetstore.Model.Foo
1818
end
1919

20-
@spec new(map()) :: t()
21-
def new(params) do
22-
%__MODULE__{}
20+
@spec changeset(t(), map()) :: Ecto.Changeset.t()
21+
def changeset(%__MODULE__{} = struct, params) do
22+
struct
2323
|> Ecto.Changeset.cast(params, [])
2424
|> Ecto.Changeset.validate_required([])
2525
|> Ecto.Changeset.cast_embed(:string)
26-
|> Ecto.Changeset.apply_action!(:insert)
2726
end
2827
end
2928

samples/client/petstore/elixir/lib/openapi_petstore/model/_special_model_name_.ex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@ defmodule OpenapiPetstore.Model.SpecialModelName do
1717
field :"$special[property.name]", :integer
1818
end
1919

20-
@spec new(map()) :: t()
21-
def new(params) do
22-
%__MODULE__{}
20+
@spec changeset(t(), map()) :: Ecto.Changeset.t()
21+
def changeset(%__MODULE__{} = struct, params) do
22+
struct
2323
|> Ecto.Changeset.cast(params, [:"$special[property.name]"])
2424
|> Ecto.Changeset.validate_required([])
25-
|> Ecto.Changeset.apply_action!(:insert)
2625
end
2726
end
2827

samples/client/petstore/elixir/lib/openapi_petstore/model/additional_properties_class.ex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,11 @@ defmodule OpenapiPetstore.Model.AdditionalPropertiesClass do
1919
field :map_of_map_property, :map
2020
end
2121

22-
@spec new(map()) :: t()
23-
def new(params) do
24-
%__MODULE__{}
22+
@spec changeset(t(), map()) :: Ecto.Changeset.t()
23+
def changeset(%__MODULE__{} = struct, params) do
24+
struct
2525
|> Ecto.Changeset.cast(params, [:map_property, :map_of_map_property])
2626
|> Ecto.Changeset.validate_required([])
27-
|> Ecto.Changeset.apply_action!(:insert)
2827
end
2928
end
3029

samples/client/petstore/elixir/lib/openapi_petstore/model/all_of_with_single_ref.ex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,12 @@ defmodule OpenapiPetstore.Model.AllOfWithSingleRef do
1919
embeds_one :SingleRefType, OpenapiPetstore.Model.SingleRefType
2020
end
2121

22-
@spec new(map()) :: t()
23-
def new(params) do
24-
%__MODULE__{}
22+
@spec changeset(t(), map()) :: Ecto.Changeset.t()
23+
def changeset(%__MODULE__{} = struct, params) do
24+
struct
2525
|> Ecto.Changeset.cast(params, [:username])
2626
|> Ecto.Changeset.validate_required([])
2727
|> Ecto.Changeset.cast_embed(:SingleRefType)
28-
|> Ecto.Changeset.apply_action!(:insert)
2928
end
3029
end
3130

samples/client/petstore/elixir/lib/openapi_petstore/model/animal.ex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,11 @@ defmodule OpenapiPetstore.Model.Animal do
1919
field :color, :string
2020
end
2121

22-
@spec new(map()) :: t()
23-
def new(params) do
24-
%__MODULE__{}
22+
@spec changeset(t(), map()) :: Ecto.Changeset.t()
23+
def changeset(%__MODULE__{} = struct, params) do
24+
struct
2525
|> Ecto.Changeset.cast(params, [:className, :color])
2626
|> Ecto.Changeset.validate_required([:className])
27-
|> Ecto.Changeset.apply_action!(:insert)
2827
end
2928
end
3029

samples/client/petstore/elixir/lib/openapi_petstore/model/any.ex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@ defmodule OpenapiPetstore.Model.Any do
1717
field :"@type", :string
1818
end
1919

20-
@spec new(map()) :: t()
21-
def new(params) do
22-
%__MODULE__{}
20+
@spec changeset(t(), map()) :: Ecto.Changeset.t()
21+
def changeset(%__MODULE__{} = struct, params) do
22+
struct
2323
|> Ecto.Changeset.cast(params, [:"@type"])
2424
|> Ecto.Changeset.validate_required([])
25-
|> Ecto.Changeset.apply_action!(:insert)
2625
end
2726
end
2827

samples/client/petstore/elixir/lib/openapi_petstore/model/api_response.ex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,11 @@ defmodule OpenapiPetstore.Model.ApiResponse do
2121
field :message, :string
2222
end
2323

24-
@spec new(map()) :: t()
25-
def new(params) do
26-
%__MODULE__{}
24+
@spec changeset(t(), map()) :: Ecto.Changeset.t()
25+
def changeset(%__MODULE__{} = struct, params) do
26+
struct
2727
|> Ecto.Changeset.cast(params, [:code, :type, :message])
2828
|> Ecto.Changeset.validate_required([])
29-
|> Ecto.Changeset.apply_action!(:insert)
3029
end
3130
end
3231

samples/client/petstore/elixir/lib/openapi_petstore/model/array_of_array_of_number_only.ex

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,11 @@ defmodule OpenapiPetstore.Model.ArrayOfArrayOfNumberOnly do
1717
field :ArrayArrayNumber, {:array, {:array, :float}}
1818
end
1919

20-
@spec new(map()) :: t()
21-
def new(params) do
22-
%__MODULE__{}
20+
@spec changeset(t(), map()) :: Ecto.Changeset.t()
21+
def changeset(%__MODULE__{} = struct, params) do
22+
struct
2323
|> Ecto.Changeset.cast(params, [:ArrayArrayNumber])
2424
|> Ecto.Changeset.validate_required([])
25-
|> Ecto.Changeset.apply_action!(:insert)
2625
end
2726
end
2827

0 commit comments

Comments
 (0)