-- NOTE: This file is auto generated by ./sql-generator

-- DuplicateRepository.getAll
with
  "duplicates" as (
    select
      "asset"."duplicateId",
      json_agg(
        "asset2"
        order by
          "asset"."localDateTime" asc
      ) as "assets"
    from
      "asset"
      inner join lateral (
        select
          "asset".*,
          "asset_exif" as "exifInfo"
        from
          "asset_exif"
        where
          "asset_exif"."assetId" = "asset"."id"
      ) as "asset2" on true
    where
      "asset"."visibility" in ('archive', 'timeline')
      and "asset"."ownerId" = $1::uuid
      and "asset"."duplicateId" is not null
      and "asset"."deletedAt" is null
      and "asset"."stackId" is null
    group by
      "asset"."duplicateId"
  ),
  "unique" as (
    select
      "duplicateId"
    from
      "duplicates"
    where
      json_array_length("assets") = $2
  ),
  "removed_unique" as (
    update "asset"
    set
      "duplicateId" = $3
    from
      "unique"
    where
      "asset"."duplicateId" = "unique"."duplicateId"
  )
select
  *
from
  "duplicates"
where
  not exists (
    select
    from
      "unique"
    where
      "unique"."duplicateId" = "duplicates"."duplicateId"
  )

-- DuplicateRepository.delete
update "asset"
set
  "duplicateId" = $1
where
  "ownerId" = $2
  and "duplicateId" = $3

-- DuplicateRepository.deleteAll
update "asset"
set
  "duplicateId" = $1
where
  "ownerId" = $2
  and "duplicateId" in ($3)

-- DuplicateRepository.search
begin
set
  local vchordrq.probes = 1
with
  "cte" as (
    select
      "asset"."id" as "assetId",
      "asset"."duplicateId",
      smart_search.embedding <=> $1 as "distance"
    from
      "asset"
      inner join "smart_search" on "asset"."id" = "smart_search"."assetId"
    where
      "asset"."visibility" in ('archive', 'timeline')
      and "asset"."ownerId" = any ($2::uuid[])
      and "asset"."deletedAt" is null
      and "asset"."type" = $3
      and "asset"."id" != $4::uuid
      and "asset"."stackId" is null
    order by
      "distance"
    limit
      $5
  )
select
  *
from
  "cte"
where
  "cte"."distance" <= $6
commit

-- DuplicateRepository.merge
update "asset"
set
where
  (
    "duplicateId" = any ($1::uuid[])
    or "id" = any ($2::uuid[])
  )
