-- :name insert-email :! :n insert into email_queue (data, priority) values (:data, :priority); -- :name get-pending-emails :? :* select eq.* from email_queue as eq where eq.status = 'pending' and eq.deleted_at is null order by eq.priority desc, eq.created_at desc; -- :name get-immediate-emails :? :* select eq.* from email_queue as eq where eq.status = 'pending' and eq.priority = 10 and eq.deleted_at is null order by eq.priority desc, eq.created_at desc; -- :name get-failed-emails :? :* select eq.* from email_queue as eq where eq.status = 'failed' and eq.deleted_at is null and eq.retries < :max-retries order by eq.priority desc, eq.created_at desc; -- :name mark-email-as-sent :! :n update email_queue set status = 'ok' where id = :id and deleted_at is null; -- :name mark-email-as-failed :! :n update email_queue set status = 'failed', retries = retries + 1 where id = :id and deleted_at is null; -- :name delete-email :! :n update email_queue set deleted_at = clock_timestamp() where id = :id and deleted_at is null;