-- :name create-image-collection :<! :1
insert into images_collections (id, "user", name)
values (:id, :user, :name)
returning *;

-- :name update-image-collection :<! :1
update images_collections
   set name = :name,
       version = :version
 where id = :id
   and "user" = :user
returning *;

-- :name get-image-collections :? :*
select *,
       (select count(*) from images where collection = ic.id) as num_images
  from images_collections as ic
 where (ic."user" = :user or
        ic."user" = '00000000-0000-0000-0000-000000000000'::uuid)
   and ic.deleted_at is null
 order by ic.created_at desc;

-- :name delete-image-collection :! :n
update images_collections
   set deleted_at = clock_timestamp()
 where id = :id
   and "user" = :user;

-- :name get-images-by-collection :? :*
select * from images
 where ("user" = :user or
        "user" = '00000000-0000-0000-0000-000000000000'::uuid)
   and deleted_at is null
   and collection = :collection
order by created_at desc;

-- :name get-images :? :*
select * from images
 where "user" = :user
   and deleted_at is null
   and collection is null
order by created_at desc;

-- :name get-image :? :1
select * from images
 where id = :id
   and deleted_at is null;

-- :name create-image :<! :1
insert into images ("user", name, collection, path, width, height, mimetype)
values (:user, :name, :collection, :path, :width, :height, :mimetype)
returning *;

-- :name update-image :<! :1
update images
   set name = :name,
       collection = :collection,
       version = :version
 where id = :id
   and "user" = :user
returning *;

-- :name delete-image :! :n
update images
   set deleted_at = clock_timestamp()
 where id = :id and "user" = :user;