forked from midou/invidious
75 lines
1.5 KiB
Crystal
75 lines
1.5 KiB
Crystal
|
require "./base.cr"
|
||
|
|
||
|
module Invidious::Database::SessionIDs
|
||
|
extend self
|
||
|
|
||
|
# -------------------
|
||
|
# Insert
|
||
|
# -------------------
|
||
|
|
||
|
def insert(sid : String, email : String, handle_conflicts : Bool = false)
|
||
|
request = <<-SQL
|
||
|
INSERT INTO session_ids
|
||
|
VALUES ($1, $2, $3)
|
||
|
SQL
|
||
|
|
||
|
request += " ON CONFLICT (id) DO NOTHING" if handle_conflicts
|
||
|
|
||
|
PG_DB.exec(request, sid, email, Time.utc)
|
||
|
end
|
||
|
|
||
|
# -------------------
|
||
|
# Delete
|
||
|
# -------------------
|
||
|
|
||
|
def delete(*, sid : String)
|
||
|
request = <<-SQL
|
||
|
DELETE FROM session_ids *
|
||
|
WHERE id = $1
|
||
|
SQL
|
||
|
|
||
|
PG_DB.exec(request, sid)
|
||
|
end
|
||
|
|
||
|
def delete(*, email : String)
|
||
|
request = <<-SQL
|
||
|
DELETE FROM session_ids *
|
||
|
WHERE email = $1
|
||
|
SQL
|
||
|
|
||
|
PG_DB.exec(request, email)
|
||
|
end
|
||
|
|
||
|
def delete(*, sid : String, email : String)
|
||
|
request = <<-SQL
|
||
|
DELETE FROM session_ids *
|
||
|
WHERE id = $1 AND email = $2
|
||
|
SQL
|
||
|
|
||
|
PG_DB.exec(request, sid, email)
|
||
|
end
|
||
|
|
||
|
# -------------------
|
||
|
# Select
|
||
|
# -------------------
|
||
|
|
||
|
def select_email(sid : String) : String?
|
||
|
request = <<-SQL
|
||
|
SELECT email FROM session_ids
|
||
|
WHERE id = $1
|
||
|
SQL
|
||
|
|
||
|
PG_DB.query_one?(request, sid, as: String)
|
||
|
end
|
||
|
|
||
|
def select_all(email : String) : Array({session: String, issued: Time})
|
||
|
request = <<-SQL
|
||
|
SELECT id, issued FROM session_ids
|
||
|
WHERE email = $1
|
||
|
ORDER BY issued DESC
|
||
|
SQL
|
||
|
|
||
|
PG_DB.query_all(request, email, as: {session: String, issued: Time})
|
||
|
end
|
||
|
end
|