From 8befa3058c3c4ac96097f5bc5ddf612aa056cbc8 Mon Sep 17 00:00:00 2001 From: codevictory Date: Wed, 26 May 2021 18:35:44 +0300 Subject: [PATCH] MIDWAY: Performers photo adding. --- config/config.exs | 5 ++-- .../controllers/performer_controller.ex | 23 +++++++++++++++++-- .../templates/performer/form.html.eex | 6 ++--- mix.exs | 3 ++- mix.lock | 1 + 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/config/config.exs b/config/config.exs index d0fbed4..fb592cd 100644 --- a/config/config.exs +++ b/config/config.exs @@ -8,7 +8,8 @@ import Config config :runosaari, - ecto_repos: [Runosaari.Repo] + ecto_repos: [Runosaari.Repo], + public_s3_host: System.get_env("S3_PUBLIC_HOST") # Configures the endpoint config :runosaari, RunosaariWeb.Endpoint, @@ -35,5 +36,5 @@ config :ex_aws, access_key_id: System.get_env("S3_ACCESS_KEY"), secret_access_key: System.get_env("S3_SECRET_KEY"), s3: [ - host: System.get_env("S3_BUCKET_HOST") + host: System.get_env("S3_PRIVATE_HOST") ] diff --git a/lib/runosaari_web/controllers/performer_controller.ex b/lib/runosaari_web/controllers/performer_controller.ex index 35d7158..39a5298 100644 --- a/lib/runosaari_web/controllers/performer_controller.ex +++ b/lib/runosaari_web/controllers/performer_controller.ex @@ -19,8 +19,27 @@ defmodule RunosaariWeb.PerformerController do render(conn, "new.html", changeset: changeset) end - def create(conn, %{"performer" => performer_params}) do - case Registration.create_performer(performer_params) do + def create(conn, %{"performer" => %{"photo" => photo_params} = performer_params}) do + file_uuid = UUID.uuid4(:hex) + photo_filename = photo_params.filename + unique_filename = "#{file_uuid}-#{photo_filename}" + {:ok, photo_binary} = File.read(photo_params.path) + bucket_name = System.get_env("S3_BUCKET_NAME") + public_host = System.get_env("S3_PUBLIC_HOST") + + photo = + ExAws.S3.put_object(bucket_name, unique_filename, photo_binary) + |> ExAws.request!() + + updated_params = + performer_params + |> Map.update(photo, photo_params, fn _value -> + "https://#{public_host}/#{bucket_name}/performer_photos/#{unique_filename}" + end) + + updated_changeset = Performer.changeset(%Performer{}, updated_params) + + case Registration.create_performer(updated_changeset) do {:ok, _performer} -> conn |> put_flash( diff --git a/lib/runosaari_web/templates/performer/form.html.eex b/lib/runosaari_web/templates/performer/form.html.eex index 240758e..34ed162 100644 --- a/lib/runosaari_web/templates/performer/form.html.eex +++ b/lib/runosaari_web/templates/performer/form.html.eex @@ -17,9 +17,9 @@ <%= textarea form, :seqnum %> <%= error_tag form, :seqnum %> - <%= label form, :photo_path, "Esiintyjän kuva" %> - <%= file_input form, :photo_path %> - <%= error_tag form, :photo_path %> + <%= label form, :photo, "Esiintyjän kuva" %> + <%= file_input form, :photo %> + <%= error_tag form, :photo %>
<%= checkbox form, :confirmed %> diff --git a/mix.exs b/mix.exs index 35a1ee0..fb221ca 100644 --- a/mix.exs +++ b/mix.exs @@ -51,7 +51,8 @@ defmodule Runosaari.MixProject do {:ex_aws, "~> 2.0"}, {:ex_aws_s3, "~> 2.0"}, {:poison, "~> 3.0"}, - {:hackney, "~> 1.9"} + {:hackney, "~> 1.9"}, + {:uuid, "~> 1.1"} ] end diff --git a/mix.lock b/mix.lock index 1190a64..4296ced 100644 --- a/mix.lock +++ b/mix.lock @@ -41,4 +41,5 @@ "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.0", "da9d49ee7e6bb1c259d36ce6539cd45ae14d81247a2b0c90edf55e2b50507f7b", [:mix], [{:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5cfe67ad464b243835512aa44321cee91faed6ea868d7fb761d7016e02915c3d"}, "telemetry_poller": {:hex, :telemetry_poller, "0.5.1", "21071cc2e536810bac5628b935521ff3e28f0303e770951158c73eaaa01e962a", [:rebar3], [{:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4cab72069210bc6e7a080cec9afffad1b33370149ed5d379b81c7c5f0c663fd4"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, + "uuid": {:hex, :uuid, "1.1.8", "e22fc04499de0de3ed1116b770c7737779f226ceefa0badb3592e64d5cfb4eb9", [:mix], [], "hexpm", "c790593b4c3b601f5dc2378baae7efaf5b3d73c4c6456ba85759905be792f2ac"}, }