69 lines
2 KiB
Ruby
69 lines
2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class PhotoService
|
|
def initialize(user=nil, deny_raw_files=true)
|
|
@user = user
|
|
@deny_raw_files = deny_raw_files
|
|
end
|
|
|
|
def visible_photo(photo_guid)
|
|
Photo.owned_or_visible_by_user(@user).where(guid: photo_guid).first
|
|
end
|
|
|
|
def create_from_params_and_file(base_params, uploaded_file)
|
|
photo_params = build_params(base_params)
|
|
raise RuntimeError if @deny_raw_files && !confirm_uploaded_file_settings(uploaded_file)
|
|
|
|
photo_params[:user_file] = uploaded_file
|
|
photo = @user.build_post(:photo, photo_params)
|
|
raise RuntimeError unless photo.save
|
|
|
|
send_messages(photo, photo_params)
|
|
update_profile_photo(photo) if photo_params[:set_profile_photo]
|
|
|
|
photo
|
|
end
|
|
|
|
private
|
|
|
|
def build_params(base_params)
|
|
photo_params = base_params.permit(:pending, :set_profile_photo, aspect_ids: [])
|
|
if base_params.permit(:aspect_ids)[:aspect_ids] == "all"
|
|
photo_params[:aspect_ids] = @user.aspects.map(&:id)
|
|
elsif photo_params[:aspect_ids].is_a?(Hash)
|
|
photo_params[:aspect_ids] = params[:photo][:aspect_ids].values
|
|
end
|
|
photo_params
|
|
end
|
|
|
|
def confirm_uploaded_file_settings(uploaded_file)
|
|
unless uploaded_file.is_a?(ActionDispatch::Http::UploadedFile) || uploaded_file.is_a?(Rack::Test::UploadedFile)
|
|
return false
|
|
end
|
|
return false if uploaded_file.original_filename.empty?
|
|
|
|
return false if uploaded_file.content_type.empty?
|
|
|
|
true
|
|
end
|
|
|
|
def send_messages(photo, photo_params)
|
|
send_to_streams(photo, photo_params) unless photo.pending && photo.public?
|
|
|
|
@user.dispatch_post(photo, to: photo_params[:aspect_ids]) unless photo.pending
|
|
end
|
|
|
|
def update_profile_photo(photo)
|
|
profile_params = {
|
|
image_url: photo.url(:thumb_large),
|
|
image_url_medium: photo.url(:thumb_medium),
|
|
image_url_small: photo.url(:thumb_small)
|
|
}
|
|
@user.update_profile(profile_params)
|
|
end
|
|
|
|
def send_to_streams(photo, photo_params)
|
|
aspects = @user.aspects_from_ids(photo_params[:aspect_ids])
|
|
@user.add_to_streams(photo, aspects)
|
|
end
|
|
end
|