42 lines
1.1 KiB
PL/PgSQL
42 lines
1.1 KiB
PL/PgSQL
create or replace function find_articles(
|
|
search text default null,
|
|
direction text default 'desc',
|
|
sort text default 'created_at',
|
|
"limit" int default 50,
|
|
"offset" int default 0,
|
|
out resource json,
|
|
out total int
|
|
) language plpgsql as
|
|
$$
|
|
begin
|
|
select json_agg(t), (select count(id) from article)
|
|
into resource, total
|
|
from (
|
|
select
|
|
a.*,
|
|
find_citizen_by_id(a.created_by_id) as created_by
|
|
from article as a
|
|
where title ilike '%'||"search"||'%'
|
|
order by
|
|
case direction when 'asc' then
|
|
case sort
|
|
when 'title' then a.title
|
|
when 'created_at' then a.created_at::text
|
|
else null
|
|
end
|
|
end,
|
|
case direction when 'desc' then
|
|
case sort
|
|
when 'title' then a.title
|
|
when 'created_at' then a.created_at::text
|
|
end
|
|
end
|
|
desc,
|
|
a.created_at desc
|
|
limit "limit" offset "offset"
|
|
) as t;
|
|
end;
|
|
$$;
|
|
|
|
-- drop function if exists find_articles(json, int, int);
|