From 43584acc1eb79ecc81c1899a76b67bbe56fc4c47 Mon Sep 17 00:00:00 2001 From: Miguel Michelson Martinez Date: Sun, 5 May 2024 13:17:14 -0400 Subject: [PATCH] get tracks queries --- app/controllers/likes_controller.rb | 11 +++++++ app/controllers/users_controller.rb | 8 +++-- app/models/user.rb | 43 +++++++++++++++++++++++---- app/views/tracks/_track_item.html.erb | 2 +- config/routes.rb | 2 ++ 5 files changed, 57 insertions(+), 9 deletions(-) diff --git a/app/controllers/likes_controller.rb b/app/controllers/likes_controller.rb index 4d5b04a..99ac617 100644 --- a/app/controllers/likes_controller.rb +++ b/app/controllers/likes_controller.rb @@ -1,9 +1,14 @@ class LikesController < ApplicationController + + before_action :check_user + def create @resource = find_resource @button_class = current_user.toggle_like!(@resource) ? "button-active" : "button" end + private + def find_resource if params[:track_id] @resource = Track.friendly.find(params[:track_id]) @@ -11,4 +16,10 @@ def find_resource @resource = Playlist.friendly.find(params[:playlist_id]) end end + + def check_user + redirect_to new_user_session_path and return if current_user.blank? + end + + end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 8bd56c3..42aec64 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -20,6 +20,8 @@ def show get_meta_tags @as = :track @section = "tracks/track_item" + + # render @user.label ? "labels/show" : "show" end def tracks @@ -28,7 +30,6 @@ def tracks @as = :track @title = "Tracks" @section = "tracks/track_item" - paginated_render end @@ -152,13 +153,14 @@ def get_tracks # @collection = @user.tracks.page(params[:page]).per(2) @collection = if current_user && @user.id == current_user&.id User.track_preloaded_by_user(current_user&.id) - .where(user_id: @user.id) + #.where(user_id: @user.id) .with_attached_cover .includes(user: {avatar_attachment: :blob}) .order("id desc") .page(params[:page]).per(6) else - @user.tracks.published + User.track_preloaded_by_user_n(@user&.id) + #@user.tracks.published .with_attached_cover .includes(user: {avatar_attachment: :blob}) .order("id desc").page(params[:page]).per(6) diff --git a/app/models/user.rb b/app/models/user.rb index b32608d..394902a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -87,7 +87,7 @@ def self.track_preloaded_by_user(id) # Track.left_outer_joins(:reposts, :likes) # .where("reposts.user_id = :id OR likes.liker_id = :id OR reposts.user_id IS NULL OR likes.liker_id IS NULL", id: id) # .includes(:audio_blob, :cover_blob, user: :avatar_attachment) - + user = User.find(id) tracks = Track.arel_table users = User.arel_table reposts_alias = Repost.arel_table.alias("r") @@ -107,10 +107,43 @@ def self.track_preloaded_by_user(id) .and(likes_alias[:liker_type].eq("User"))) .join_sources - result = Track.includes(:audio_blob, :cover_blob, user: :avatar_attachment) - .joins(reposts_join, likes_join) - .select("tracks.*, r.id as repost_id, l.id as like_id") - .references(:r, :l) + if !user.label + result = Track.includes(:audio_blob, :cover_blob, user: :avatar_attachment) + .joins(reposts_join, likes_join) + .select("tracks.*, r.id as repost_id, l.id as like_id") + .references(:r, :l) + return result + else + + # Gather child account IDs + child_ids = User.find(id).child_accounts.pluck(:id) + + # Adjust where clause to include tracks from child accounts + result = Track.includes(:audio_blob, :cover_blob, user: :avatar_attachment) + .joins(reposts_join, likes_join) + .where(tracks[:user_id].eq(id).or(tracks[:user_id].in(child_ids))) + .select("tracks.*, r.id as repost_id, l.id as like_id") + .references(:r, :l) + end + + end + + def self.track_preloaded_by_user_n(id) + user = User.find(id) + tracks = Track.arel_table + users = User.arel_table + + if !user.label + result = Track.includes(:audio_blob, :cover_blob, user: :avatar_attachment) + return result + else + # Gather child account IDs + child_ids = User.find(id).child_accounts.pluck(:id) + # Adjust where clause to include tracks from child accounts + result = Track.includes(:audio_blob, :cover_blob, user: :avatar_attachment) + .where(tracks[:user_id].eq(id).or(tracks[:user_id].in(child_ids))) + end + end def reposts_preloaded diff --git a/app/views/tracks/_track_item.html.erb b/app/views/tracks/_track_item.html.erb index 8edee7d..da851b2 100644 --- a/app/views/tracks/_track_item.html.erb +++ b/app/views/tracks/_track_item.html.erb @@ -55,7 +55,7 @@ <%= track.title %> <% end %> -
<%= track.user.username %>
+
<%= track.user.username %> <%= track.id %>
<% if track.private %> diff --git a/config/routes.rb b/config/routes.rb index b5ff220..9762383 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -133,6 +133,8 @@ end end + resources :labels + constraints(Constraints::UsernameRouteConstrainer.new) do # Same route as before, only within the constraints block resources :users, path: "" do