immich/server/src/queries/album.repository.sql

410 lines
8.2 KiB
MySQL
Raw Normal View History

-- NOTE: This file is auto generated by ./sql-generator
-- AlbumRepository.getById
select
2025-07-14 10:13:06 -04:00
"album".*,
(
select
to_json(obj)
from
(
select
"id",
"name",
"email",
2025-04-28 09:54:51 -04:00
"avatarColor",
"profileImagePath",
"profileChangedAt"
from
2025-07-14 10:13:06 -04:00
"user"
where
2025-07-14 10:13:06 -04:00
"user"."id" = "album"."ownerId"
) as obj
) as "owner",
(
select
coalesce(json_agg(agg), '[]')
from
(
select
2025-07-14 10:13:06 -04:00
"album_user"."role",
(
select
to_json(obj)
from
(
select
"id",
"name",
"email",
2025-04-28 09:54:51 -04:00
"avatarColor",
"profileImagePath",
"profileChangedAt"
from
2025-07-14 10:13:06 -04:00
"user"
where
2025-07-14 10:13:06 -04:00
"user"."id" = "album_user"."usersId"
) as obj
) as "user"
from
2025-07-14 10:13:06 -04:00
"album_user"
where
2025-07-14 10:13:06 -04:00
"album_user"."albumsId" = "album"."id"
) as agg
) as "albumUsers",
(
select
coalesce(json_agg(agg), '[]')
from
(
select
*
from
2025-07-14 10:13:06 -04:00
"shared_link"
where
2025-07-14 10:13:06 -04:00
"shared_link"."albumId" = "album"."id"
) as agg
2025-01-22 15:17:42 -05:00
) as "sharedLinks",
(
select
json_agg("asset") as "assets"
from
(
select
2025-07-14 10:13:06 -04:00
"asset".*,
"asset_exif" as "exifInfo"
2025-01-22 15:17:42 -05:00
from
2025-07-14 10:13:06 -04:00
"asset"
left join "asset_exif" on "asset"."id" = "asset_exif"."assetId"
inner join "album_asset" on "album_asset"."assetsId" = "asset"."id"
2025-01-22 15:17:42 -05:00
where
2025-07-14 10:13:06 -04:00
"album_asset"."albumsId" = "album"."id"
and "asset"."deletedAt" is null
and "asset"."visibility" in ('archive', 'timeline')
2025-01-22 15:17:42 -05:00
order by
2025-07-14 10:13:06 -04:00
"asset"."fileCreatedAt" desc
2025-01-22 15:17:42 -05:00
) as "asset"
) as "assets"
from
2025-07-14 10:13:06 -04:00
"album"
where
2025-07-14 10:13:06 -04:00
"album"."id" = $1
and "album"."deletedAt" is null
-- AlbumRepository.getByAssetId
select
2025-07-14 10:13:06 -04:00
"album".*,
(
select
to_json(obj)
from
(
select
"id",
"name",
"email",
2025-04-28 09:54:51 -04:00
"avatarColor",
"profileImagePath",
"profileChangedAt"
from
2025-07-14 10:13:06 -04:00
"user"
where
2025-07-14 10:13:06 -04:00
"user"."id" = "album"."ownerId"
) as obj
) as "owner",
(
select
coalesce(json_agg(agg), '[]')
from
(
select
2025-07-14 10:13:06 -04:00
"album_user"."role",
(
select
to_json(obj)
from
feat: readonly album sharing (#8720) * rename albums_shared_users_users to album_permissions and add readonly column * disable synchronize on the original join table * remove unnecessary FK names * set readonly=true as default for new album shares * separate and implement album READ and WRITE permission * expose albumPermissions on the API, deprecate sharedUsers * generate openapi * create readonly view on frontend * ??? move slideshow button out from ellipsis menu so that non-owners can have access too * correct sharedUsers joins * add album permission repository * remove a log * fix assetCount getting reset when adding users * fix lint * add set permission endpoint and UI * sort users * remove log * Revert "??? move slideshow button out from ellipsis menu so that non-owners can have access too" This reverts commit 1343bfa31125f7136f81db28f7aa4c5ef0204847. * rename stuff * fix db schema annotations * sql generate * change readonly default to follow migration * fix deprecation notice * change readonly boolean to role enum * fix joincolumn as primary key * rename albumUserRepository in album service * clean up userId and albumId * add write access to shared link * fix existing tests * switch to vitest * format and fix tests on web * add new test * fix one e2e test * rename new API field to albumUsers * capitalize serverside enum * remove unused ReadWrite type * missed rename from previous commit * rename to albumUsers in album entity as well * remove outdated Equals calls * unnecessary relation * rename to updateUser in album service * minor renamery * move sorting to backend * rename and separate ALBUM_WRITE as ADD_ASSET and REMOVE_ASSET * fix tests * fix "should migrate single moving picture" test failing on European system timezone * generated changes after merge * lint fix * fix correct page to open after removing user from album * fix e2e tests and some bugs * rename updateAlbumUser rest endpoint * add new e2e tests for updateAlbumUser endpoint * small optimizations * refactor album e2e test, add new album shared with viewer * add new test to check if viewer can see the album * add new e2e tests for readonly share * failing test: User delete doesn't cascade to UserAlbum entity * fix: handle deleted users * use lodash for sort * add role to addUsersToAlbum endpoint * add UI for adding editors * lint fixes * change role back to editor as DB default * fix server tests * redesign user selection modal editor selector * style tweaks * fix type error * Revert "style tweaks" This reverts commit ab604f4c8f3a6f12ab0b5fe2dd2ede723aa68775. * Revert "redesign user selection modal editor selector" This reverts commit e6f344856c6c05e4eb5c78f0dffb9f52498795f4. * chore: cleanup and improve add user modal * chore: open api * small styling --------- Co-authored-by: mgabor <> Co-authored-by: Jason Rasmussen <jrasm91@gmail.com> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-04-25 06:19:49 +02:00
(
select
"id",
"name",
"email",
2025-04-28 09:54:51 -04:00
"avatarColor",
"profileImagePath",
"profileChangedAt"
from
2025-07-14 10:13:06 -04:00
"user"
where
2025-07-14 10:13:06 -04:00
"user"."id" = "album_user"."usersId"
) as obj
) as "user"
from
2025-07-14 10:13:06 -04:00
"album_user"
where
2025-07-14 10:13:06 -04:00
"album_user"."albumsId" = "album"."id"
) as agg
) as "albumUsers"
from
2025-07-14 10:13:06 -04:00
"album"
inner join "album_asset" on "album_asset"."albumsId" = "album"."id"
where
(
2025-07-14 10:13:06 -04:00
"album"."ownerId" = $1
or exists (
select
from
2025-07-14 10:13:06 -04:00
"album_user"
where
2025-07-14 10:13:06 -04:00
"album_user"."albumsId" = "album"."id"
and "album_user"."usersId" = $2
)
)
2025-07-14 10:13:06 -04:00
and "album_asset"."assetsId" = $3
and "album"."deletedAt" is null
order by
2025-07-14 10:13:06 -04:00
"album"."createdAt" desc,
"album"."createdAt" desc
-- AlbumRepository.getMetadataForIds
select
2025-07-14 10:13:06 -04:00
"album_asset"."albumsId" as "albumId",
min(
2025-07-14 10:13:06 -04:00
("asset"."localDateTime" AT TIME ZONE 'UTC'::text)::date
) as "startDate",
max(
2025-07-14 10:13:06 -04:00
("asset"."localDateTime" AT TIME ZONE 'UTC'::text)::date
) as "endDate",
2025-07-14 10:13:06 -04:00
max("asset"."updatedAt") as "lastModifiedAssetTimestamp",
count("asset"."id")::int as "assetCount"
from
2025-07-14 10:13:06 -04:00
"asset"
inner join "album_asset" on "album_asset"."assetsId" = "asset"."id"
where
2025-07-14 10:13:06 -04:00
"asset"."visibility" in ('archive', 'timeline')
and "album_asset"."albumsId" in ($1)
and "asset"."deletedAt" is null
group by
2025-07-14 10:13:06 -04:00
"album_asset"."albumsId"
-- AlbumRepository.getOwned
select
2025-07-14 10:13:06 -04:00
"album".*,
(
select
to_json(obj)
from
(
select
"id",
"name",
"email",
2025-04-28 09:54:51 -04:00
"avatarColor",
"profileImagePath",
"profileChangedAt"
from
2025-07-14 10:13:06 -04:00
"user"
where
2025-07-14 10:13:06 -04:00
"user"."id" = "album"."ownerId"
) as obj
) as "owner",
(
select
coalesce(json_agg(agg), '[]')
from
(
select
2025-07-14 10:13:06 -04:00
"album_user"."role",
(
select
to_json(obj)
from
feat: readonly album sharing (#8720) * rename albums_shared_users_users to album_permissions and add readonly column * disable synchronize on the original join table * remove unnecessary FK names * set readonly=true as default for new album shares * separate and implement album READ and WRITE permission * expose albumPermissions on the API, deprecate sharedUsers * generate openapi * create readonly view on frontend * ??? move slideshow button out from ellipsis menu so that non-owners can have access too * correct sharedUsers joins * add album permission repository * remove a log * fix assetCount getting reset when adding users * fix lint * add set permission endpoint and UI * sort users * remove log * Revert "??? move slideshow button out from ellipsis menu so that non-owners can have access too" This reverts commit 1343bfa31125f7136f81db28f7aa4c5ef0204847. * rename stuff * fix db schema annotations * sql generate * change readonly default to follow migration * fix deprecation notice * change readonly boolean to role enum * fix joincolumn as primary key * rename albumUserRepository in album service * clean up userId and albumId * add write access to shared link * fix existing tests * switch to vitest * format and fix tests on web * add new test * fix one e2e test * rename new API field to albumUsers * capitalize serverside enum * remove unused ReadWrite type * missed rename from previous commit * rename to albumUsers in album entity as well * remove outdated Equals calls * unnecessary relation * rename to updateUser in album service * minor renamery * move sorting to backend * rename and separate ALBUM_WRITE as ADD_ASSET and REMOVE_ASSET * fix tests * fix "should migrate single moving picture" test failing on European system timezone * generated changes after merge * lint fix * fix correct page to open after removing user from album * fix e2e tests and some bugs * rename updateAlbumUser rest endpoint * add new e2e tests for updateAlbumUser endpoint * small optimizations * refactor album e2e test, add new album shared with viewer * add new test to check if viewer can see the album * add new e2e tests for readonly share * failing test: User delete doesn't cascade to UserAlbum entity * fix: handle deleted users * use lodash for sort * add role to addUsersToAlbum endpoint * add UI for adding editors * lint fixes * change role back to editor as DB default * fix server tests * redesign user selection modal editor selector * style tweaks * fix type error * Revert "style tweaks" This reverts commit ab604f4c8f3a6f12ab0b5fe2dd2ede723aa68775. * Revert "redesign user selection modal editor selector" This reverts commit e6f344856c6c05e4eb5c78f0dffb9f52498795f4. * chore: cleanup and improve add user modal * chore: open api * small styling --------- Co-authored-by: mgabor <> Co-authored-by: Jason Rasmussen <jrasm91@gmail.com> Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
2024-04-25 06:19:49 +02:00
(
select
"id",
"name",
"email",
2025-04-28 09:54:51 -04:00
"avatarColor",
"profileImagePath",
"profileChangedAt"
from
2025-07-14 10:13:06 -04:00
"user"
where
2025-07-14 10:13:06 -04:00
"user"."id" = "album_user"."usersId"
) as obj
) as "user"
from
2025-07-14 10:13:06 -04:00
"album_user"
where
2025-07-14 10:13:06 -04:00
"album_user"."albumsId" = "album"."id"
) as agg
) as "albumUsers",
(
select
coalesce(json_agg(agg), '[]')
from
(
select
*
from
2025-07-14 10:13:06 -04:00
"shared_link"
where
2025-07-14 10:13:06 -04:00
"shared_link"."albumId" = "album"."id"
) as agg
) as "sharedLinks"
from
2025-07-14 10:13:06 -04:00
"album"
where
2025-07-14 10:13:06 -04:00
"album"."ownerId" = $1
and "album"."deletedAt" is null
order by
2025-07-14 10:13:06 -04:00
"album"."createdAt" desc
-- AlbumRepository.getShared
select
2025-07-14 10:13:06 -04:00
"album".*,
(
select
coalesce(json_agg(agg), '[]')
from
(
select
2025-07-14 10:13:06 -04:00
"album_user"."role",
(
select
to_json(obj)
from
(
select
"id",
"name",
"email",
2025-04-28 09:54:51 -04:00
"avatarColor",
"profileImagePath",
"profileChangedAt"
from
2025-07-14 10:13:06 -04:00
"user"
where
2025-07-14 10:13:06 -04:00
"user"."id" = "album_user"."usersId"
) as obj
) as "user"
from
2025-07-14 10:13:06 -04:00
"album_user"
where
2025-07-14 10:13:06 -04:00
"album_user"."albumsId" = "album"."id"
) as agg
) as "albumUsers",
(
select
to_json(obj)
from
(
select
"id",
"name",
"email",
2025-04-28 09:54:51 -04:00
"avatarColor",
"profileImagePath",
"profileChangedAt"
from
2025-07-14 10:13:06 -04:00
"user"
where
2025-07-14 10:13:06 -04:00
"user"."id" = "album"."ownerId"
) as obj
) as "owner",
(
select
coalesce(json_agg(agg), '[]')
from
(
select
*
from
2025-07-14 10:13:06 -04:00
"shared_link"
where
2025-07-14 10:13:06 -04:00
"shared_link"."albumId" = "album"."id"
) as agg
) as "sharedLinks"
from
2025-07-14 10:13:06 -04:00
"album"
where
(
exists (
select
from
2025-07-14 10:13:06 -04:00
"album_user"
where
2025-07-14 10:13:06 -04:00
"album_user"."albumsId" = "album"."id"
and (
2025-07-14 10:13:06 -04:00
"album"."ownerId" = $1
or "album_user"."usersId" = $2
)
)
or exists (
select
from
2025-07-14 10:13:06 -04:00
"shared_link"
where
2025-07-14 10:13:06 -04:00
"shared_link"."albumId" = "album"."id"
and "shared_link"."userId" = $3
)
)
2025-07-14 10:13:06 -04:00
and "album"."deletedAt" is null
order by
2025-07-14 10:13:06 -04:00
"album"."createdAt" desc
-- AlbumRepository.getNotShared
select
2025-07-14 10:13:06 -04:00
"album".*,
(
select
to_json(obj)
from
(
select
"id",
"name",
"email",
2025-04-28 09:54:51 -04:00
"avatarColor",
"profileImagePath",
"profileChangedAt"
from
2025-07-14 10:13:06 -04:00
"user"
where
2025-07-14 10:13:06 -04:00
"user"."id" = "album"."ownerId"
) as obj
) as "owner"
from
2025-07-14 10:13:06 -04:00
"album"
where
2025-07-14 10:13:06 -04:00
"album"."ownerId" = $1
and "album"."deletedAt" is null
and not exists (
select
from
2025-07-14 10:13:06 -04:00
"album_user"
where
2025-07-14 10:13:06 -04:00
"album_user"."albumsId" = "album"."id"
)
and not exists (
select
from
2025-07-14 10:13:06 -04:00
"shared_link"
where
2025-07-14 10:13:06 -04:00
"shared_link"."albumId" = "album"."id"
)
order by
2025-07-14 10:13:06 -04:00
"album"."createdAt" desc
-- AlbumRepository.removeAssetsFromAll
2025-07-14 10:13:06 -04:00
delete from "album_asset"
where
2025-07-14 10:13:06 -04:00
"album_asset"."assetsId" in ($1)
-- AlbumRepository.getAssetIds
select
*
from
2025-07-14 10:13:06 -04:00
"album_asset"
where
2025-07-14 10:13:06 -04:00
"album_asset"."albumsId" = $1
and "album_asset"."assetsId" in ($2)