0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-03 04:49:03 -05:00
penpot/backend/resources/sql/projects.sql

64 lines
1.8 KiB
SQL

-- :name create-project :<! :1
insert into projects (id, "user", name)
values (:id, :user, :name)
returning *;
-- :name update-project :<! :1
update projects
set name = :name,
version = :version
where id = :id
and "user" = :user
and deleted_at is null
returning *;
-- :name delete-project :! :n
update projects
set deleted_at = clock_timestamp()
where id = :id
and "user" = :user
and deleted_at is null;
-- :name get-project-by-id :? :1
select p.*
from projects as p
where p.id = :id
and p.deleted_at is null;
-- :name get-projects :? :*
select distinct
pr.*,
ps.token as share_token,
count(pg.id) over win as total_pages,
first_value(pg.id) over win as page_id,
first_value(pg.data) over win as page_data,
first_value(pg.name) over win as page_name,
first_value(pg.version) over win as page_version,
first_value(pg.created_at) over win as page_created_at,
first_value(pg.metadata) over win as page_metadata,
first_value(pg.modified_at) over win as page_modified_at
from projects as pr
inner join project_shares as ps
on (ps.project = pr.id)
left join pages as pg
on (pg.project = pr.id and pg.deleted_at is null)
where pr.deleted_at is null
and pr."user" = :user
window win as (partition by pr.id
order by pg.created_at
range between unbounded preceding
and unbounded following)
order by pr.created_at asc;
-- :name get-project-by-share-token :? :*
select p.*
from projects as p
inner join project_shares as ps
on (p.id = ps.project)
where ps.token = :token;
-- :name get-share-tokens-for-project
select s.*
from project_shares as s
where s.project = :project
order by s.created_at desc;