Packages
arke
0.3.14
1.1.33
retired
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.4.0-bulk.1
0.4.0-bulk.0
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.1.38
0.1.37
0.1.36
0.1.35
0.1.34
0.1.33
0.1.32
0.1.31
0.1.30
0.1.29
0.1.28
0.1.27
0.1.26
0.1.25
0.1.24
0.1.23
0.1.22
0.1.21
0.1.20
0.1.19
0.1.18
0.1.17
0.1.16
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
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
Arke low code framework Core
Current section
Files
Jump to
Current section
Files
lib/arke/utils/export.ex
# Copyright 2023 Arkemis S.r.l.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
defmodule Arke.Utils.Export do
alias Arke.QueryManager
alias Arke.Boundary.ArkeManager
def get_db_structure(project, opts \\ []) do
data = get_data(project, opts)
arke = prepare_arke(data.arke, data.arke_parameter)
group = prepare_group(data.group)
parameter = prepare_parameter(data.parameter)
permission = prepare_permission(data.permission)
%{arke: arke, group: group, parameter: parameter, link: permission}
end
def get_data(project, opts) do
# if the opts doesn not include any flag then export all
if not Enum.any?(Keyword.keys(opts), fn k -> k in [:arke, :parameter, :group] end) do
get_all(project)
else
arke = get_arke(project, opts[:arke])
arke_parameter = get_arke_parameter(project)
parameter = get_parameter(project, opts[:parameter])
group = get_group(project, opts[:group])
permission = get_permission(project)
%{
arke: arke,
parameter: parameter,
group: group,
permission: permission,
arke_parameter: arke_parameter
}
end
end
defp get_arke(project, nil), do: []
defp get_arke(project, _), do: QueryManager.filter_by(project: project, arke_id: "arke")
defp get_parameter(project, nil), do: []
defp get_parameter(project, _),
do:
QueryManager.filter_by(
project: project,
arke_id__in: Arke.Utils.DefaultData.get_parameters_id()
)
defp get_group(project, nil), do: []
defp get_group(project, _), do: QueryManager.filter_by(project: project, arke_id: "group")
defp get_permission(project) do
arke_link = ArkeManager.get(:arke_link, :arke_system)
QueryManager.query(project: project, arke: arke_link.id)
|> QueryManager.where(type: "permission")
|> QueryManager.all()
end
defp get_arke_parameter(project) do
arke_link = ArkeManager.get(:arke_link, :arke_system)
QueryManager.query(project: project, arke: arke_link.id)
|> QueryManager.where(type: "parameter")
|> QueryManager.all()
end
defp get_all(project) do
data =
QueryManager.filter_by(project: project, arke_id__in: Arke.Utils.DefaultData.get_arke_id())
p_list = Arke.Utils.DefaultData.get_parameters_id()
parsed_data =
Enum.reduce(data, %{arke: [], group: [], parameter: []}, fn unit, acc ->
parse_data(unit, to_string(unit.arke_id), p_list, acc)
end)
|> Map.put(:permission, get_permission(project))
|> Map.put(:arke_parameter, get_arke_parameter(project))
end
defp parse_data(unit, "arke", _p_list, acc), do: %{acc | arke: acc.arke ++ [unit]}
defp parse_data(unit, "group", _p_list, acc), do: %{acc | group: acc.group ++ [unit]}
defp parse_data(unit, arke_id, p_list, acc) do
if arke_id in p_list do
%{acc | parameter: acc.parameter ++ [unit]}
else
acc
end
end
# parse arke and make them usable for seed_project
defp prepare_arke(data, arke_param_list) do
Enum.map(data, fn arke ->
parameters =
Enum.filter(arke_param_list, fn p -> to_string(p.data.parent_id) == to_string(arke.id) end)
|> Enum.map(fn p ->
%{id: to_string(p.data.child_id), metadata: Map.delete(p.metadata, :project)}
end)
|> Enum.sort_by(&Map.fetch(&1, :id))
%{id: to_string(arke.id), label: arke.data.label, parameters: parameters}
end)
|> Enum.sort_by(&Map.fetch(&1, :id))
end
defp prepare_group(data) do
Enum.map(data, fn group ->
ordered_arke = Enum.sort_by(group.data.arke_list, & &1)
%{
id: to_string(group.id),
label: group.data.label,
description: group.data.description,
arke_list: ordered_arke
}
end)
|> Enum.sort_by(&Map.fetch(&1, :id))
end
defp prepare_parameter(data),
do:
Enum.map(data, fn parameter ->
Map.put(parameter.data, :id, to_string(parameter.id))
|> Map.put(:type, to_string(parameter.arke_id))
end)
|> Enum.sort_by(&Map.fetch(&1, :id))
defp prepare_permission(data),
do:
Enum.map(data, fn permission ->
%{
parent: permission.data.parent_id,
child: permission.data.child_id,
metadata: Map.delete(permission.metadata, :project),
type: permission.data.type
}
end)
|> Enum.sort_by(&Map.fetch(&1, :parent))
end