feat: add configs for impor tlimits
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
9fd617e45a
commit
3f551c5f8d
3 changed files with 55 additions and 4 deletions
|
|
@ -51,6 +51,12 @@ config :mv,
|
||||||
generators: [timestamp_type: :utc_datetime],
|
generators: [timestamp_type: :utc_datetime],
|
||||||
ash_domains: [Mv.Membership, Mv.Accounts, Mv.MembershipFees, Mv.Authorization]
|
ash_domains: [Mv.Membership, Mv.Accounts, Mv.MembershipFees, Mv.Authorization]
|
||||||
|
|
||||||
|
# CSV Import configuration
|
||||||
|
config :mv, csv_import: [
|
||||||
|
max_file_size_mb: 10,
|
||||||
|
max_rows: 1000
|
||||||
|
]
|
||||||
|
|
||||||
# Configures the endpoint
|
# Configures the endpoint
|
||||||
config :mv, MvWeb.Endpoint,
|
config :mv, MvWeb.Endpoint,
|
||||||
url: [host: "localhost"],
|
url: [host: "localhost"],
|
||||||
|
|
|
||||||
|
|
@ -21,4 +21,50 @@ defmodule Mv.Config do
|
||||||
def sql_sandbox? do
|
def sql_sandbox? do
|
||||||
Application.get_env(:mv, :sql_sandbox, false)
|
Application.get_env(:mv, :sql_sandbox, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns the maximum file size for CSV imports in bytes.
|
||||||
|
|
||||||
|
Reads the `max_file_size_mb` value from the CSV import configuration
|
||||||
|
and converts it to bytes.
|
||||||
|
|
||||||
|
## Returns
|
||||||
|
|
||||||
|
- Maximum file size in bytes (default: 10_485_760 bytes = 10 MB)
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> Mv.Config.csv_import_max_file_size_bytes()
|
||||||
|
10_485_760
|
||||||
|
"""
|
||||||
|
@spec csv_import_max_file_size_bytes() :: non_neg_integer()
|
||||||
|
def csv_import_max_file_size_bytes do
|
||||||
|
max_file_size_mb = get_csv_import_config(:max_file_size_mb, 10)
|
||||||
|
max_file_size_mb * 1024 * 1024
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Returns the maximum number of rows allowed in CSV imports.
|
||||||
|
|
||||||
|
Reads the `max_rows` value from the CSV import configuration.
|
||||||
|
|
||||||
|
## Returns
|
||||||
|
|
||||||
|
- Maximum number of rows (default: 1000)
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> Mv.Config.csv_import_max_rows()
|
||||||
|
1000
|
||||||
|
"""
|
||||||
|
@spec csv_import_max_rows() :: pos_integer()
|
||||||
|
def csv_import_max_rows do
|
||||||
|
get_csv_import_config(:max_rows, 1000)
|
||||||
|
end
|
||||||
|
|
||||||
|
# Helper function to get CSV import config values
|
||||||
|
defp get_csv_import_config(key, default) do
|
||||||
|
Application.get_env(:mv, :csv_import, [])
|
||||||
|
|> Keyword.get(key, default)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -54,8 +54,6 @@ defmodule MvWeb.GlobalSettingsLive do
|
||||||
on_mount {MvWeb.LiveHelpers, :ensure_user_role_loaded}
|
on_mount {MvWeb.LiveHelpers, :ensure_user_role_loaded}
|
||||||
|
|
||||||
# CSV Import configuration constants
|
# CSV Import configuration constants
|
||||||
# 10 MB
|
|
||||||
@max_file_size_bytes 10_485_760
|
|
||||||
@max_errors 50
|
@max_errors 50
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
|
|
@ -82,7 +80,7 @@ defmodule MvWeb.GlobalSettingsLive do
|
||||||
|> allow_upload(:csv_file,
|
|> allow_upload(:csv_file,
|
||||||
accept: ~w(.csv),
|
accept: ~w(.csv),
|
||||||
max_entries: 1,
|
max_entries: 1,
|
||||||
max_file_size: @max_file_size_bytes,
|
max_file_size: Config.csv_import_max_file_size_bytes(),
|
||||||
auto_upload: true
|
auto_upload: true
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -409,7 +407,8 @@ defmodule MvWeb.GlobalSettingsLive do
|
||||||
# Processes CSV upload and starts import
|
# Processes CSV upload and starts import
|
||||||
defp process_csv_upload(socket) do
|
defp process_csv_upload(socket) do
|
||||||
with {:ok, content} <- consume_and_read_csv(socket),
|
with {:ok, content} <- consume_and_read_csv(socket),
|
||||||
{:ok, import_state} <- MemberCSV.prepare(content) do
|
{:ok, import_state} <-
|
||||||
|
MemberCSV.prepare(content, max_rows: Config.csv_import_max_rows()) do
|
||||||
start_import(socket, import_state)
|
start_import(socket, import_state)
|
||||||
else
|
else
|
||||||
{:error, reason} when is_binary(reason) ->
|
{:error, reason} when is_binary(reason) ->
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue