Move DB queries related to playlists in a separate module (1/3)
This commit is contained in:
		| @@ -816,11 +816,8 @@ post "/data_control" do |env| | ||||
|                 index:          Random::Secure.rand(0_i64..Int64::MAX), | ||||
|               }) | ||||
|  | ||||
|               video_array = playlist_video.to_a | ||||
|               args = arg_array(video_array) | ||||
|  | ||||
|               PG_DB.exec("INSERT INTO playlist_videos VALUES (#{args})", args: video_array) | ||||
|               PG_DB.exec("UPDATE playlists SET index = array_append(index, $1), video_count = cardinality(index) + 1, updated = $2 WHERE id = $3", playlist_video.index, Time.utc, playlist.id) | ||||
|               Invidious::Database::PlaylistVideos.insert(playlist_video) | ||||
|               Invidious::Database::Playlists.update_video_added(playlist.id, playlist_video.index) | ||||
|             end | ||||
|           end | ||||
|         end | ||||
|   | ||||
							
								
								
									
										94
									
								
								src/invidious/database/playlists.cr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								src/invidious/database/playlists.cr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| require "./base.cr" | ||||
|  | ||||
| # | ||||
| # This module contains functions related to the "playlists" table. | ||||
| # | ||||
| module Invidious::Database::Playlists | ||||
|   extend self | ||||
|  | ||||
|   # ------------------- | ||||
|   #  Insert / delete | ||||
|   # ------------------- | ||||
|  | ||||
|   def insert(playlist : InvidiousPlaylist) | ||||
|     playlist_array = playlist.to_a | ||||
|  | ||||
|     request = <<-SQL | ||||
|       INSERT INTO playlists | ||||
|       VALUES (#{arg_array(playlist_array)}) | ||||
|     SQL | ||||
|  | ||||
|     PG_DB.exec(request, args: playlist_array) | ||||
|   end | ||||
|  | ||||
|   # this function is a bit special: it will also remove all videos | ||||
|   # related to the given playlist ID in the "playlist_videos" table, | ||||
|   # in addition to deleting said ID from "playlists". | ||||
|   def delete(id : String) | ||||
|     request = <<-SQL | ||||
|       DELETE FROM playlist_videos * WHERE plid = $1; | ||||
|       DELETE FROM playlists * WHERE id = $1 | ||||
|     SQL | ||||
|  | ||||
|     PG_DB.exec(request, id) | ||||
|   end | ||||
|  | ||||
|   # ------------------- | ||||
|   #  Update | ||||
|   # ------------------- | ||||
|  | ||||
|   def update_video_added(id : String, index : String | Int64) | ||||
|     request = <<-SQL | ||||
|       UPDATE playlists | ||||
|       SET index = array_append(index, $1), | ||||
|           video_count = cardinality(index) + 1, | ||||
|           updated = $2 | ||||
|       WHERE id = $3 | ||||
|     SQL | ||||
|  | ||||
|     PG_DB.exec(request, index, Time.utc, id) | ||||
|   end | ||||
|  | ||||
|   def update_video_removed(id : String, index : String | Int64) | ||||
|     request = <<-SQL | ||||
|       UPDATE playlists | ||||
|       SET index = array_remove(index, $1), | ||||
|           video_count = cardinality(index) - 1, | ||||
|           updated = $2 | ||||
|       WHERE id = $3 | ||||
|     SQL | ||||
|  | ||||
|     PG_DB.exec(request, index, Time.utc, id) | ||||
|   end | ||||
| end | ||||
|  | ||||
| # | ||||
| # This module contains functions related to the "playlist_videos" table. | ||||
| # | ||||
| module Invidious::Database::PlaylistVideos | ||||
|   extend self | ||||
|  | ||||
|   # ------------------- | ||||
|   #  Insert / Delete | ||||
|   # ------------------- | ||||
|  | ||||
|   def insert(video : PlaylistVideo) | ||||
|     video_array = video.to_a | ||||
|  | ||||
|     request = <<-SQL | ||||
|       INSERT INTO playlist_videos | ||||
|       VALUES (#{arg_array(video_array)}) | ||||
|     SQL | ||||
|  | ||||
|     PG_DB.exec(request, args: video_array) | ||||
|   end | ||||
|  | ||||
|   def delete(index) | ||||
|     request = <<-SQL | ||||
|       DELETE FROM playlist_videos * | ||||
|       WHERE index = $1 | ||||
|     SQL | ||||
|  | ||||
|     PG_DB.exec(request, index) | ||||
|   end | ||||
| end | ||||
| @@ -261,10 +261,7 @@ def create_playlist(db, title, privacy, user) | ||||
|     index:       [] of Int64, | ||||
|   }) | ||||
|  | ||||
|   playlist_array = playlist.to_a | ||||
|   args = arg_array(playlist_array) | ||||
|  | ||||
|   db.exec("INSERT INTO playlists VALUES (#{args})", args: playlist_array) | ||||
|   Invidious::Database::Playlists.insert(playlist) | ||||
|  | ||||
|   return playlist | ||||
| end | ||||
| @@ -282,10 +279,7 @@ def subscribe_playlist(db, user, playlist) | ||||
|     index:       [] of Int64, | ||||
|   }) | ||||
|  | ||||
|   playlist_array = playlist.to_a | ||||
|   args = arg_array(playlist_array) | ||||
|  | ||||
|   db.exec("INSERT INTO playlists VALUES (#{args})", args: playlist_array) | ||||
|   Invidious::Database::Playlists.insert(playlist) | ||||
|  | ||||
|   return playlist | ||||
| end | ||||
|   | ||||
| @@ -216,8 +216,7 @@ module Invidious::Routes::API::V1::Authenticated | ||||
|       return error_json(403, "Invalid user") | ||||
|     end | ||||
|  | ||||
|     PG_DB.exec("DELETE FROM playlist_videos * WHERE plid = $1", plid) | ||||
|     PG_DB.exec("DELETE FROM playlists * WHERE id = $1", plid) | ||||
|     Invidious::Database::Playlists.delete(plid) | ||||
|  | ||||
|     env.response.status_code = 204 | ||||
|   end | ||||
| @@ -266,11 +265,8 @@ module Invidious::Routes::API::V1::Authenticated | ||||
|       index:          Random::Secure.rand(0_i64..Int64::MAX), | ||||
|     }) | ||||
|  | ||||
|     video_array = playlist_video.to_a | ||||
|     args = arg_array(video_array) | ||||
|  | ||||
|     PG_DB.exec("INSERT INTO playlist_videos VALUES (#{args})", args: video_array) | ||||
|     PG_DB.exec("UPDATE playlists SET index = array_append(index, $1), video_count = cardinality(index) + 1, updated = $2 WHERE id = $3", playlist_video.index, Time.utc, plid) | ||||
|     Invidious::Database::PlaylistVideos.insert(playlist_video) | ||||
|     Invidious::Database::Playlists.update_video_added(plid, playlist_video.index) | ||||
|  | ||||
|     env.response.headers["Location"] = "#{HOST_URL}/api/v1/auth/playlists/#{plid}/videos/#{playlist_video.index.to_u64.to_s(16).upcase}" | ||||
|     env.response.status_code = 201 | ||||
| @@ -302,8 +298,8 @@ module Invidious::Routes::API::V1::Authenticated | ||||
|       return error_json(404, "Playlist does not contain index") | ||||
|     end | ||||
|  | ||||
|     PG_DB.exec("DELETE FROM playlist_videos * WHERE index = $1", index) | ||||
|     PG_DB.exec("UPDATE playlists SET index = array_remove(index, $1), video_count = cardinality(index) - 1, updated = $2 WHERE id = $3", index, Time.utc, plid) | ||||
|     Invidious::Database::PlaylistVideos.delete(index) | ||||
|     Invidious::Database::Playlists.update_video_removed(plid, index) | ||||
|  | ||||
|     env.response.status_code = 204 | ||||
|   end | ||||
|   | ||||
| @@ -122,8 +122,7 @@ module Invidious::Routes::Playlists | ||||
|       return env.redirect referer | ||||
|     end | ||||
|  | ||||
|     PG_DB.exec("DELETE FROM playlist_videos * WHERE plid = $1", plid) | ||||
|     PG_DB.exec("DELETE FROM playlists * WHERE id = $1", plid) | ||||
|     Invidious::Database::Playlists.delete(plid) | ||||
|  | ||||
|     env.redirect "/feed/playlists" | ||||
|   end | ||||
| @@ -363,15 +362,12 @@ module Invidious::Routes::Playlists | ||||
|         index:          Random::Secure.rand(0_i64..Int64::MAX), | ||||
|       }) | ||||
|  | ||||
|       video_array = playlist_video.to_a | ||||
|       args = arg_array(video_array) | ||||
|  | ||||
|       PG_DB.exec("INSERT INTO playlist_videos VALUES (#{args})", args: video_array) | ||||
|       PG_DB.exec("UPDATE playlists SET index = array_append(index, $1), video_count = cardinality(index) + 1, updated = $2 WHERE id = $3", playlist_video.index, Time.utc, playlist_id) | ||||
|       Invidious::Database::PlaylistVideos.insert(playlist_video) | ||||
|       Invidious::Database::Playlists.update_video_added(playlist_id, playlist_video.index) | ||||
|     when "action_remove_video" | ||||
|       index = env.params.query["set_video_id"] | ||||
|       PG_DB.exec("DELETE FROM playlist_videos * WHERE index = $1", index) | ||||
|       PG_DB.exec("UPDATE playlists SET index = array_remove(index, $1), video_count = cardinality(index) - 1, updated = $2 WHERE id = $3", index, Time.utc, playlist_id) | ||||
|       Invidious::Database::PlaylistVideos.delete(index) | ||||
|       Invidious::Database::Playlists.update_video_removed(playlist_id, index) | ||||
|     when "action_move_video_before" | ||||
|       # TODO: Playlist stub | ||||
|     else | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Samantaz Fox
					Samantaz Fox