forked from shibao/cannery
add json export in settings
This commit is contained in:
65
lib/cannery_web/controllers/export_controller.ex
Normal file
65
lib/cannery_web/controllers/export_controller.ex
Normal file
@ -0,0 +1,65 @@
|
||||
defmodule CanneryWeb.ExportController do
|
||||
use CanneryWeb, :controller
|
||||
alias Cannery.{ActivityLog, Ammo, Containers}
|
||||
|
||||
def export(%{assigns: %{current_user: current_user}} = conn, %{"mode" => "json"}) do
|
||||
ammo_types =
|
||||
Ammo.list_ammo_types(current_user)
|
||||
|> Enum.map(fn ammo_type ->
|
||||
average_cost = ammo_type |> Ammo.get_average_cost_for_ammo_type!(current_user)
|
||||
round_count = ammo_type |> Ammo.get_round_count_for_ammo_type(current_user)
|
||||
used_count = ammo_type |> Ammo.get_used_count_for_ammo_type(current_user)
|
||||
ammo_group_count = ammo_type |> Ammo.get_ammo_groups_count_for_type(current_user, true)
|
||||
|
||||
ammo_type
|
||||
|> Jason.encode!()
|
||||
|> Jason.decode!()
|
||||
|> Map.merge(%{
|
||||
"average_cost" => average_cost,
|
||||
"round_count" => round_count,
|
||||
"used_count" => used_count,
|
||||
"ammo_group_count" => ammo_group_count
|
||||
})
|
||||
end)
|
||||
|
||||
ammo_groups =
|
||||
Ammo.list_ammo_groups(current_user, true)
|
||||
|> Enum.map(fn ammo_group ->
|
||||
used_count = ammo_group |> Ammo.get_used_count()
|
||||
percentage_remaining = ammo_group |> Ammo.get_percentage_remaining()
|
||||
|
||||
ammo_group
|
||||
|> Jason.encode!()
|
||||
|> Jason.decode!()
|
||||
|> Map.merge(%{
|
||||
"used_count" => used_count,
|
||||
"percentage_remaining" => percentage_remaining
|
||||
})
|
||||
end)
|
||||
|
||||
shot_groups = ActivityLog.list_shot_groups(current_user)
|
||||
|
||||
containers =
|
||||
Containers.list_containers(current_user)
|
||||
|> Enum.map(fn container ->
|
||||
ammo_group_count = container |> Containers.get_container_ammo_group_count!()
|
||||
round_count = container |> Containers.get_container_rounds!()
|
||||
|
||||
container
|
||||
|> Jason.encode!()
|
||||
|> Jason.decode!()
|
||||
|> Map.merge(%{
|
||||
"ammo_group_count" => ammo_group_count,
|
||||
"round_count" => round_count
|
||||
})
|
||||
end)
|
||||
|
||||
json(conn, %{
|
||||
user: current_user,
|
||||
ammo_types: ammo_types,
|
||||
ammo_groups: ammo_groups,
|
||||
shot_groups: shot_groups,
|
||||
containers: containers
|
||||
})
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user