@@ -9,18 +9,18 @@ defmodule Cadet.Assets.Assets do
99 if ( Mix . env ( ) == :test , do: [ "testFolder" ] , else: [ ] )
1010 @ accepted_file_types ~w( .jpg .jpeg .gif .png .wav .mp3 .txt)
1111
12- def upload_to_s3 ( upload_params , course_id , folder_name , file_name ) do
12+ def upload_to_s3 ( upload_params , prefix , folder_name , file_name ) do
1313 file_type = Path . extname ( file_name )
1414
1515 with :ok <- validate_file_name ( file_name ) ,
1616 :ok <- validate_folder_name ( folder_name ) ,
1717 :ok <- validate_file_type ( file_type ) do
18- if object_exists? ( course_id , folder_name , file_name ) do
18+ if object_exists? ( prefix , folder_name , file_name ) do
1919 { :error , { :bad_request , "File already exists" } }
2020 else
2121 file = upload_params . path
2222
23- s3_path = "#{ prefix ( ) } #{ course_id } / #{ folder_name } /#{ file_name } "
23+ s3_path = "#{ prefix } #{ folder_name } /#{ file_name } "
2424
2525 file
2626 |> Upload . stream_file ( )
@@ -32,25 +32,29 @@ defmodule Cadet.Assets.Assets do
3232 end
3333 end
3434
35- def list_assets ( course_id , folder_name ) do
35+ def list_assets ( prefix , folder_name ) do
36+ prefix_len = byte_size ( prefix )
37+
3638 case validate_folder_name ( folder_name ) do
3739 :ok ->
3840 bucket ( )
39- |> S3 . list_objects ( prefix: " #{ prefix ( ) } #{ course_id } /" <> folder_name <> "/" )
41+ |> S3 . list_objects ( prefix: prefix <> folder_name <> "/" )
4042 |> ExAws . stream! ( )
41- |> Enum . map ( fn file -> file . key end )
43+ |> Enum . map ( fn file ->
44+ binary_part ( file . key , prefix_len , byte_size ( file . key ) - prefix_len )
45+ end )
4246
4347 { :error , _ } = error ->
4448 error
4549 end
4650 end
4751
48- def delete_object ( course_id , folder_name , file_name ) do
52+ def delete_object ( prefix , folder_name , file_name ) do
4953 with :ok <- validate_file_name ( file_name ) ,
5054 :ok <- validate_folder_name ( folder_name ) do
51- if object_exists? ( course_id , folder_name , file_name ) do
55+ if object_exists? ( prefix , folder_name , file_name ) do
5256 bucket ( )
53- |> S3 . delete_object ( "#{ prefix ( ) } #{ course_id } / #{ folder_name } /#{ file_name } " )
57+ |> S3 . delete_object ( "#{ prefix } #{ folder_name } /#{ file_name } " )
5458 |> ExAws . request! ( )
5559
5660 :ok
@@ -60,11 +64,11 @@ defmodule Cadet.Assets.Assets do
6064 end
6165 end
6266
63- @ spec object_exists? ( integer ( ) , binary , binary ) :: boolean ( )
64- def object_exists? ( course_id , folder_name , file_name ) do
67+ @ spec object_exists? ( integer ( ) | binary ( ) , binary , binary ) :: boolean ( )
68+ def object_exists? ( prefix , folder_name , file_name ) do
6569 response =
6670 bucket ( )
67- |> S3 . head_object ( "#{ prefix ( ) } #{ course_id } / #{ folder_name } /#{ file_name } " )
71+ |> S3 . head_object ( "#{ prefix } #{ folder_name } /#{ file_name } " )
6872 |> ExAws . request ( )
6973
7074 case response do
@@ -99,5 +103,6 @@ defmodule Cadet.Assets.Assets do
99103
100104 defp bucket , do: :cadet |> Application . fetch_env! ( :uploader ) |> Keyword . get ( :assets_bucket )
101105
102- defp prefix , do: :cadet |> Application . fetch_env! ( :uploader ) |> Keyword . get ( :assets_prefix , "" )
106+ def assets_prefix ,
107+ do: :cadet |> Application . fetch_env! ( :uploader ) |> Keyword . get ( :assets_prefix , "" )
103108end
0 commit comments