rename stuff

This commit is contained in:
mgabor
2024-04-16 18:14:08 +02:00
parent 38bab135af
commit 9677d6108a
34 changed files with 471 additions and 487 deletions

View File

@@ -7,8 +7,8 @@ import {
AlbumResponseDto,
CreateAlbumDto,
GetAlbumsDto,
SetAlbumPermissionDto,
UpdateAlbumDto,
UpdateAlbumUserDto,
} from 'src/dtos/album.dto';
import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto';
import { AuthDto } from 'src/dtos/auth.dto';
@@ -99,12 +99,12 @@ export class AlbumController {
}
@Put(':id/permission/:userId')
setAlbumPermission(
updateAlbumUser(
@Auth() auth: AuthDto,
@Param() { id }: UUIDParamDto,
@Param('userId', new ParseMeUUIDPipe({ version: '4' })) userId: string,
@Body() dto: SetAlbumPermissionDto,
@Body() dto: UpdateAlbumUserDto,
): Promise<void> {
return this.service.setAlbumPermission(auth, id, userId, dto);
return this.service.updateAlbumUser(auth, id, userId, dto);
}
}

View File

@@ -83,12 +83,12 @@ export class AlbumCountResponseDto {
notShared!: number;
}
export class SetAlbumPermissionDto {
export class UpdateAlbumUserDto {
@ValidateBoolean()
readonly!: boolean;
}
export class AlbumPermissionResponseDto {
export class AlbumUserResponseDto {
user!: UserResponseDto;
readonly!: boolean;
}
@@ -102,9 +102,9 @@ export class AlbumResponseDto {
updatedAt!: Date;
albumThumbnailAssetId!: string | null;
shared!: boolean;
@ApiProperty({ deprecated: true, description: 'Deprecated in favor of albumPermissions' })
@ApiProperty({ deprecated: true, description: 'Deprecated in favor of users' })
sharedUsers!: UserResponseDto[];
albumPermissions!: AlbumPermissionResponseDto[];
sharedUsersV2!: AlbumUserResponseDto[];
hasSharedLink!: boolean;
assets!: AssetResponseDto[];
owner!: UserResponseDto;
@@ -121,12 +121,12 @@ export class AlbumResponseDto {
export const mapAlbum = (entity: AlbumEntity, withAssets: boolean, auth?: AuthDto): AlbumResponseDto => {
const sharedUsers: UserResponseDto[] = [];
const albumPermissions: AlbumPermissionResponseDto[] = [];
const sharedUsersV2: AlbumUserResponseDto[] = [];
if (entity.albumPermissions) {
for (const permission of entity.albumPermissions) {
if (entity.sharedUsers) {
for (const permission of entity.sharedUsers) {
sharedUsers.push(mapUser(permission.users));
albumPermissions.push({
sharedUsersV2.push({
user: mapUser(permission.users),
readonly: permission.readonly,
});
@@ -155,7 +155,7 @@ export const mapAlbum = (entity: AlbumEntity, withAssets: boolean, auth?: AuthDt
ownerId: entity.ownerId,
owner: mapUser(entity.owner),
sharedUsers,
albumPermissions,
sharedUsersV2,
shared: hasSharedUser || hasSharedLink,
hasSharedLink,
startDate,

View File

@@ -6,7 +6,7 @@ import { Column, Entity, Index, ManyToOne, PrimaryColumn } from 'typeorm';
// Indices for JoinTable
@Index('IDX_427c350ad49bd3935a50baab73', ['albums'])
@Index('IDX_f48513bf9bccefd6ff3ad30bd0', ['users'])
export class AlbumPermissionEntity {
export class AlbumUserEntity {
@PrimaryColumn({ type: 'uuid', name: 'albumsId' })
@ManyToOne(() => AlbumEntity, { onDelete: 'CASCADE', onUpdate: 'CASCADE', nullable: false })
albums!: AlbumEntity;

View File

@@ -1,4 +1,4 @@
import { AlbumPermissionEntity } from 'src/entities/album-permission.entity';
import { AlbumUserEntity } from 'src/entities/album-user.entity';
import { AssetEntity } from 'src/entities/asset.entity';
import { SharedLinkEntity } from 'src/entities/shared-link.entity';
import { UserEntity } from 'src/entities/user.entity';
@@ -53,8 +53,8 @@ export class AlbumEntity {
@Column({ comment: 'Asset ID to be used as thumbnail', nullable: true })
albumThumbnailAssetId!: string | null;
@OneToMany(() => AlbumPermissionEntity, (permission) => permission.albums)
albumPermissions!: AlbumPermissionEntity[];
@OneToMany(() => AlbumUserEntity, (permission) => permission.albums)
sharedUsers!: AlbumUserEntity[];
@ManyToMany(() => AssetEntity, (asset) => asset.albums)
@JoinTable()

View File

@@ -1,5 +1,5 @@
import { ActivityEntity } from 'src/entities/activity.entity';
import { AlbumPermissionEntity } from 'src/entities/album-permission.entity';
import { AlbumUserEntity } from 'src/entities/album-user.entity';
import { AlbumEntity } from 'src/entities/album.entity';
import { APIKeyEntity } from 'src/entities/api-key.entity';
import { AssetFaceEntity } from 'src/entities/asset-face.entity';
@@ -26,7 +26,7 @@ import { UserEntity } from 'src/entities/user.entity';
export const entities = [
ActivityEntity,
AlbumEntity,
AlbumPermissionEntity,
AlbumUserEntity,
APIKeyEntity,
AssetEntity,
AssetStackEntity,

View File

@@ -1,13 +0,0 @@
import { AlbumPermissionEntity } from 'src/entities/album-permission.entity';
export const IAlbumPermissionRepository = 'IAlbumPermissionRepository';
export interface IAlbumPermissionRepository {
create(albumPermission: Partial<AlbumPermissionEntity>): Promise<AlbumPermissionEntity>;
update(
userId: string,
albumId: string,
albumPermission: Partial<AlbumPermissionEntity>,
): Promise<AlbumPermissionEntity>;
delete(userId: string, albumId: string): Promise<void>;
}

View File

@@ -0,0 +1,14 @@
import { AlbumUserEntity } from 'src/entities/album-user.entity';
export const IAlbumUserRepository = 'IAlbumUserRepository';
export type AlbumPermissionId = {
albumId: string;
userId: string;
};
export interface IAlbumUserRepository {
create(albumPermission: Partial<AlbumUserEntity>): Promise<AlbumUserEntity>;
update({ userId, albumId }: AlbumPermissionId, albumPermission: Partial<AlbumUserEntity>): Promise<AlbumUserEntity>;
delete({ userId, albumId }: AlbumPermissionId): Promise<void>;
}

View File

@@ -68,22 +68,18 @@ WHERE
-- AccessRepository.album.checkSharedAlbumAccess
SELECT
"AlbumEntity"."id" AS "AlbumEntity_id",
"AlbumEntity__AlbumEntity_albumPermissions"."albumsId" AS "AlbumEntity__AlbumEntity_albumPermissions_albumsId",
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" AS "AlbumEntity__AlbumEntity_albumPermissions_usersId",
"AlbumEntity__AlbumEntity_albumPermissions"."readonly" AS "AlbumEntity__AlbumEntity_albumPermissions_readonly"
"AlbumEntity__AlbumEntity_users"."albumsId" AS "AlbumEntity__AlbumEntity_users_albumsId",
"AlbumEntity__AlbumEntity_users"."usersId" AS "AlbumEntity__AlbumEntity_users_usersId",
"AlbumEntity__AlbumEntity_users"."readonly" AS "AlbumEntity__AlbumEntity_users_readonly"
FROM
"albums" "AlbumEntity"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_albumPermissions" ON "AlbumEntity__AlbumEntity_albumPermissions"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_users" ON "AlbumEntity__AlbumEntity_users"."albumsId" = "AlbumEntity"."id"
WHERE
(
(
("AlbumEntity"."id" IN ($1))
AND (
(
(
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" = $2
)
)
(("AlbumEntity__AlbumEntity_users"."usersId" = $2))
)
)
)

View File

@@ -32,25 +32,25 @@ FROM
"AlbumEntity__AlbumEntity_owner"."memoriesEnabled" AS "AlbumEntity__AlbumEntity_owner_memoriesEnabled",
"AlbumEntity__AlbumEntity_owner"."quotaSizeInBytes" AS "AlbumEntity__AlbumEntity_owner_quotaSizeInBytes",
"AlbumEntity__AlbumEntity_owner"."quotaUsageInBytes" AS "AlbumEntity__AlbumEntity_owner_quotaUsageInBytes",
"AlbumEntity__AlbumEntity_albumPermissions"."albumsId" AS "AlbumEntity__AlbumEntity_albumPermissions_albumsId",
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" AS "AlbumEntity__AlbumEntity_albumPermissions_usersId",
"AlbumEntity__AlbumEntity_albumPermissions"."readonly" AS "AlbumEntity__AlbumEntity_albumPermissions_readonly",
"0cf106548010af7bbb874df2a426f3f6525803ba"."id" AS "0cf106548010af7bbb874df2a426f3f6525803ba_id",
"0cf106548010af7bbb874df2a426f3f6525803ba"."name" AS "0cf106548010af7bbb874df2a426f3f6525803ba_name",
"0cf106548010af7bbb874df2a426f3f6525803ba"."avatarColor" AS "0cf106548010af7bbb874df2a426f3f6525803ba_avatarColor",
"0cf106548010af7bbb874df2a426f3f6525803ba"."isAdmin" AS "0cf106548010af7bbb874df2a426f3f6525803ba_isAdmin",
"0cf106548010af7bbb874df2a426f3f6525803ba"."email" AS "0cf106548010af7bbb874df2a426f3f6525803ba_email",
"0cf106548010af7bbb874df2a426f3f6525803ba"."storageLabel" AS "0cf106548010af7bbb874df2a426f3f6525803ba_storageLabel",
"0cf106548010af7bbb874df2a426f3f6525803ba"."oauthId" AS "0cf106548010af7bbb874df2a426f3f6525803ba_oauthId",
"0cf106548010af7bbb874df2a426f3f6525803ba"."profileImagePath" AS "0cf106548010af7bbb874df2a426f3f6525803ba_profileImagePath",
"0cf106548010af7bbb874df2a426f3f6525803ba"."shouldChangePassword" AS "0cf106548010af7bbb874df2a426f3f6525803ba_shouldChangePassword",
"0cf106548010af7bbb874df2a426f3f6525803ba"."createdAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_createdAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."deletedAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_deletedAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."status" AS "0cf106548010af7bbb874df2a426f3f6525803ba_status",
"0cf106548010af7bbb874df2a426f3f6525803ba"."updatedAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_updatedAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."memoriesEnabled" AS "0cf106548010af7bbb874df2a426f3f6525803ba_memoriesEnabled",
"0cf106548010af7bbb874df2a426f3f6525803ba"."quotaSizeInBytes" AS "0cf106548010af7bbb874df2a426f3f6525803ba_quotaSizeInBytes",
"0cf106548010af7bbb874df2a426f3f6525803ba"."quotaUsageInBytes" AS "0cf106548010af7bbb874df2a426f3f6525803ba_quotaUsageInBytes",
"AlbumEntity__AlbumEntity_users"."albumsId" AS "AlbumEntity__AlbumEntity_users_albumsId",
"AlbumEntity__AlbumEntity_users"."usersId" AS "AlbumEntity__AlbumEntity_users_usersId",
"AlbumEntity__AlbumEntity_users"."readonly" AS "AlbumEntity__AlbumEntity_users_readonly",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."id" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_id",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."name" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_name",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."avatarColor" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_avatarColor",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."isAdmin" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_isAdmin",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."email" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_email",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."storageLabel" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_storageLabel",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."oauthId" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_oauthId",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."profileImagePath" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_profileImagePath",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."shouldChangePassword" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_shouldChangePassword",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."createdAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_createdAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."deletedAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_deletedAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."status" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_status",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."updatedAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_updatedAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."memoriesEnabled" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_memoriesEnabled",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."quotaSizeInBytes" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_quotaSizeInBytes",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."quotaUsageInBytes" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_quotaUsageInBytes",
"AlbumEntity__AlbumEntity_sharedLinks"."id" AS "AlbumEntity__AlbumEntity_sharedLinks_id",
"AlbumEntity__AlbumEntity_sharedLinks"."description" AS "AlbumEntity__AlbumEntity_sharedLinks_description",
"AlbumEntity__AlbumEntity_sharedLinks"."password" AS "AlbumEntity__AlbumEntity_sharedLinks_password",
@@ -69,10 +69,10 @@ FROM
AND (
"AlbumEntity__AlbumEntity_owner"."deletedAt" IS NULL
)
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_albumPermissions" ON "AlbumEntity__AlbumEntity_albumPermissions"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "users" "0cf106548010af7bbb874df2a426f3f6525803ba" ON "0cf106548010af7bbb874df2a426f3f6525803ba"."id" = "AlbumEntity__AlbumEntity_albumPermissions"."usersId"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_users" ON "AlbumEntity__AlbumEntity_users"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "users" "c22bbb73d001d9cda353d6b9ef87490f7558ce0c" ON "c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."id" = "AlbumEntity__AlbumEntity_users"."usersId"
AND (
"0cf106548010af7bbb874df2a426f3f6525803ba"."deletedAt" IS NULL
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."deletedAt" IS NULL
)
LEFT JOIN "shared_links" "AlbumEntity__AlbumEntity_sharedLinks" ON "AlbumEntity__AlbumEntity_sharedLinks"."albumId" = "AlbumEntity"."id"
WHERE
@@ -112,35 +112,35 @@ SELECT
"AlbumEntity__AlbumEntity_owner"."memoriesEnabled" AS "AlbumEntity__AlbumEntity_owner_memoriesEnabled",
"AlbumEntity__AlbumEntity_owner"."quotaSizeInBytes" AS "AlbumEntity__AlbumEntity_owner_quotaSizeInBytes",
"AlbumEntity__AlbumEntity_owner"."quotaUsageInBytes" AS "AlbumEntity__AlbumEntity_owner_quotaUsageInBytes",
"AlbumEntity__AlbumEntity_albumPermissions"."albumsId" AS "AlbumEntity__AlbumEntity_albumPermissions_albumsId",
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" AS "AlbumEntity__AlbumEntity_albumPermissions_usersId",
"AlbumEntity__AlbumEntity_albumPermissions"."readonly" AS "AlbumEntity__AlbumEntity_albumPermissions_readonly",
"0cf106548010af7bbb874df2a426f3f6525803ba"."id" AS "0cf106548010af7bbb874df2a426f3f6525803ba_id",
"0cf106548010af7bbb874df2a426f3f6525803ba"."name" AS "0cf106548010af7bbb874df2a426f3f6525803ba_name",
"0cf106548010af7bbb874df2a426f3f6525803ba"."avatarColor" AS "0cf106548010af7bbb874df2a426f3f6525803ba_avatarColor",
"0cf106548010af7bbb874df2a426f3f6525803ba"."isAdmin" AS "0cf106548010af7bbb874df2a426f3f6525803ba_isAdmin",
"0cf106548010af7bbb874df2a426f3f6525803ba"."email" AS "0cf106548010af7bbb874df2a426f3f6525803ba_email",
"0cf106548010af7bbb874df2a426f3f6525803ba"."storageLabel" AS "0cf106548010af7bbb874df2a426f3f6525803ba_storageLabel",
"0cf106548010af7bbb874df2a426f3f6525803ba"."oauthId" AS "0cf106548010af7bbb874df2a426f3f6525803ba_oauthId",
"0cf106548010af7bbb874df2a426f3f6525803ba"."profileImagePath" AS "0cf106548010af7bbb874df2a426f3f6525803ba_profileImagePath",
"0cf106548010af7bbb874df2a426f3f6525803ba"."shouldChangePassword" AS "0cf106548010af7bbb874df2a426f3f6525803ba_shouldChangePassword",
"0cf106548010af7bbb874df2a426f3f6525803ba"."createdAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_createdAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."deletedAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_deletedAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."status" AS "0cf106548010af7bbb874df2a426f3f6525803ba_status",
"0cf106548010af7bbb874df2a426f3f6525803ba"."updatedAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_updatedAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."memoriesEnabled" AS "0cf106548010af7bbb874df2a426f3f6525803ba_memoriesEnabled",
"0cf106548010af7bbb874df2a426f3f6525803ba"."quotaSizeInBytes" AS "0cf106548010af7bbb874df2a426f3f6525803ba_quotaSizeInBytes",
"0cf106548010af7bbb874df2a426f3f6525803ba"."quotaUsageInBytes" AS "0cf106548010af7bbb874df2a426f3f6525803ba_quotaUsageInBytes"
"AlbumEntity__AlbumEntity_users"."albumsId" AS "AlbumEntity__AlbumEntity_users_albumsId",
"AlbumEntity__AlbumEntity_users"."usersId" AS "AlbumEntity__AlbumEntity_users_usersId",
"AlbumEntity__AlbumEntity_users"."readonly" AS "AlbumEntity__AlbumEntity_users_readonly",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."id" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_id",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."name" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_name",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."avatarColor" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_avatarColor",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."isAdmin" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_isAdmin",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."email" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_email",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."storageLabel" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_storageLabel",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."oauthId" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_oauthId",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."profileImagePath" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_profileImagePath",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."shouldChangePassword" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_shouldChangePassword",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."createdAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_createdAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."deletedAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_deletedAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."status" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_status",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."updatedAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_updatedAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."memoriesEnabled" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_memoriesEnabled",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."quotaSizeInBytes" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_quotaSizeInBytes",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."quotaUsageInBytes" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_quotaUsageInBytes"
FROM
"albums" "AlbumEntity"
LEFT JOIN "users" "AlbumEntity__AlbumEntity_owner" ON "AlbumEntity__AlbumEntity_owner"."id" = "AlbumEntity"."ownerId"
AND (
"AlbumEntity__AlbumEntity_owner"."deletedAt" IS NULL
)
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_albumPermissions" ON "AlbumEntity__AlbumEntity_albumPermissions"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "users" "0cf106548010af7bbb874df2a426f3f6525803ba" ON "0cf106548010af7bbb874df2a426f3f6525803ba"."id" = "AlbumEntity__AlbumEntity_albumPermissions"."usersId"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_users" ON "AlbumEntity__AlbumEntity_users"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "users" "c22bbb73d001d9cda353d6b9ef87490f7558ce0c" ON "c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."id" = "AlbumEntity__AlbumEntity_users"."usersId"
AND (
"0cf106548010af7bbb874df2a426f3f6525803ba"."deletedAt" IS NULL
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."deletedAt" IS NULL
)
WHERE
((("AlbumEntity"."id" IN ($1))))
@@ -174,35 +174,35 @@ SELECT
"AlbumEntity__AlbumEntity_owner"."memoriesEnabled" AS "AlbumEntity__AlbumEntity_owner_memoriesEnabled",
"AlbumEntity__AlbumEntity_owner"."quotaSizeInBytes" AS "AlbumEntity__AlbumEntity_owner_quotaSizeInBytes",
"AlbumEntity__AlbumEntity_owner"."quotaUsageInBytes" AS "AlbumEntity__AlbumEntity_owner_quotaUsageInBytes",
"AlbumEntity__AlbumEntity_albumPermissions"."albumsId" AS "AlbumEntity__AlbumEntity_albumPermissions_albumsId",
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" AS "AlbumEntity__AlbumEntity_albumPermissions_usersId",
"AlbumEntity__AlbumEntity_albumPermissions"."readonly" AS "AlbumEntity__AlbumEntity_albumPermissions_readonly",
"0cf106548010af7bbb874df2a426f3f6525803ba"."id" AS "0cf106548010af7bbb874df2a426f3f6525803ba_id",
"0cf106548010af7bbb874df2a426f3f6525803ba"."name" AS "0cf106548010af7bbb874df2a426f3f6525803ba_name",
"0cf106548010af7bbb874df2a426f3f6525803ba"."avatarColor" AS "0cf106548010af7bbb874df2a426f3f6525803ba_avatarColor",
"0cf106548010af7bbb874df2a426f3f6525803ba"."isAdmin" AS "0cf106548010af7bbb874df2a426f3f6525803ba_isAdmin",
"0cf106548010af7bbb874df2a426f3f6525803ba"."email" AS "0cf106548010af7bbb874df2a426f3f6525803ba_email",
"0cf106548010af7bbb874df2a426f3f6525803ba"."storageLabel" AS "0cf106548010af7bbb874df2a426f3f6525803ba_storageLabel",
"0cf106548010af7bbb874df2a426f3f6525803ba"."oauthId" AS "0cf106548010af7bbb874df2a426f3f6525803ba_oauthId",
"0cf106548010af7bbb874df2a426f3f6525803ba"."profileImagePath" AS "0cf106548010af7bbb874df2a426f3f6525803ba_profileImagePath",
"0cf106548010af7bbb874df2a426f3f6525803ba"."shouldChangePassword" AS "0cf106548010af7bbb874df2a426f3f6525803ba_shouldChangePassword",
"0cf106548010af7bbb874df2a426f3f6525803ba"."createdAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_createdAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."deletedAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_deletedAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."status" AS "0cf106548010af7bbb874df2a426f3f6525803ba_status",
"0cf106548010af7bbb874df2a426f3f6525803ba"."updatedAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_updatedAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."memoriesEnabled" AS "0cf106548010af7bbb874df2a426f3f6525803ba_memoriesEnabled",
"0cf106548010af7bbb874df2a426f3f6525803ba"."quotaSizeInBytes" AS "0cf106548010af7bbb874df2a426f3f6525803ba_quotaSizeInBytes",
"0cf106548010af7bbb874df2a426f3f6525803ba"."quotaUsageInBytes" AS "0cf106548010af7bbb874df2a426f3f6525803ba_quotaUsageInBytes"
"AlbumEntity__AlbumEntity_users"."albumsId" AS "AlbumEntity__AlbumEntity_users_albumsId",
"AlbumEntity__AlbumEntity_users"."usersId" AS "AlbumEntity__AlbumEntity_users_usersId",
"AlbumEntity__AlbumEntity_users"."readonly" AS "AlbumEntity__AlbumEntity_users_readonly",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."id" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_id",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."name" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_name",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."avatarColor" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_avatarColor",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."isAdmin" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_isAdmin",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."email" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_email",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."storageLabel" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_storageLabel",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."oauthId" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_oauthId",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."profileImagePath" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_profileImagePath",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."shouldChangePassword" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_shouldChangePassword",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."createdAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_createdAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."deletedAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_deletedAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."status" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_status",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."updatedAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_updatedAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."memoriesEnabled" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_memoriesEnabled",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."quotaSizeInBytes" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_quotaSizeInBytes",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."quotaUsageInBytes" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_quotaUsageInBytes"
FROM
"albums" "AlbumEntity"
LEFT JOIN "users" "AlbumEntity__AlbumEntity_owner" ON "AlbumEntity__AlbumEntity_owner"."id" = "AlbumEntity"."ownerId"
AND (
"AlbumEntity__AlbumEntity_owner"."deletedAt" IS NULL
)
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_albumPermissions" ON "AlbumEntity__AlbumEntity_albumPermissions"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "users" "0cf106548010af7bbb874df2a426f3f6525803ba" ON "0cf106548010af7bbb874df2a426f3f6525803ba"."id" = "AlbumEntity__AlbumEntity_albumPermissions"."usersId"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_users" ON "AlbumEntity__AlbumEntity_users"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "users" "c22bbb73d001d9cda353d6b9ef87490f7558ce0c" ON "c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."id" = "AlbumEntity__AlbumEntity_users"."usersId"
AND (
"0cf106548010af7bbb874df2a426f3f6525803ba"."deletedAt" IS NULL
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."deletedAt" IS NULL
)
LEFT JOIN "albums_assets_assets" "AlbumEntity_AlbumEntity__AlbumEntity_assets" ON "AlbumEntity_AlbumEntity__AlbumEntity_assets"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "assets" "AlbumEntity__AlbumEntity_assets" ON "AlbumEntity__AlbumEntity_assets"."id" = "AlbumEntity_AlbumEntity__AlbumEntity_assets"."assetsId"
@@ -221,11 +221,7 @@ WHERE
OR (
(
(
(
(
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" = $3
)
)
(("AlbumEntity__AlbumEntity_users"."usersId" = $3))
)
AND ((("AlbumEntity__AlbumEntity_assets"."id" = $4)))
)
@@ -294,25 +290,25 @@ SELECT
"AlbumEntity"."albumThumbnailAssetId" AS "AlbumEntity_albumThumbnailAssetId",
"AlbumEntity"."isActivityEnabled" AS "AlbumEntity_isActivityEnabled",
"AlbumEntity"."order" AS "AlbumEntity_order",
"AlbumEntity__AlbumEntity_albumPermissions"."albumsId" AS "AlbumEntity__AlbumEntity_albumPermissions_albumsId",
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" AS "AlbumEntity__AlbumEntity_albumPermissions_usersId",
"AlbumEntity__AlbumEntity_albumPermissions"."readonly" AS "AlbumEntity__AlbumEntity_albumPermissions_readonly",
"0cf106548010af7bbb874df2a426f3f6525803ba"."id" AS "0cf106548010af7bbb874df2a426f3f6525803ba_id",
"0cf106548010af7bbb874df2a426f3f6525803ba"."name" AS "0cf106548010af7bbb874df2a426f3f6525803ba_name",
"0cf106548010af7bbb874df2a426f3f6525803ba"."avatarColor" AS "0cf106548010af7bbb874df2a426f3f6525803ba_avatarColor",
"0cf106548010af7bbb874df2a426f3f6525803ba"."isAdmin" AS "0cf106548010af7bbb874df2a426f3f6525803ba_isAdmin",
"0cf106548010af7bbb874df2a426f3f6525803ba"."email" AS "0cf106548010af7bbb874df2a426f3f6525803ba_email",
"0cf106548010af7bbb874df2a426f3f6525803ba"."storageLabel" AS "0cf106548010af7bbb874df2a426f3f6525803ba_storageLabel",
"0cf106548010af7bbb874df2a426f3f6525803ba"."oauthId" AS "0cf106548010af7bbb874df2a426f3f6525803ba_oauthId",
"0cf106548010af7bbb874df2a426f3f6525803ba"."profileImagePath" AS "0cf106548010af7bbb874df2a426f3f6525803ba_profileImagePath",
"0cf106548010af7bbb874df2a426f3f6525803ba"."shouldChangePassword" AS "0cf106548010af7bbb874df2a426f3f6525803ba_shouldChangePassword",
"0cf106548010af7bbb874df2a426f3f6525803ba"."createdAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_createdAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."deletedAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_deletedAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."status" AS "0cf106548010af7bbb874df2a426f3f6525803ba_status",
"0cf106548010af7bbb874df2a426f3f6525803ba"."updatedAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_updatedAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."memoriesEnabled" AS "0cf106548010af7bbb874df2a426f3f6525803ba_memoriesEnabled",
"0cf106548010af7bbb874df2a426f3f6525803ba"."quotaSizeInBytes" AS "0cf106548010af7bbb874df2a426f3f6525803ba_quotaSizeInBytes",
"0cf106548010af7bbb874df2a426f3f6525803ba"."quotaUsageInBytes" AS "0cf106548010af7bbb874df2a426f3f6525803ba_quotaUsageInBytes",
"AlbumEntity__AlbumEntity_users"."albumsId" AS "AlbumEntity__AlbumEntity_users_albumsId",
"AlbumEntity__AlbumEntity_users"."usersId" AS "AlbumEntity__AlbumEntity_users_usersId",
"AlbumEntity__AlbumEntity_users"."readonly" AS "AlbumEntity__AlbumEntity_users_readonly",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."id" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_id",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."name" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_name",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."avatarColor" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_avatarColor",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."isAdmin" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_isAdmin",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."email" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_email",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."storageLabel" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_storageLabel",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."oauthId" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_oauthId",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."profileImagePath" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_profileImagePath",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."shouldChangePassword" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_shouldChangePassword",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."createdAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_createdAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."deletedAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_deletedAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."status" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_status",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."updatedAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_updatedAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."memoriesEnabled" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_memoriesEnabled",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."quotaSizeInBytes" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_quotaSizeInBytes",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."quotaUsageInBytes" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_quotaUsageInBytes",
"AlbumEntity__AlbumEntity_sharedLinks"."id" AS "AlbumEntity__AlbumEntity_sharedLinks_id",
"AlbumEntity__AlbumEntity_sharedLinks"."description" AS "AlbumEntity__AlbumEntity_sharedLinks_description",
"AlbumEntity__AlbumEntity_sharedLinks"."password" AS "AlbumEntity__AlbumEntity_sharedLinks_password",
@@ -343,10 +339,10 @@ SELECT
"AlbumEntity__AlbumEntity_owner"."quotaUsageInBytes" AS "AlbumEntity__AlbumEntity_owner_quotaUsageInBytes"
FROM
"albums" "AlbumEntity"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_albumPermissions" ON "AlbumEntity__AlbumEntity_albumPermissions"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "users" "0cf106548010af7bbb874df2a426f3f6525803ba" ON "0cf106548010af7bbb874df2a426f3f6525803ba"."id" = "AlbumEntity__AlbumEntity_albumPermissions"."usersId"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_users" ON "AlbumEntity__AlbumEntity_users"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "users" "c22bbb73d001d9cda353d6b9ef87490f7558ce0c" ON "c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."id" = "AlbumEntity__AlbumEntity_users"."usersId"
AND (
"0cf106548010af7bbb874df2a426f3f6525803ba"."deletedAt" IS NULL
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."deletedAt" IS NULL
)
LEFT JOIN "shared_links" "AlbumEntity__AlbumEntity_sharedLinks" ON "AlbumEntity__AlbumEntity_sharedLinks"."albumId" = "AlbumEntity"."id"
LEFT JOIN "users" "AlbumEntity__AlbumEntity_owner" ON "AlbumEntity__AlbumEntity_owner"."id" = "AlbumEntity"."ownerId"
@@ -371,25 +367,25 @@ SELECT
"AlbumEntity"."albumThumbnailAssetId" AS "AlbumEntity_albumThumbnailAssetId",
"AlbumEntity"."isActivityEnabled" AS "AlbumEntity_isActivityEnabled",
"AlbumEntity"."order" AS "AlbumEntity_order",
"AlbumEntity__AlbumEntity_albumPermissions"."albumsId" AS "AlbumEntity__AlbumEntity_albumPermissions_albumsId",
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" AS "AlbumEntity__AlbumEntity_albumPermissions_usersId",
"AlbumEntity__AlbumEntity_albumPermissions"."readonly" AS "AlbumEntity__AlbumEntity_albumPermissions_readonly",
"0cf106548010af7bbb874df2a426f3f6525803ba"."id" AS "0cf106548010af7bbb874df2a426f3f6525803ba_id",
"0cf106548010af7bbb874df2a426f3f6525803ba"."name" AS "0cf106548010af7bbb874df2a426f3f6525803ba_name",
"0cf106548010af7bbb874df2a426f3f6525803ba"."avatarColor" AS "0cf106548010af7bbb874df2a426f3f6525803ba_avatarColor",
"0cf106548010af7bbb874df2a426f3f6525803ba"."isAdmin" AS "0cf106548010af7bbb874df2a426f3f6525803ba_isAdmin",
"0cf106548010af7bbb874df2a426f3f6525803ba"."email" AS "0cf106548010af7bbb874df2a426f3f6525803ba_email",
"0cf106548010af7bbb874df2a426f3f6525803ba"."storageLabel" AS "0cf106548010af7bbb874df2a426f3f6525803ba_storageLabel",
"0cf106548010af7bbb874df2a426f3f6525803ba"."oauthId" AS "0cf106548010af7bbb874df2a426f3f6525803ba_oauthId",
"0cf106548010af7bbb874df2a426f3f6525803ba"."profileImagePath" AS "0cf106548010af7bbb874df2a426f3f6525803ba_profileImagePath",
"0cf106548010af7bbb874df2a426f3f6525803ba"."shouldChangePassword" AS "0cf106548010af7bbb874df2a426f3f6525803ba_shouldChangePassword",
"0cf106548010af7bbb874df2a426f3f6525803ba"."createdAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_createdAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."deletedAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_deletedAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."status" AS "0cf106548010af7bbb874df2a426f3f6525803ba_status",
"0cf106548010af7bbb874df2a426f3f6525803ba"."updatedAt" AS "0cf106548010af7bbb874df2a426f3f6525803ba_updatedAt",
"0cf106548010af7bbb874df2a426f3f6525803ba"."memoriesEnabled" AS "0cf106548010af7bbb874df2a426f3f6525803ba_memoriesEnabled",
"0cf106548010af7bbb874df2a426f3f6525803ba"."quotaSizeInBytes" AS "0cf106548010af7bbb874df2a426f3f6525803ba_quotaSizeInBytes",
"0cf106548010af7bbb874df2a426f3f6525803ba"."quotaUsageInBytes" AS "0cf106548010af7bbb874df2a426f3f6525803ba_quotaUsageInBytes",
"AlbumEntity__AlbumEntity_users"."albumsId" AS "AlbumEntity__AlbumEntity_users_albumsId",
"AlbumEntity__AlbumEntity_users"."usersId" AS "AlbumEntity__AlbumEntity_users_usersId",
"AlbumEntity__AlbumEntity_users"."readonly" AS "AlbumEntity__AlbumEntity_users_readonly",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."id" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_id",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."name" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_name",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."avatarColor" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_avatarColor",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."isAdmin" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_isAdmin",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."email" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_email",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."storageLabel" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_storageLabel",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."oauthId" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_oauthId",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."profileImagePath" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_profileImagePath",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."shouldChangePassword" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_shouldChangePassword",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."createdAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_createdAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."deletedAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_deletedAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."status" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_status",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."updatedAt" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_updatedAt",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."memoriesEnabled" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_memoriesEnabled",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."quotaSizeInBytes" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_quotaSizeInBytes",
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."quotaUsageInBytes" AS "c22bbb73d001d9cda353d6b9ef87490f7558ce0c_quotaUsageInBytes",
"AlbumEntity__AlbumEntity_sharedLinks"."id" AS "AlbumEntity__AlbumEntity_sharedLinks_id",
"AlbumEntity__AlbumEntity_sharedLinks"."description" AS "AlbumEntity__AlbumEntity_sharedLinks_description",
"AlbumEntity__AlbumEntity_sharedLinks"."password" AS "AlbumEntity__AlbumEntity_sharedLinks_password",
@@ -420,10 +416,10 @@ SELECT
"AlbumEntity__AlbumEntity_owner"."quotaUsageInBytes" AS "AlbumEntity__AlbumEntity_owner_quotaUsageInBytes"
FROM
"albums" "AlbumEntity"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_albumPermissions" ON "AlbumEntity__AlbumEntity_albumPermissions"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "users" "0cf106548010af7bbb874df2a426f3f6525803ba" ON "0cf106548010af7bbb874df2a426f3f6525803ba"."id" = "AlbumEntity__AlbumEntity_albumPermissions"."usersId"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_users" ON "AlbumEntity__AlbumEntity_users"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "users" "c22bbb73d001d9cda353d6b9ef87490f7558ce0c" ON "c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."id" = "AlbumEntity__AlbumEntity_users"."usersId"
AND (
"0cf106548010af7bbb874df2a426f3f6525803ba"."deletedAt" IS NULL
"c22bbb73d001d9cda353d6b9ef87490f7558ce0c"."deletedAt" IS NULL
)
LEFT JOIN "shared_links" "AlbumEntity__AlbumEntity_sharedLinks" ON "AlbumEntity__AlbumEntity_sharedLinks"."albumId" = "AlbumEntity"."id"
LEFT JOIN "users" "AlbumEntity__AlbumEntity_owner" ON "AlbumEntity__AlbumEntity_owner"."id" = "AlbumEntity"."ownerId"
@@ -436,11 +432,7 @@ WHERE
(
(
(
(
(
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" = $1
)
)
(("AlbumEntity__AlbumEntity_users"."usersId" = $1))
)
)
)
@@ -462,7 +454,7 @@ WHERE
(
(
NOT (
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" IS NULL
"AlbumEntity__AlbumEntity_users"."usersId" IS NULL
)
)
)
@@ -487,9 +479,9 @@ SELECT
"AlbumEntity"."albumThumbnailAssetId" AS "AlbumEntity_albumThumbnailAssetId",
"AlbumEntity"."isActivityEnabled" AS "AlbumEntity_isActivityEnabled",
"AlbumEntity"."order" AS "AlbumEntity_order",
"AlbumEntity__AlbumEntity_albumPermissions"."albumsId" AS "AlbumEntity__AlbumEntity_albumPermissions_albumsId",
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" AS "AlbumEntity__AlbumEntity_albumPermissions_usersId",
"AlbumEntity__AlbumEntity_albumPermissions"."readonly" AS "AlbumEntity__AlbumEntity_albumPermissions_readonly",
"AlbumEntity__AlbumEntity_users"."albumsId" AS "AlbumEntity__AlbumEntity_users_albumsId",
"AlbumEntity__AlbumEntity_users"."usersId" AS "AlbumEntity__AlbumEntity_users_usersId",
"AlbumEntity__AlbumEntity_users"."readonly" AS "AlbumEntity__AlbumEntity_users_readonly",
"AlbumEntity__AlbumEntity_sharedLinks"."id" AS "AlbumEntity__AlbumEntity_sharedLinks_id",
"AlbumEntity__AlbumEntity_sharedLinks"."description" AS "AlbumEntity__AlbumEntity_sharedLinks_description",
"AlbumEntity__AlbumEntity_sharedLinks"."password" AS "AlbumEntity__AlbumEntity_sharedLinks_password",
@@ -520,7 +512,7 @@ SELECT
"AlbumEntity__AlbumEntity_owner"."quotaUsageInBytes" AS "AlbumEntity__AlbumEntity_owner_quotaUsageInBytes"
FROM
"albums" "AlbumEntity"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_albumPermissions" ON "AlbumEntity__AlbumEntity_albumPermissions"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "albums_shared_users_users" "AlbumEntity__AlbumEntity_users" ON "AlbumEntity__AlbumEntity_users"."albumsId" = "AlbumEntity"."id"
LEFT JOIN "shared_links" "AlbumEntity__AlbumEntity_sharedLinks" ON "AlbumEntity__AlbumEntity_sharedLinks"."albumId" = "AlbumEntity"."id"
LEFT JOIN "users" "AlbumEntity__AlbumEntity_owner" ON "AlbumEntity__AlbumEntity_owner"."id" = "AlbumEntity"."ownerId"
AND (
@@ -533,7 +525,7 @@ WHERE
AND (
(
(
"AlbumEntity__AlbumEntity_albumPermissions"."usersId" IS NULL
"AlbumEntity__AlbumEntity_users"."usersId" IS NULL
)
)
)

View File

@@ -79,8 +79,8 @@ class ActivityAccess implements IActivityAccess {
return this.albumRepository
.createQueryBuilder('album')
.select('album.id')
.leftJoin('album.albumPermissions', 'albumPermissions')
.leftJoin('albumPermissions.users', 'sharedUsers')
.leftJoin('album.sharedUsers', 'albumSharedUsers')
.leftJoin('albumSharedUsers.users', 'sharedUsers')
.where('album.id IN (:...albumIds)', { albumIds: [...albumIds] })
.andWhere('album.isActivityEnabled = true')
.andWhere(
@@ -127,11 +127,11 @@ class AlbumAccess implements IAlbumAccess {
return this.albumRepository
.find({
select: { id: true },
relations: { albumPermissions: true },
relations: { sharedUsers: true },
// -@ts-expect-error asd
where: {
id: In([...albumIds]),
albumPermissions: {
sharedUsers: {
users: Equal(userId),
// If write is needed we check for it, otherwise both are accepted
readonly: readWrite === 'write' ? false : undefined,
@@ -180,7 +180,7 @@ class AssetAccess implements IAssetAccess {
return this.albumRepository
.createQueryBuilder('album')
.innerJoin('album.assets', 'asset')
.leftJoin('album.albumPermissions', 'albumPermissions')
.leftJoin('album.users', 'albumPermissions')
.leftJoin('albumPermissions.users', 'sharedUsers')
.select('asset.id', 'assetId')
.addSelect('asset.livePhotoVideoId', 'livePhotoVideoId')

View File

@@ -1,22 +1,21 @@
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Equals } from 'class-validator';
import { AlbumPermissionEntity } from 'src/entities/album-permission.entity';
import { IAlbumPermissionRepository } from 'src/interfaces/album-permission.interface';
import { AlbumUserEntity } from 'src/entities/album-user.entity';
import { AlbumPermissionId, IAlbumUserRepository } from 'src/interfaces/album-user.interface';
import { Instrumentation } from 'src/utils/instrumentation';
import { Equal, Repository } from 'typeorm';
@Instrumentation()
@Injectable()
export class AlbumPermissionRepository implements IAlbumPermissionRepository {
constructor(@InjectRepository(AlbumPermissionEntity) private repository: Repository<AlbumPermissionEntity>) {}
export class AlbumUserRepository implements IAlbumUserRepository {
constructor(@InjectRepository(AlbumUserEntity) private repository: Repository<AlbumUserEntity>) {}
async create(dto: Partial<AlbumPermissionEntity>): Promise<AlbumPermissionEntity> {
async create(dto: Partial<AlbumUserEntity>): Promise<AlbumUserEntity> {
const { users, albums } = await this.repository.save(dto);
return this.repository.findOneOrFail({ where: { users, albums }, relations: { users: true } });
}
async update(userId: string, albumId: string, dto: Partial<AlbumPermissionEntity>): Promise<AlbumPermissionEntity> {
async update({ userId, albumId }: AlbumPermissionId, dto: Partial<AlbumUserEntity>): Promise<AlbumUserEntity> {
// @ts-expect-error I'm pretty sure I messed something up with the entity because
// if I follow what typescript says I get postgres errors
await this.repository.update({ users: userId, albums: albumId }, dto);
@@ -26,7 +25,7 @@ export class AlbumPermissionRepository implements IAlbumPermissionRepository {
});
}
async delete(userId: string, albumId: string): Promise<void> {
async delete({ userId, albumId }: AlbumPermissionId): Promise<void> {
await this.repository.delete({ users: { id: userId }, albums: { id: albumId } });
}
}

View File

@@ -23,7 +23,7 @@ export class AlbumRepository implements IAlbumRepository {
getById(id: string, options: AlbumInfoOptions): Promise<AlbumEntity | null> {
const relations: FindOptionsRelations<AlbumEntity> = {
owner: true,
albumPermissions: { users: true },
sharedUsers: { users: true },
assets: false,
sharedLinks: true,
};
@@ -52,7 +52,7 @@ export class AlbumRepository implements IAlbumRepository {
},
relations: {
owner: true,
albumPermissions: { users: true },
sharedUsers: { users: true },
},
});
}
@@ -62,9 +62,9 @@ export class AlbumRepository implements IAlbumRepository {
return this.repository.find({
where: [
{ ownerId, assets: { id: assetId } },
{ albumPermissions: { users: Equal(ownerId) }, assets: { id: assetId } },
{ sharedUsers: { users: Equal(ownerId) }, assets: { id: assetId } },
],
relations: { owner: true, albumPermissions: { users: true } },
relations: { owner: true, sharedUsers: { users: true } },
order: { createdAt: 'DESC' },
});
}
@@ -129,7 +129,7 @@ export class AlbumRepository implements IAlbumRepository {
@GenerateSql({ params: [DummyValue.UUID] })
getOwned(ownerId: string): Promise<AlbumEntity[]> {
return this.repository.find({
relations: { albumPermissions: { users: true }, sharedLinks: true, owner: true },
relations: { sharedUsers: { users: true }, sharedLinks: true, owner: true },
where: { ownerId },
order: { createdAt: 'DESC' },
});
@@ -141,11 +141,11 @@ export class AlbumRepository implements IAlbumRepository {
@GenerateSql({ params: [DummyValue.UUID] })
getShared(ownerId: string): Promise<AlbumEntity[]> {
return this.repository.find({
relations: { albumPermissions: { users: true }, sharedLinks: true, owner: true },
relations: { sharedUsers: { users: true }, sharedLinks: true, owner: true },
where: [
{ albumPermissions: { users: Equal(ownerId) } },
{ sharedUsers: { users: Equal(ownerId) } },
{ sharedLinks: { userId: ownerId } },
{ ownerId, albumPermissions: { users: Not(IsNull()) } },
{ ownerId, sharedUsers: { users: Not(IsNull()) } },
],
order: { createdAt: 'DESC' },
});
@@ -157,8 +157,8 @@ export class AlbumRepository implements IAlbumRepository {
@GenerateSql({ params: [DummyValue.UUID] })
getNotShared(ownerId: string): Promise<AlbumEntity[]> {
return this.repository.find({
relations: { albumPermissions: true, sharedLinks: true, owner: true },
where: { ownerId, albumPermissions: { users: IsNull() }, sharedLinks: { id: IsNull() } },
relations: { sharedUsers: true, sharedLinks: true, owner: true },
where: { ownerId, sharedUsers: { users: IsNull() }, sharedLinks: { id: IsNull() } },
order: { createdAt: 'DESC' },
});
}
@@ -282,7 +282,7 @@ export class AlbumRepository implements IAlbumRepository {
where: { id },
relations: {
owner: true,
albumPermissions: { users: true },
sharedUsers: { users: true },
sharedLinks: true,
assets: true,
},

View File

@@ -1,6 +1,6 @@
import { IAccessRepository } from 'src/interfaces/access.interface';
import { IActivityRepository } from 'src/interfaces/activity.interface';
import { IAlbumPermissionRepository } from 'src/interfaces/album-permission.interface';
import { IAlbumUserRepository } from 'src/interfaces/album-user.interface';
import { IAlbumRepository } from 'src/interfaces/album.interface';
import { IKeyRepository } from 'src/interfaces/api-key.interface';
import { IAssetStackRepository } from 'src/interfaces/asset-stack.interface';
@@ -31,7 +31,7 @@ import { IUserTokenRepository } from 'src/interfaces/user-token.interface';
import { IUserRepository } from 'src/interfaces/user.interface';
import { AccessRepository } from 'src/repositories/access.repository';
import { ActivityRepository } from 'src/repositories/activity.repository';
import { AlbumPermissionRepository } from 'src/repositories/album-permission.repository';
import { AlbumUserRepository } from 'src/repositories/album-user.repository';
import { AlbumRepository } from 'src/repositories/album.repository';
import { ApiKeyRepository } from 'src/repositories/api-key.repository';
import { AssetStackRepository } from 'src/repositories/asset-stack.repository';
@@ -65,7 +65,7 @@ export const repositories = [
{ provide: IActivityRepository, useClass: ActivityRepository },
{ provide: IAccessRepository, useClass: AccessRepository },
{ provide: IAlbumRepository, useClass: AlbumRepository },
{ provide: IAlbumPermissionRepository, useClass: AlbumPermissionRepository },
{ provide: IAlbumUserRepository, useClass: AlbumUserRepository },
{ provide: IAssetRepository, useClass: AssetRepository },
{ provide: IAssetRepositoryV1, useClass: AssetRepositoryV1 },
{ provide: IAssetStackRepository, useClass: AssetStackRepository },

View File

@@ -14,11 +14,11 @@ import {
} from 'src/dtos/album.dto';
import { BulkIdResponseDto, BulkIdsDto } from 'src/dtos/asset-ids.response.dto';
import { AuthDto } from 'src/dtos/auth.dto';
import { AlbumPermissionEntity } from 'src/entities/album-permission.entity';
import { AlbumUserEntity } from 'src/entities/album-user.entity';
import { AlbumEntity } from 'src/entities/album.entity';
import { AssetEntity } from 'src/entities/asset.entity';
import { IAccessRepository } from 'src/interfaces/access.interface';
import { IAlbumPermissionRepository } from 'src/interfaces/album-permission.interface';
import { IAlbumUserRepository } from 'src/interfaces/album-user.interface';
import { AlbumAssetCount, AlbumInfoOptions, IAlbumRepository } from 'src/interfaces/album.interface';
import { IAssetRepository } from 'src/interfaces/asset.interface';
import { IUserRepository } from 'src/interfaces/user.interface';
@@ -32,7 +32,7 @@ export class AlbumService {
@Inject(IAlbumRepository) private albumRepository: IAlbumRepository,
@Inject(IAssetRepository) private assetRepository: IAssetRepository,
@Inject(IUserRepository) private userRepository: IUserRepository,
@Inject(IAlbumPermissionRepository) private albumPermissionRepository: IAlbumPermissionRepository,
@Inject(IAlbumUserRepository) private albumPermissionRepository: IAlbumUserRepository,
) {
this.access = AccessCore.create(accessRepository);
}
@@ -128,8 +128,7 @@ export class AlbumService {
ownerId: auth.user.id,
albumName: dto.albumName,
description: dto.description,
albumPermissions:
dto.sharedWithUserIds?.map((userId) => ({ users: { id: userId } }) as AlbumPermissionEntity) ?? [],
sharedUsers: dto.sharedWithUserIds?.map((userId) => ({ users: { id: userId } }) as AlbumUserEntity) ?? [],
assets,
albumThumbnailAssetId: assets[0]?.id || null,
});
@@ -222,7 +221,7 @@ export class AlbumService {
throw new BadRequestException('Cannot be shared with owner');
}
const exists = album.albumPermissions.find(({ users: { id } }) => id === userId);
const exists = album.sharedUsers.find(({ users: { id } }) => id === userId);
if (exists) {
throw new BadRequestException('User already added');
}
@@ -232,8 +231,8 @@ export class AlbumService {
throw new BadRequestException('User not found');
}
album.albumPermissions.push(
await this.albumPermissionRepository.create({ users: { id: userId }, albums: { id } } as AlbumPermissionEntity),
album.sharedUsers.push(
await this.albumPermissionRepository.create({ users: { id: userId }, albums: { id } } as AlbumUserEntity),
);
}
@@ -251,7 +250,7 @@ export class AlbumService {
throw new BadRequestException('Cannot remove album owner');
}
const exists = album.albumPermissions.find(({ users: { id } }) => id === userId);
const exists = album.sharedUsers.find(({ users: { id } }) => id === userId);
if (!exists) {
throw new BadRequestException('Album not shared with user');
}
@@ -261,25 +260,20 @@ export class AlbumService {
await this.access.requirePermission(auth, Permission.ALBUM_SHARE, id);
}
await this.albumPermissionRepository.delete(userId, id);
await this.albumPermissionRepository.delete({ albumId: id, userId });
}
async setAlbumPermission(
auth: AuthDto,
id: string,
userId: string,
dto: Partial<AlbumPermissionEntity>,
): Promise<void> {
async updateAlbumUser(auth: AuthDto, id: string, userId: string, dto: Partial<AlbumUserEntity>): Promise<void> {
await this.access.requirePermission(auth, Permission.ALBUM_SHARE, id);
const album = await this.findOrFail(id, { withAssets: false });
const permission = album.albumPermissions.find(({ users: { id } }) => id === userId);
const permission = album.sharedUsers.find(({ users: { id } }) => id === userId);
if (!permission) {
throw new BadRequestException('Album not shared with user');
}
await this.albumPermissionRepository.update(userId, id, { readonly: dto.readonly });
await this.albumPermissionRepository.update({ albumId: id, userId }, { readonly: dto.readonly });
}
private async findOrFail(id: string, options: AlbumInfoOptions) {