hypixel-auction-notifier/app/sql/init.sql

68 lines
1.4 KiB
PL/PgSQL

-- Enable Extensions
CREATE EXTENSION IF NOT EXISTS pg_cron;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-- Create table
CREATE TABLE if NOT EXISTS auctions (
id UUID PRIMARY KEY,
auctionid VARCHAR(255) NOT NULL,
lbin DECIMAL(65,5),
modified TIMESTAMP(2),
UNIQUE (auctionid)
);
-- Update trigger function
CREATE OR REPLACE FUNCTION public.fn_update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.modified = now();
RETURN NEW;
END;
$$ language 'plpgsql';
-- Update trigger
DROP TRIGGER IF EXISTS update_auction_modtime on auctions;
CREATE TRIGGER update_auction_modtime
BEFORE UPDATE ON auctions
FOR EACH ROW
EXECUTE PROCEDURE public.fn_update_modified_column();
-- Cleanup function
CREATE OR REPLACE FUNCTION public.cleanup_old_entries()
RETURNS void
LANGUAGE plpgsql
AS $$
DECLARE
temp_id UUID;
BEGIN
FOR temp_id IN
SELECT id
FROM auctions
WHERE EXTRACT(EPOCH FROM (NOW() - modified))/3600 >= 6 -- 6 hours
LOOP
DELETE FROM auctions
WHERE auctions.id = temp_id;
END LOOP;
RETURN;
END;
$$;
-- Add job to pg_cron
DO $outer$
DECLARE job_exists boolean := false;
BEGIN
SELECT (count(*) > 0)
INTO job_exists
FROM cron.job
WHERE jobname = 'cleanup_old_entries_event';
IF NOT job_exists THEN
PERFORM cron.schedule(
'cleanup_old_entries_event',
'*/2 * * * *',
$sql$ SELECT public.cleanup_old_entries(); $sql$
);
END IF;
END;
$outer$;