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

-- SharedLinkRepository.get
select
  "shared_link".*,
  coalesce(
    json_agg("a") filter (
      where
        "a"."id" is not null
    ),
    '[]'
  ) as "assets",
  to_json("album") as "album"
from
  "shared_link"
  left join lateral (
    select
      "asset".*,
      to_json("exifInfo") as "exifInfo"
    from
      "shared_link_asset"
      inner join "asset" on "asset"."id" = "shared_link_asset"."assetsId"
      inner join lateral (
        select
          "asset_exif".*
        from
          "asset_exif"
        where
          "asset_exif"."assetId" = "asset"."id"
      ) as "exifInfo" on true
    where
      "shared_link"."id" = "shared_link_asset"."sharedLinksId"
      and "asset"."deletedAt" is null
    order by
      "asset"."fileCreatedAt" asc
  ) as "a" on true
  left join lateral (
    select
      "album".*,
      coalesce(
        json_agg("assets") filter (
          where
            "assets"."id" is not null
        ),
        '[]'
      ) as "assets",
      to_json("owner") as "owner"
    from
      "album"
      left join "album_asset" on "album_asset"."albumsId" = "album"."id"
      left join lateral (
        select
          "asset".*,
          to_json("exifInfo") as "exifInfo"
        from
          "asset"
          inner join lateral (
            select
              "asset_exif".*
            from
              "asset_exif"
            where
              "asset_exif"."assetId" = "asset"."id"
          ) as "exifInfo" on true
        where
          "album_asset"."assetsId" = "asset"."id"
          and "asset"."deletedAt" is null
        order by
          "asset"."fileCreatedAt" asc
      ) as "assets" on true
      inner join lateral (
        select
          "user".*
        from
          "user"
        where
          "user"."id" = "album"."ownerId"
          and "user"."deletedAt" is null
      ) as "owner" on true
    where
      "album"."id" = "shared_link"."albumId"
      and "album"."deletedAt" is null
    group by
      "album"."id",
      "owner".*
  ) as "album" on true
where
  "shared_link"."id" = $1
  and "shared_link"."userId" = $2
  and (
    "shared_link"."type" = $3
    or "album"."id" is not null
  )
group by
  "shared_link"."id",
  "album".*
order by
  "shared_link"."createdAt" desc

-- SharedLinkRepository.getAll
select distinct
  on ("shared_link"."createdAt") "shared_link".*,
  "assets"."assets",
  to_json("album") as "album"
from
  "shared_link"
  left join "shared_link_asset" on "shared_link_asset"."sharedLinksId" = "shared_link"."id"
  left join lateral (
    select
      json_agg("asset") as "assets"
    from
      "asset"
    where
      "asset"."id" = "shared_link_asset"."assetsId"
      and "asset"."deletedAt" is null
  ) as "assets" on true
  left join lateral (
    select
      "album".*,
      to_json("owner") as "owner"
    from
      "album"
      inner join lateral (
        select
          "user"."id",
          "user"."email",
          "user"."createdAt",
          "user"."profileImagePath",
          "user"."isAdmin",
          "user"."shouldChangePassword",
          "user"."deletedAt",
          "user"."oauthId",
          "user"."updatedAt",
          "user"."storageLabel",
          "user"."name",
          "user"."quotaSizeInBytes",
          "user"."quotaUsageInBytes",
          "user"."status",
          "user"."profileChangedAt"
        from
          "user"
        where
          "user"."id" = "album"."ownerId"
          and "user"."deletedAt" is null
      ) as "owner" on true
    where
      "album"."id" = "shared_link"."albumId"
      and "album"."deletedAt" is null
  ) as "album" on true
where
  "shared_link"."userId" = $1
  and (
    "shared_link"."type" = $2
    or "album"."id" is not null
  )
  and "shared_link"."albumId" = $3
order by
  "shared_link"."createdAt" desc

-- SharedLinkRepository.getByKey
select
  "shared_link"."id",
  "shared_link"."userId",
  "shared_link"."expiresAt",
  "shared_link"."showExif",
  "shared_link"."allowUpload",
  "shared_link"."allowDownload",
  "shared_link"."password",
  (
    select
      to_json(obj)
    from
      (
        select
          "user"."id",
          "user"."name",
          "user"."email",
          "user"."isAdmin",
          "user"."quotaUsageInBytes",
          "user"."quotaSizeInBytes"
        from
          "user"
        where
          "user"."id" = "shared_link"."userId"
      ) as obj
  ) as "user"
from
  "shared_link"
  left join "album" on "album"."id" = "shared_link"."albumId"
where
  "shared_link"."key" = $1
  and "album"."deletedAt" is null
  and (
    "shared_link"."type" = $2
    or "album"."id" is not null
  )
