31 lines
1.0 KiB
SQL
31 lines
1.0 KiB
SQL
CREATE UNLOGGED TABLE activity_logs
|
|
(
|
|
id BIGSERIAL PRIMARY KEY,
|
|
family_id BIGINT REFERENCES families (id) ON DELETE CASCADE,
|
|
user_id BIGINT NOT NULL REFERENCES users (id) ON DELETE CASCADE,
|
|
action TEXT NOT NULL,
|
|
entity_type TEXT NOT NULL,
|
|
entity_id BIGINT,
|
|
description TEXT NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
);
|
|
|
|
CREATE INDEX idx_activity_logs_created_at ON activity_logs (created_at DESC);
|
|
CREATE INDEX idx_activity_logs_user_id ON activity_logs (user_id);
|
|
CREATE INDEX idx_activity_logs_family_id ON activity_logs (family_id);
|
|
|
|
DO
|
|
$$
|
|
BEGIN
|
|
IF EXISTS (SELECT 1 FROM cron.job WHERE jobname = 'cleanup_activity_logs_hourly') THEN
|
|
PERFORM cron.unschedule((SELECT jobid FROM cron.job WHERE jobname = 'cleanup_activity_logs_hourly'));
|
|
END IF;
|
|
END
|
|
$$;
|
|
|
|
SELECT cron.schedule(
|
|
'cleanup_activity_logs_hourly',
|
|
'0 * * * *',
|
|
$$DELETE FROM activity_logs WHERE created_at < NOW() - INTERVAL '1 day'$$
|
|
);
|