WIP: actually adding attachments
- attachments table was already defined - change the hash type to sha256 - define sql function to upsert attachment rows
This commit is contained in:
parent
f03d11aafb
commit
103bf86017
|
@ -2,6 +2,7 @@
|
|||
"postgrest_url": "http://localhost:3000",
|
||||
"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiY2hhbl9hcmNoaXZlciJ9.rGIKZokTDKTuQLIv8138bUby5PELfDipYYIDpJzH02c",
|
||||
"backup_read_root": "/home/phil/linixy/tmp/leftypol_back/lainchan.leftypol.org",
|
||||
"media_root_path": "/home/phil/linixy/tmp/chan_archive_media",
|
||||
"site_name": "leftychan",
|
||||
"site_url": "https://leftychan.net"
|
||||
}
|
||||
|
|
|
@ -103,7 +103,7 @@ CREATE TABLE IF NOT EXISTS attachments
|
|||
( attachment_id bigserial primary key
|
||||
, mimetype text NOT NULL
|
||||
, creation_time timestamp with time zone NOT NULL
|
||||
, sha256_hash text NOT NULL
|
||||
, sha256_hash text NOT NULL UNIQUE
|
||||
, phash bigint
|
||||
, illegal boolean NOT NULL DEFAULT false
|
||||
, post_id bigint NOT NULL
|
||||
|
@ -181,6 +181,36 @@ $$ LANGUAGE sql;
|
|||
-- 1:21 for full db (nothing inserted)
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION insert_attachments_and_return_ids(
|
||||
attachments_payload attachments[])
|
||||
RETURNS TABLE (attachment_id bigint, post_id bigint, sha256_hash text) AS $$
|
||||
WITH
|
||||
selected AS (
|
||||
SELECT attachment_id, post_id, sha256_hash
|
||||
FROM attachments
|
||||
WHERE sha256_hash IN (
|
||||
SELECT sha256_hash FROM unnest(attachments_payload)
|
||||
)
|
||||
),
|
||||
to_insert AS (
|
||||
SELECT new_a.*
|
||||
FROM unnest(attachments_payload) AS new_a
|
||||
LEFT OUTER JOIN selected s
|
||||
ON new_a.sha256_hash = s.sha256_hash
|
||||
WHERE s.attachment_id IS NULL
|
||||
),
|
||||
inserted AS (
|
||||
INSERT INTO attachments (mimetype, creation_time, sha256_hash, phash, illegal, post_id)
|
||||
SELECT mimetype, creation_time, sha256_hash, phash, illegal, post_id
|
||||
FROM to_insert
|
||||
RETURNING attachment_id, post_id, sha256_hash
|
||||
)
|
||||
SELECT * FROM inserted
|
||||
UNION ALL
|
||||
SELECT * FROM selected;
|
||||
$$ LANGUAGE sql;
|
||||
|
||||
|
||||
CREATE OR REPLACE FUNCTION fetch_top_threads(
|
||||
p_start_time TIMESTAMPTZ,
|
||||
lookback INT DEFAULT 10000
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
{-# LANGUAGE DeriveAnyClass #-}
|
||||
module AttachmentType
|
||||
( Attachment (..)
|
||||
) where
|
||||
|
||||
import GHC.Generics
|
||||
import Data.Int (Int64)
|
||||
import Data.Aeson (FromJSON)
|
||||
import Data.Text (Text)
|
||||
|
||||
data Attachment = Attachment
|
||||
{ attachment_id :: Maybe Int64
|
||||
, mimetype :: Text
|
||||
, creation_time :: UTCTime
|
||||
, sha256_hash :: Int
|
||||
, phash :: Int64
|
||||
, phash :: Bool
|
||||
, post_id :: Int64
|
||||
} deriving (Show, Generic, FromJSON)
|
|
@ -9,6 +9,7 @@ data JSONSettings = JSONSettings
|
|||
{ postgrest_url :: String
|
||||
, jwt :: String
|
||||
, backup_read_root :: FilePath
|
||||
, media_root_path :: FilePath
|
||||
, site_name :: String
|
||||
, site_url :: String
|
||||
} deriving (Show, Generic)
|
||||
|
|
Loading…
Reference in New Issue