Skip to content

Commit

Permalink
Merge 5557d1c into 509f4e8
Browse files Browse the repository at this point in the history
  • Loading branch information
KrainNeun committed Mar 7, 2019
2 parents 509f4e8 + 5557d1c commit a5977bc
Show file tree
Hide file tree
Showing 13 changed files with 667 additions and 1 deletion.
2 changes: 2 additions & 0 deletions .gitignore
Expand Up @@ -15,3 +15,5 @@ erl_crash.dump
# secrets files as long as you replace their contents by environment
# variables.
/config/*.secret.exs

/.idea
45 changes: 45 additions & 0 deletions RequestSample_definition.http
@@ -0,0 +1,45 @@
############################################
# APIリクエストサンプル集
############################################
### 認証 / authenticator_path
POST {{url}}/api/sign-in HTTP/1.1
Content-Type: application/json

{
"email": "fugafuga@example.com",
"password": "fugafuga"
}

> {%
client.global.set("access_token", response.body.access_token);
client.global.set("user_id", response.body.id);
%}

### 値定義情報取得
POST {{url}}/api/search-definitions HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{access_token}}

{}

### 値定義情報取得
POST {{url}}/api/search-definitions HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{access_token}}

{
"and": [{"definition_category": "Test1"}, {"language_code": "JP"}]
}

###
### 値定義情報取得
POST {{url}}/api/search-definitions HTTP/1.1
Content-Type: application/json
Authorization: Bearer {{access_token}}

{
"and": [{"language_code": "JP"}],
"or": [{"definition_code": "Test_1_01"}, {"definition_code": "Test_2_02"}]
}

###
169 changes: 169 additions & 0 deletions lib/materia/definitions/definitions.ex
@@ -0,0 +1,169 @@
defmodule Materia.Definitions do
@moduledoc """
The Definitions context.
"""

import Ecto.Query, warn: false

alias MateriaUtils.Ecto.EctoUtil
alias Materia.Definitions.ValueDefinition

@repo Application.get_env(:materia, :repo)

@doc """
Returns the list of value_definitions.
iex(1)> results = Materia.Definitions.list_value_definitions()
iex(2)> view = MateriaWeb.ValueDefinitionView.render("index.json", %{value_definitions: results})
iex(3)> view = view |> Enum.map(fn x -> x = Map.delete(x, :id) end)
iex(4)> Enum.count(view)
8
"""
def list_value_definitions do
@repo.all(ValueDefinition)
|> Enum.sort(
fn x, y ->
x.definition_category < y.definition_category or (
x.definition_category == y.definition_category and
x.display_sort_no < y.display_sort_no)
end
)
end

@doc """
Gets a single value_definition.
iex(1)> results = Materia.Definitions.get_value_definition!(1)
iex(2)> view = MateriaWeb.ValueDefinitionView.render("show.json", %{value_definition: results})
iex(3)> view = [view] |> Enum.map(fn x -> x = Map.delete(x, :id) end) |> List.first
%{
definition_abbreviated: "1_1",
definition_category: "Test1",
definition_code: "Test_1_01",
definition_name: "定義1",
definition_value: "定義値1_1",
display_discernment_code: nil,
display_sort_no: 1,
language_code: "JP",
lock_version: 0,
status: 1
}
"""
def get_value_definition!(id), do: @repo.get!(ValueDefinition, id)

@doc """
Creates a value_definition.
iex(1)> attrs = %{"definition_category" => "Test1", "definition_name" => "定義1", "definition_code" => "Test_1_03", "definition_value" => "定義値", "display_sort_no" => 3}
iex(2)> {:ok, results} = Materia.Definitions.create_value_definition(attrs)
iex(3)> view = MateriaWeb.ValueDefinitionView.render("show.json", %{value_definition: results})
iex(4)> view = [view] |> Enum.map(fn x -> x = Map.delete(x, :id) end) |> List.first
%{
definition_abbreviated: nil,
definition_category: "Test1",
definition_code: "Test_1_03",
definition_name: "定義1",
definition_value: "定義値",
display_discernment_code: nil,
display_sort_no: 3,
language_code: nil,
lock_version: 0,
status: 1
}
"""
def create_value_definition(attrs \\ %{}) do
%ValueDefinition{}
|> ValueDefinition.changeset(attrs)
|> @repo.insert()
end

@doc """
Updates a value_definition.
iex(1)> attrs = %{"definition_category" => "Test1", "definition_name" => "定義1", "definition_code" => "Test_1_03", "definition_value" => "定義値", "display_sort_no" => 3}
iex(2)> value_definition = Materia.Definitions.get_value_definition!(1)
iex(3)> {:ok, results} = Materia.Definitions.update_value_definition(value_definition, attrs)
iex(4)> view = MateriaWeb.ValueDefinitionView.render("show.json", %{value_definition: results})
iex(5)> view = [view] |> Enum.map(fn x -> x = Map.delete(x, :id) end) |> List.first
%{
definition_abbreviated: "1_1",
definition_category: "Test1",
definition_code: "Test_1_03",
definition_name: "定義1",
definition_value: "定義値",
display_discernment_code: nil,
display_sort_no: 3,
language_code: "JP",
lock_version: 1,
status: 1
}
"""
def update_value_definition(%ValueDefinition{} = value_definition, attrs) do
value_definition
|> ValueDefinition.changeset(attrs)
|> @repo.update()
end

@doc """
Deletes a ValueDefinition.
iex(1)> value_definition = Materia.Definitions.get_value_definition!(1)
iex(2)> {:ok, results} = Materia.Definitions.delete_value_definition(value_definition)
iex(3)> Materia.Definitions.list_value_definitions() |> Enum.filter(fn x -> x.id == 1 end)
[]
"""
def delete_value_definition(%ValueDefinition{} = value_definition) do
@repo.delete(value_definition)
end

@doc """
Returns an `%Ecto.Changeset{}` for tracking value_definition changes.
"""
def change_value_definition(%ValueDefinition{} = value_definition) do
ValueDefinition.changeset(value_definition, %{})
end

@doc """
汎用検索用エンドポイント
iex(1)> params = %{"and" => [%{"language_code" => "JP"}], "or" => [%{"definition_code" => "Test_1_01"}, %{"definition_code" => "Test_2_02"}]}
iex(1)> results = Materia.Definitions.list_value_definitions_by_params(params)
iex(2)> view = MateriaWeb.ValueDefinitionView.render("index.json", %{value_definitions: results})
iex(3)> view = view |> Enum.map(fn x -> x = Map.delete(x, :id) end)
%{
definition_abbreviated: "1_1",
definition_category: "Test1",
definition_code: "Test_1_01",
definition_name: "定義1",
definition_value: "定義値1_1",
display_discernment_code: nil,
display_sort_no: 1,
language_code: "JP",
lock_version: 0,
status: 1
},
%{
definition_abbreviated: "2_2",
definition_category: "Test2",
definition_code: "Test_2_02",
definition_name: "定義2",
definition_value: "定義値2_2",
display_discernment_code: nil,
display_sort_no: 2,
language_code: "JP",
lock_version: 0,
status: 1
}
]
"""
def list_value_definitions_by_params(params) do
EctoUtil.select_by_param(@repo, ValueDefinition, params)
|> Enum.sort(
fn x, y ->
x.definition_category < y.definition_category or (
x.definition_category == y.definition_category and
x.display_sort_no < y.display_sort_no)
end
)
end
end
33 changes: 33 additions & 0 deletions lib/materia/definitions/value_definition.ex
@@ -0,0 +1,33 @@
defmodule Materia.Definitions.ValueDefinition do
use Ecto.Schema
import Ecto.Changeset


schema "value_definitions" do
field :definition_abbreviated, :string
field :definition_category, :string
field :definition_code, :string
field :definition_name, :string
field :definition_value, :string
field :display_discernment_code, :string
field :display_sort_no, :integer
field :language_code, :string
field :lock_version, :integer, default: 0
field :status, :integer, default: 1

timestamps()
end

def changeset(value_definition, attrs) do
value_definition
|> cast(attrs, [:definition_category, :definition_name, :definition_code, :definition_value, :definition_abbreviated, :display_sort_no, :display_discernment_code, :language_code, :status, :lock_version])
|> validate_required([:definition_category, :definition_name, :definition_code, :definition_value, :display_sort_no])
end

def update_changeset(value_definition, attrs) do
value_definition
|> cast(attrs, [:definition_category, :definition_name, :definition_code, :definition_value, :definition_abbreviated, :display_sort_no, :display_discernment_code, :language_code, :status, :lock_version])
|> validate_required([:definition_category, :definition_name, :definition_code, :definition_value, :display_sort_no, :lock_version])
|> optimistic_lock(:lock_version)
end
end
47 changes: 47 additions & 0 deletions lib/materia_web/controllers/value_definition_controller.ex
@@ -0,0 +1,47 @@
defmodule MateriaWeb.ValueDefinitionController do
use MateriaWeb, :controller

alias Materia.Definitions
alias Materia.Definitions.ValueDefinition

action_fallback MateriaWeb.FallbackController

def index(conn, _params) do
value_definitions = Definitions.list_value_definitions()
render(conn, "index.json", value_definitions: value_definitions)
end

def create(conn, %{"value_definition" => value_definition_params}) do
with {:ok, %ValueDefinition{} = value_definition} <- Definitions.create_value_definition(value_definition_params) do
conn
|> put_status(:created)
|> put_resp_header("location", value_definition_path(conn, :show, value_definition))
|> render("show.json", value_definition: value_definition)
end
end

def show(conn, %{"id" => id}) do
value_definition = Definitions.get_value_definition!(id)
render(conn, "show.json", value_definition: value_definition)
end

def update(conn, %{"id" => id, "value_definition" => value_definition_params}) do
value_definition = Definitions.get_value_definition!(id)

with {:ok, %ValueDefinition{} = value_definition} <- Definitions.update_value_definition(value_definition, value_definition_params) do
render(conn, "show.json", value_definition: value_definition)
end
end

def delete(conn, %{"id" => id}) do
value_definition = Definitions.get_value_definition!(id)
with {:ok, %ValueDefinition{}} <- Definitions.delete_value_definition(value_definition) do
send_resp(conn, :no_content, "")
end
end

def list_definitions_by_params(conn, value_definition_params) do
value_definitions = Definitions.list_value_definitions_by_params(value_definition_params)
render(conn, "index.json", value_definitions: value_definitions)
end
end
3 changes: 2 additions & 1 deletion lib/materia_web/router.ex
Expand Up @@ -73,7 +73,8 @@ defmodule MateriaWeb.Router do
post "create-my-addres", AddressController, :create_my_address
resources "/accounts", AccountController, except: [:new, :edit]
post "search-accounts", AccountController, :list_accounts_by_params

resources "/value-definitions", ValueDefinitionController, except: [:new, :edit]
post "search-definitions", ValueDefinitionController, :list_definitions_by_params
end

scope "/api", MateriaWeb do
Expand Down
28 changes: 28 additions & 0 deletions lib/materia_web/views/value_definition_view.ex
@@ -0,0 +1,28 @@
defmodule MateriaWeb.ValueDefinitionView do
use MateriaWeb, :view
alias MateriaWeb.ValueDefinitionView

def render("index.json", %{value_definitions: value_definitions}) do
render_many(value_definitions, ValueDefinitionView, "value_definition.json")
end

def render("show.json", %{value_definition: value_definition}) do
render_one(value_definition, ValueDefinitionView, "value_definition.json")
end

def render("value_definition.json", %{value_definition: value_definition}) do
%{
id: value_definition.id,
definition_category: value_definition.definition_category,
definition_name: value_definition.definition_name,
definition_code: value_definition.definition_code,
definition_value: value_definition.definition_value,
definition_abbreviated: value_definition.definition_abbreviated,
display_sort_no: value_definition.display_sort_no,
display_discernment_code: value_definition.display_discernment_code,
language_code: value_definition.language_code,
status: value_definition.status,
lock_version: value_definition.lock_version
}
end
end
23 changes: 23 additions & 0 deletions lib/mix/templates/7_create_value_definitions.exs
@@ -0,0 +1,23 @@
defmodule Materia.Repo.Migrations.CreateValueDefinitions do
use Ecto.Migration

def change do
create table(:value_definitions) do
add :definition_category, :string
add :definition_name, :string
add :definition_code, :string
add :definition_value, :string
add :definition_abbreviated, :string
add :display_sort_no, :integer
add :display_discernment_code, :string
add :language_code, :string
add :status, :integer
add :lock_version, :bigint

timestamps()
end

create index(:value_definitions, [:definition_category])
create unique_index(:value_definitions, [:definition_category, :definition_code, :language_code])
end
end
23 changes: 23 additions & 0 deletions priv/repo/migrations/20190306050919_create_value_definitions.exs
@@ -0,0 +1,23 @@
defmodule Materia.Repo.Migrations.CreateValueDefinitions do
use Ecto.Migration

def change do
create table(:value_definitions) do
add :definition_category, :string
add :definition_name, :string
add :definition_code, :string
add :definition_value, :string
add :definition_abbreviated, :string
add :display_sort_no, :integer
add :display_discernment_code, :string
add :language_code, :string
add :status, :integer
add :lock_version, :bigint

timestamps()
end

create index(:value_definitions, [:definition_category])
create unique_index(:value_definitions, [:definition_category, :definition_code, :language_code])
end
end

0 comments on commit a5977bc

Please sign in to comment.