feat(elixir): QR code generate & download function
This commit is contained in:
@@ -21,8 +21,17 @@ defmodule ComponentsElixir.Inventory do
|
||||
|> Repo.all()
|
||||
|
||||
# Compute hierarchy fields for all locations efficiently
|
||||
compute_hierarchy_fields_batch(locations)
|
||||
processed_locations = compute_hierarchy_fields_batch(locations)
|
||||
|> Enum.sort_by(&{&1.level, &1.name})
|
||||
|
||||
# Ensure QR codes exist for all locations (in background)
|
||||
spawn(fn ->
|
||||
Enum.each(processed_locations, fn location ->
|
||||
ComponentsElixir.QRCode.get_qr_image_url(location)
|
||||
end)
|
||||
end)
|
||||
|
||||
processed_locations
|
||||
end
|
||||
|
||||
# Efficient batch computation of hierarchy fields
|
||||
@@ -123,9 +132,18 @@ defmodule ComponentsElixir.Inventory do
|
||||
# Convert string keys to atoms to maintain consistency
|
||||
attrs = normalize_string_keys(attrs)
|
||||
|
||||
%StorageLocation{}
|
||||
result = %StorageLocation{}
|
||||
|> StorageLocation.changeset(attrs)
|
||||
|> Repo.insert()
|
||||
|
||||
case result do
|
||||
{:ok, location} ->
|
||||
# Automatically generate QR code image
|
||||
spawn(fn -> ComponentsElixir.QRCode.get_qr_image_url(location) end)
|
||||
{:ok, location}
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
@@ -135,15 +153,27 @@ defmodule ComponentsElixir.Inventory do
|
||||
# Convert string keys to atoms to maintain consistency
|
||||
attrs = normalize_string_keys(attrs)
|
||||
|
||||
storage_location
|
||||
result = storage_location
|
||||
|> StorageLocation.changeset(attrs)
|
||||
|> Repo.update()
|
||||
|
||||
case result do
|
||||
{:ok, updated_location} ->
|
||||
# Automatically regenerate QR code image if name or hierarchy changed
|
||||
spawn(fn -> ComponentsElixir.QRCode.get_qr_image_url(updated_location, force_regenerate: true) end)
|
||||
{:ok, updated_location}
|
||||
error ->
|
||||
error
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deletes a storage location.
|
||||
"""
|
||||
def delete_storage_location(%StorageLocation{} = storage_location) do
|
||||
# Clean up QR code image before deleting
|
||||
ComponentsElixir.QRCode.cleanup_qr_image(storage_location.id)
|
||||
|
||||
Repo.delete(storage_location)
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user