diff options
| author | Samantaz Fox <coding@samantaz.fr> | 2021-11-26 19:36:31 +0100 |
|---|---|---|
| committer | Samantaz Fox <coding@samantaz.fr> | 2022-01-04 17:13:51 +0100 |
| commit | 998edba6f064eb4e09ca286ad33bfd967ef03e66 (patch) | |
| tree | 205e58f9cd4580d79b8567c36d3b91017cf2f789 | |
| parent | 4f219362fe96573f8ce3dc2e0ee86070046071dd (diff) | |
| download | invidious-998edba6f064eb4e09ca286ad33bfd967ef03e66.tar.gz invidious-998edba6f064eb4e09ca286ad33bfd967ef03e66.tar.bz2 invidious-998edba6f064eb4e09ca286ad33bfd967ef03e66.zip | |
Move DB queries related to 'videos' in a separate module
| -rw-r--r-- | src/invidious.cr | 3 | ||||
| -rw-r--r-- | src/invidious/database/base.cr | 4 | ||||
| -rw-r--r-- | src/invidious/database/videos.cr | 43 | ||||
| -rw-r--r-- | src/invidious/videos.cr | 10 |
4 files changed, 53 insertions, 7 deletions
diff --git a/src/invidious.cr b/src/invidious.cr index ade13608..405fcadf 100644 --- a/src/invidious.cr +++ b/src/invidious.cr @@ -20,12 +20,13 @@ require "kemal" require "athena-negotiation" require "openssl/hmac" require "option_parser" -require "pg" require "sqlite3" require "xml" require "yaml" require "compress/zip" require "protodec/utils" + +require "./invidious/database/*" require "./invidious/helpers/*" require "./invidious/yt_backend/*" require "./invidious/*" diff --git a/src/invidious/database/base.cr b/src/invidious/database/base.cr new file mode 100644 index 00000000..055a6284 --- /dev/null +++ b/src/invidious/database/base.cr @@ -0,0 +1,4 @@ +require "pg" + +module Invidious::Database +end diff --git a/src/invidious/database/videos.cr b/src/invidious/database/videos.cr new file mode 100644 index 00000000..e1fa01c3 --- /dev/null +++ b/src/invidious/database/videos.cr @@ -0,0 +1,43 @@ +require "./base.cr" + +module Invidious::Database::Videos + extend self + + def insert(video : Video) + request = <<-SQL + INSERT INTO videos + VALUES ($1, $2, $3) + ON CONFLICT (id) DO NOTHING + SQL + + PG_DB.exec(request, video.id, video.info.to_json, video.updated) + end + + def delete(id) + request = <<-SQL + DELETE FROM videos * + WHERE id = $1 + SQL + + PG_DB.exec(request, id) + end + + def update(video : Video) + request = <<-SQL + UPDATE videos + SET (id, info, updated) = ($1, $2, $3) + WHERE id = $1 + SQL + + PG_DB.exec(request, video.id, video.info.to_json, video.updated) + end + + def select(id : String) : Video? + request = <<-SQL + SELECT * FROM videos + WHERE id = $1 + SQL + + return PG_DB.query_one?(request, id, as: Video) + end +end diff --git a/src/invidious/videos.cr b/src/invidious/videos.cr index d4ef0900..645d3678 100644 --- a/src/invidious/videos.cr +++ b/src/invidious/videos.cr @@ -994,7 +994,7 @@ def extract_video_info(video_id : String, proxy_region : String? = nil, context_ end def get_video(id, db, refresh = true, region = nil, force_refresh = false) - if (video = db.query_one?("SELECT * FROM videos WHERE id = $1", id, as: Video)) && !region + if (video = Invidious::Database::Videos.select(id)) && !region # If record was last updated over 10 minutes ago, or video has since premiered, # refresh (expire param in response lasts for 6 hours) if (refresh && @@ -1003,17 +1003,15 @@ def get_video(id, db, refresh = true, region = nil, force_refresh = false) force_refresh begin video = fetch_video(id, region) - db.exec("UPDATE videos SET (id, info, updated) = ($1, $2, $3) WHERE id = $1", video.id, video.info.to_json, video.updated) + Invidious::Database::Videos.update(video) rescue ex - db.exec("DELETE FROM videos * WHERE id = $1", id) + Invidious::Database::Videos.delete(id) raise ex end end else video = fetch_video(id, region) - if !region - db.exec("INSERT INTO videos VALUES ($1, $2, $3) ON CONFLICT (id) DO NOTHING", video.id, video.info.to_json, video.updated) - end + Invidious::Database::Videos.insert(video) if !region end return video |
