asset upload api wip

This commit is contained in:
Nuwan Chathuranga 2021-06-03 16:16:49 +05:30
parent d707a24443
commit 5f10503470
6 changed files with 81 additions and 2 deletions

View File

@ -0,0 +1,14 @@
# encoding: utf-8
class AssetUploader < CarrierWave::Uploader::Base
include CarrierWaveDirect::Uploader
include CarrierWave::MimeTypes
process :set_content_type
def initialize(*)
super
JamRuby::UploaderConfiguration.set_aws_public_configuration(self)
end
end

View File

@ -6,12 +6,12 @@
user_id character varying(64) NOT NULL,
asset_type character varying(64),
created_at timestamp without time zone DEFAULT now() NOT NULL,
url character varying(1024),
uri character varying(1024),
filename character varying(256),
recording_id character varying(64),
session_id character varying(64),
ext_id character varying(64),
metadata jsonb
metadata json
);
SQL
)

View File

@ -0,0 +1,10 @@
class AddUniqueIndexToUserAssetsExtId < ActiveRecord::Migration
def self.up
execute("ALTER TABLE user_assets ADD CONSTRAINT user_assets_ext_id_key UNIQUE (ext_id);")
end
def self.down
execute("ALTER TABLE user_assets DROP CONSTRAINT user_assets_ext_id_key;")
end
end

View File

@ -192,6 +192,8 @@ module JamRuby
has_many :gift_cards, :class_name => "JamRuby::GiftCard"
has_many :gift_card_purchases, :class_name => "JamRuby::GiftCardPurchase"
#uploads
has_many :user_assets, class_name: "JamRuby::UserAsset"
# affiliate_partner
has_one :affiliate_partner, :class_name => "JamRuby::AffiliatePartner", :foreign_key => :partner_user_id, inverse_of: :partner_user

View File

@ -0,0 +1,26 @@
module JamRuby
class UserAsset < ActiveRecord::Base
self.table_name = "user_assets"
self.primary_key = 'id'
belongs_to :user, :inverse_of => :user_assets, :class_name => "JamRuby::User"
validates :asset_type, :filename, :uri, presence: true
before_validation(on: :create) do
self.created_at ||= Time.now
self.id = SecureRandom.uuid
#type = description.gsub(/[^a-zA-Z0-9_.-]/, '')
#self.uri = "user_assets/#{type}/#{created_at.strftime('%Y-%m-%d')}/#{filename_no_ext}-#{self.id}.#{filename_ext}"
self.uri = "user_assets/#{created_at.strftime('%Y-%m-%d')}/#{filename_no_ext}-#{self.id}.#{filename_ext}"
end
def filename_no_ext
File.basename(filename, '.*')
end
def filename_ext
File.extname(filename)
end
end
end

View File

@ -727,6 +727,33 @@ class ApiUsersController < ApiController
end
def user_assets
user = User.find_by_id(params[:user_id])
@user_asset = UserAsset.new
@user_asset.user = user
@user_asset.asset_type = params[:asset_type]
@user_asset.fimename = params[:filename]
@user_asset.recording_id = params[:recording_id]
@user_asset.session_id = params[:session_id]
@user_asset.ext_id = params[:ext_id]
@user_asset.metadata = request.body.read
unless @user_asset.save
# There are at least some conditions on valid dumps (need client_type)
response.status = :unprocessable_entity
respond_with @user_asset
return
end
if Rails.application.config.storage_type == :fog
else
# we should store it here to aid in development, but we don't have to until someone wants the feature
# so... just return 200
render :json => {:id => @dump.id}, :status => 200
end
end
# user progression tracking
def downloaded_client