1
0
mirror of https://github.com/immich-app/immich.git synced 2024-12-25 10:43:13 +02:00

refactor(server): album controller (#2539)

* refactor: album controller/service

* chore: open-api

* fix: tests
This commit is contained in:
Jason Rasmussen 2023-05-24 10:30:13 -04:00 committed by GitHub
parent a1f1e5bc37
commit 49b74e9091
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 219 additions and 287 deletions

BIN
mobile/openapi/README.md generated

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -20,124 +20,112 @@ import {
} from '../../constants/download.constant'; } from '../../constants/download.constant';
import { DownloadDto } from '../asset/dto/download-library.dto'; import { DownloadDto } from '../asset/dto/download-library.dto';
import { CreateAlbumShareLinkDto as CreateAlbumSharedLinkDto } from './dto/create-album-shared-link.dto'; import { CreateAlbumShareLinkDto as CreateAlbumSharedLinkDto } from './dto/create-album-shared-link.dto';
import { AlbumIdDto } from './dto/album-id.dto';
import { UseValidation } from '../../decorators/use-validation.decorator'; import { UseValidation } from '../../decorators/use-validation.decorator';
import { UUIDParamDto } from '../../controllers/dto/uuid-param.dto';
import { DownloadArchive } from '../../modules/download/download.service';
const handleDownload = (download: DownloadArchive, res: Res) => {
res.attachment(download.fileName);
res.setHeader(IMMICH_CONTENT_LENGTH_HINT, download.fileSize);
res.setHeader(IMMICH_ARCHIVE_FILE_COUNT, download.fileCount);
res.setHeader(IMMICH_ARCHIVE_COMPLETE, `${download.complete}`);
return download.stream;
};
@ApiTags('Album') @ApiTags('Album')
@Controller('album') @Controller('album')
@UseValidation() @UseValidation()
export class AlbumController { export class AlbumController {
constructor(private readonly albumService: AlbumService) {} constructor(private readonly service: AlbumService) {}
@Authenticated() @Authenticated()
@Get('count-by-user-id') @Get('count-by-user-id')
async getAlbumCountByUserId(@GetAuthUser() authUser: AuthUserDto): Promise<AlbumCountResponseDto> { getAlbumCountByUserId(@GetAuthUser() authUser: AuthUserDto): Promise<AlbumCountResponseDto> {
return this.albumService.getAlbumCountByUserId(authUser); return this.service.getCountByUserId(authUser);
} }
@Authenticated() @Authenticated()
@Post() @Post()
async createAlbum(@GetAuthUser() authUser: AuthUserDto, @Body() createAlbumDto: CreateAlbumDto) { createAlbum(@GetAuthUser() authUser: AuthUserDto, @Body() dto: CreateAlbumDto) {
// TODO: Handle nonexistent sharedWithUserIds and assetIds. // TODO: Handle nonexistent sharedWithUserIds and assetIds.
return this.albumService.create(authUser, createAlbumDto); return this.service.create(authUser, dto);
} }
@Authenticated() @Authenticated()
@Put('/:albumId/users') @Put(':id/users')
async addUsersToAlbum( addUsersToAlbum(@GetAuthUser() authUser: AuthUserDto, @Param() { id }: UUIDParamDto, @Body() dto: AddUsersDto) {
@GetAuthUser() authUser: AuthUserDto,
@Body() addUsersDto: AddUsersDto,
@Param() { albumId }: AlbumIdDto,
) {
// TODO: Handle nonexistent sharedUserIds. // TODO: Handle nonexistent sharedUserIds.
return this.albumService.addUsersToAlbum(authUser, addUsersDto, albumId); return this.service.addUsers(authUser, id, dto);
} }
@Authenticated({ isShared: true }) @Authenticated({ isShared: true })
@Put('/:albumId/assets') @Put(':id/assets')
async addAssetsToAlbum( addAssetsToAlbum(
@GetAuthUser() authUser: AuthUserDto, @GetAuthUser() authUser: AuthUserDto,
@Body() addAssetsDto: AddAssetsDto, @Param() { id }: UUIDParamDto,
@Param() { albumId }: AlbumIdDto, @Body() dto: AddAssetsDto,
): Promise<AddAssetsResponseDto> { ): Promise<AddAssetsResponseDto> {
// TODO: Handle nonexistent assetIds. // TODO: Handle nonexistent assetIds.
// TODO: Disallow adding assets of another user to an album. // TODO: Disallow adding assets of another user to an album.
return this.albumService.addAssetsToAlbum(authUser, addAssetsDto, albumId); return this.service.addAssets(authUser, id, dto);
} }
@Authenticated({ isShared: true }) @Authenticated({ isShared: true })
@Get('/:albumId') @Get(':id')
async getAlbumInfo(@GetAuthUser() authUser: AuthUserDto, @Param() { albumId }: AlbumIdDto) { getAlbumInfo(@GetAuthUser() authUser: AuthUserDto, @Param() { id }: UUIDParamDto) {
return this.albumService.getAlbumInfo(authUser, albumId); return this.service.get(authUser, id);
} }
@Authenticated() @Authenticated()
@Delete('/:albumId/assets') @Delete(':id/assets')
async removeAssetFromAlbum( removeAssetFromAlbum(
@GetAuthUser() authUser: AuthUserDto, @GetAuthUser() authUser: AuthUserDto,
@Body() removeAssetsDto: RemoveAssetsDto, @Body() dto: RemoveAssetsDto,
@Param() { albumId }: AlbumIdDto, @Param() { id }: UUIDParamDto,
): Promise<AlbumResponseDto> { ): Promise<AlbumResponseDto> {
return this.albumService.removeAssetsFromAlbum(authUser, removeAssetsDto, albumId); return this.service.removeAssets(authUser, id, dto);
} }
@Authenticated() @Authenticated()
@Delete('/:albumId') @Delete(':id')
async deleteAlbum(@GetAuthUser() authUser: AuthUserDto, @Param() { albumId }: AlbumIdDto) { deleteAlbum(@GetAuthUser() authUser: AuthUserDto, @Param() { id }: UUIDParamDto) {
return this.albumService.deleteAlbum(authUser, albumId); return this.service.delete(authUser, id);
} }
@Authenticated() @Authenticated()
@Delete('/:albumId/user/:userId') @Delete(':id/user/:userId')
async removeUserFromAlbum( removeUserFromAlbum(
@GetAuthUser() authUser: AuthUserDto, @GetAuthUser() authUser: AuthUserDto,
@Param() { albumId }: AlbumIdDto, @Param() { id }: UUIDParamDto,
@Param('userId', new ParseMeUUIDPipe({ version: '4' })) userId: string, @Param('userId', new ParseMeUUIDPipe({ version: '4' })) userId: string,
) { ) {
return this.albumService.removeUserFromAlbum(authUser, albumId, userId); return this.service.removeUser(authUser, id, userId);
} }
@Authenticated() @Authenticated()
@Patch('/:albumId') @Patch(':id')
async updateAlbumInfo( updateAlbumInfo(@GetAuthUser() authUser: AuthUserDto, @Param() { id }: UUIDParamDto, @Body() dto: UpdateAlbumDto) {
@GetAuthUser() authUser: AuthUserDto,
@Body() updateAlbumInfoDto: UpdateAlbumDto,
@Param() { albumId }: AlbumIdDto,
) {
// TODO: Handle nonexistent albumThumbnailAssetId. // TODO: Handle nonexistent albumThumbnailAssetId.
// TODO: Disallow setting asset from other user as albumThumbnailAssetId. // TODO: Disallow setting asset from other user as albumThumbnailAssetId.
return this.albumService.updateAlbumInfo(authUser, updateAlbumInfoDto, albumId); return this.service.update(authUser, id, dto);
} }
@Authenticated({ isShared: true }) @Authenticated({ isShared: true })
@Get('/:albumId/download') @Get(':id/download')
@ApiOkResponse({ content: { 'application/zip': { schema: { type: 'string', format: 'binary' } } } }) @ApiOkResponse({ content: { 'application/zip': { schema: { type: 'string', format: 'binary' } } } })
async downloadArchive( downloadArchive(
@GetAuthUser() authUser: AuthUserDto, @GetAuthUser() authUser: AuthUserDto,
@Param() { albumId }: AlbumIdDto, @Param() { id }: UUIDParamDto,
@Query() dto: DownloadDto, @Query() dto: DownloadDto,
@Response({ passthrough: true }) res: Res, @Response({ passthrough: true }) res: Res,
) { ) {
this.albumService.checkDownloadAccess(authUser); this.service.checkDownloadAccess(authUser);
return this.service.downloadArchive(authUser, id, dto).then((download) => handleDownload(download, res));
const { stream, fileName, fileSize, fileCount, complete } = await this.albumService.downloadArchive(
authUser,
albumId,
dto,
);
res.attachment(fileName);
res.setHeader(IMMICH_CONTENT_LENGTH_HINT, fileSize);
res.setHeader(IMMICH_ARCHIVE_FILE_COUNT, fileCount);
res.setHeader(IMMICH_ARCHIVE_COMPLETE, `${complete}`);
return stream;
} }
@Authenticated() @Authenticated()
@Post('/create-shared-link') @Post('create-shared-link')
async createAlbumSharedLink( createAlbumSharedLink(@GetAuthUser() authUser: AuthUserDto, @Body() dto: CreateAlbumSharedLinkDto) {
@GetAuthUser() authUser: AuthUserDto, return this.service.createSharedLink(authUser, dto);
@Body() createAlbumShareLinkDto: CreateAlbumSharedLinkDto,
) {
return this.albumService.createAlbumSharedLink(authUser, createAlbumShareLinkDto);
} }
} }

View File

@ -182,14 +182,14 @@ describe('Album service', () => {
shared: false, shared: false,
assetCount: 0, assetCount: 0,
}; };
await expect(sut.getAlbumInfo(authUser, albumId)).resolves.toEqual(expectedResult); await expect(sut.get(authUser, albumId)).resolves.toEqual(expectedResult);
}); });
it('gets a shared album', async () => { it('gets a shared album', async () => {
const albumEntity = _getSharedWithAuthUserAlbum(); const albumEntity = _getSharedWithAuthUserAlbum();
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
const result = await sut.getAlbumInfo(authUser, albumId); const result = await sut.get(authUser, albumId);
expect(result.id).toEqual(albumId); expect(result.id).toEqual(albumId);
expect(result.ownerId).toEqual(sharedAlbumOwnerId); expect(result.ownerId).toEqual(sharedAlbumOwnerId);
expect(result.shared).toEqual(true); expect(result.shared).toEqual(true);
@ -203,19 +203,19 @@ describe('Album service', () => {
const albumId = albumEntity.id; const albumId = albumEntity.id;
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
await expect(sut.getAlbumInfo(authUser, albumId)).rejects.toBeInstanceOf(ForbiddenException); await expect(sut.get(authUser, albumId)).rejects.toBeInstanceOf(ForbiddenException);
}); });
it('throws a not found exception if the album is not found', async () => { it('throws a not found exception if the album is not found', async () => {
albumRepositoryMock.get.mockImplementation(() => Promise.resolve(null)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve(null));
await expect(sut.getAlbumInfo(authUser, '0002')).rejects.toBeInstanceOf(NotFoundException); await expect(sut.get(authUser, '0002')).rejects.toBeInstanceOf(NotFoundException);
}); });
it('deletes an owned album', async () => { it('deletes an owned album', async () => {
const albumEntity = _getOwnedAlbum(); const albumEntity = _getOwnedAlbum();
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
albumRepositoryMock.delete.mockImplementation(() => Promise.resolve()); albumRepositoryMock.delete.mockImplementation(() => Promise.resolve());
await sut.deleteAlbum(authUser, albumId); await sut.delete(authUser, albumId);
expect(albumRepositoryMock.delete).toHaveBeenCalledTimes(1); expect(albumRepositoryMock.delete).toHaveBeenCalledTimes(1);
expect(albumRepositoryMock.delete).toHaveBeenCalledWith(albumEntity); expect(albumRepositoryMock.delete).toHaveBeenCalledWith(albumEntity);
}); });
@ -223,14 +223,14 @@ describe('Album service', () => {
it('prevents deleting a shared album (shared with auth user)', async () => { it('prevents deleting a shared album (shared with auth user)', async () => {
const albumEntity = _getSharedWithAuthUserAlbum(); const albumEntity = _getSharedWithAuthUserAlbum();
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
await expect(sut.deleteAlbum(authUser, albumId)).rejects.toBeInstanceOf(ForbiddenException); await expect(sut.delete(authUser, albumId)).rejects.toBeInstanceOf(ForbiddenException);
}); });
it('removes a shared user from an owned album', async () => { it('removes a shared user from an owned album', async () => {
const albumEntity = _getOwnedSharedAlbum(); const albumEntity = _getOwnedSharedAlbum();
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
albumRepositoryMock.removeUser.mockImplementation(() => Promise.resolve()); albumRepositoryMock.removeUser.mockImplementation(() => Promise.resolve());
await expect(sut.removeUserFromAlbum(authUser, albumEntity.id, ownedAlbumSharedWithId)).resolves.toBeUndefined(); await expect(sut.removeUser(authUser, albumEntity.id, ownedAlbumSharedWithId)).resolves.toBeUndefined();
expect(albumRepositoryMock.removeUser).toHaveBeenCalledTimes(1); expect(albumRepositoryMock.removeUser).toHaveBeenCalledTimes(1);
expect(albumRepositoryMock.removeUser).toHaveBeenCalledWith(albumEntity, ownedAlbumSharedWithId); expect(albumRepositoryMock.removeUser).toHaveBeenCalledWith(albumEntity, ownedAlbumSharedWithId);
}); });
@ -242,7 +242,7 @@ describe('Album service', () => {
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
await expect(sut.removeUserFromAlbum(authUser, albumId, userIdToRemove)).rejects.toBeInstanceOf(ForbiddenException); await expect(sut.removeUser(authUser, albumId, userIdToRemove)).rejects.toBeInstanceOf(ForbiddenException);
expect(albumRepositoryMock.removeUser).not.toHaveBeenCalled(); expect(albumRepositoryMock.removeUser).not.toHaveBeenCalled();
}); });
@ -251,7 +251,7 @@ describe('Album service', () => {
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
albumRepositoryMock.removeUser.mockImplementation(() => Promise.resolve()); albumRepositoryMock.removeUser.mockImplementation(() => Promise.resolve());
await sut.removeUserFromAlbum(authUser, albumEntity.id, authUser.id); await sut.removeUser(authUser, albumEntity.id, authUser.id);
expect(albumRepositoryMock.removeUser).toHaveReturnedTimes(1); expect(albumRepositoryMock.removeUser).toHaveReturnedTimes(1);
expect(albumRepositoryMock.removeUser).toHaveBeenCalledWith(albumEntity, authUser.id); expect(albumRepositoryMock.removeUser).toHaveBeenCalledWith(albumEntity, authUser.id);
}); });
@ -261,7 +261,7 @@ describe('Album service', () => {
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
albumRepositoryMock.removeUser.mockImplementation(() => Promise.resolve()); albumRepositoryMock.removeUser.mockImplementation(() => Promise.resolve());
await sut.removeUserFromAlbum(authUser, albumEntity.id, 'me'); await sut.removeUser(authUser, albumEntity.id, 'me');
expect(albumRepositoryMock.removeUser).toHaveReturnedTimes(1); expect(albumRepositoryMock.removeUser).toHaveReturnedTimes(1);
expect(albumRepositoryMock.removeUser).toHaveBeenCalledWith(albumEntity, authUser.id); expect(albumRepositoryMock.removeUser).toHaveBeenCalledWith(albumEntity, authUser.id);
}); });
@ -270,9 +270,7 @@ describe('Album service', () => {
const albumEntity = _getOwnedAlbum(); const albumEntity = _getOwnedAlbum();
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
await expect(sut.removeUserFromAlbum(authUser, albumEntity.id, authUser.id)).rejects.toBeInstanceOf( await expect(sut.removeUser(authUser, albumEntity.id, authUser.id)).rejects.toBeInstanceOf(BadRequestException);
BadRequestException,
);
}); });
it('updates a owned album', async () => { it('updates a owned album', async () => {
@ -284,14 +282,10 @@ describe('Album service', () => {
const updatedAlbum = { ...albumEntity, albumName: updatedAlbumName }; const updatedAlbum = { ...albumEntity, albumName: updatedAlbumName };
albumRepositoryMock.updateAlbum.mockResolvedValue(updatedAlbum); albumRepositoryMock.updateAlbum.mockResolvedValue(updatedAlbum);
const result = await sut.updateAlbumInfo( const result = await sut.update(authUser, albumId, {
authUser,
{
albumName: updatedAlbumName, albumName: updatedAlbumName,
albumThumbnailAssetId: updatedAlbumThumbnailAssetId, albumThumbnailAssetId: updatedAlbumThumbnailAssetId,
}, });
albumId,
);
expect(result.id).toEqual(albumId); expect(result.id).toEqual(albumId);
expect(result.albumName).toEqual(updatedAlbumName); expect(result.albumName).toEqual(updatedAlbumName);
@ -310,14 +304,10 @@ describe('Album service', () => {
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
await expect( await expect(
sut.updateAlbumInfo( sut.update(authUser, albumId, {
authUser,
{
albumName: 'new album name', albumName: 'new album name',
albumThumbnailAssetId: '69d2f917-0b31-48d8-9d7d-673b523f1aac', albumThumbnailAssetId: '69d2f917-0b31-48d8-9d7d-673b523f1aac',
}, }),
albumId,
),
).rejects.toBeInstanceOf(ForbiddenException); ).rejects.toBeInstanceOf(ForbiddenException);
}); });
@ -334,13 +324,7 @@ describe('Album service', () => {
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
albumRepositoryMock.addAssets.mockImplementation(() => Promise.resolve<AddAssetsResponseDto>(albumResponse)); albumRepositoryMock.addAssets.mockImplementation(() => Promise.resolve<AddAssetsResponseDto>(albumResponse));
const result = (await sut.addAssetsToAlbum( const result = (await sut.addAssets(authUser, albumId, { assetIds: ['1'] })) as AddAssetsResponseDto;
authUser,
{
assetIds: ['1'],
},
albumId,
)) as AddAssetsResponseDto;
// TODO: stub and expect album rendered // TODO: stub and expect album rendered
expect(result.album?.id).toEqual(albumId); expect(result.album?.id).toEqual(albumId);
@ -359,13 +343,7 @@ describe('Album service', () => {
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
albumRepositoryMock.addAssets.mockImplementation(() => Promise.resolve<AddAssetsResponseDto>(albumResponse)); albumRepositoryMock.addAssets.mockImplementation(() => Promise.resolve<AddAssetsResponseDto>(albumResponse));
const result = (await sut.addAssetsToAlbum( const result = (await sut.addAssets(authUser, albumId, { assetIds: ['1'] })) as AddAssetsResponseDto;
authUser,
{
assetIds: ['1'],
},
albumId,
)) as AddAssetsResponseDto;
// TODO: stub and expect album rendered // TODO: stub and expect album rendered
expect(result.album?.id).toEqual(albumId); expect(result.album?.id).toEqual(albumId);
@ -384,15 +362,7 @@ describe('Album service', () => {
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
albumRepositoryMock.addAssets.mockImplementation(() => Promise.resolve<AddAssetsResponseDto>(albumResponse)); albumRepositoryMock.addAssets.mockImplementation(() => Promise.resolve<AddAssetsResponseDto>(albumResponse));
await expect( await expect(sut.addAssets(authUser, albumId, { assetIds: ['1'] })).rejects.toBeInstanceOf(ForbiddenException);
sut.addAssetsToAlbum(
authUser,
{
assetIds: ['1'],
},
albumId,
),
).rejects.toBeInstanceOf(ForbiddenException);
}); });
// it('removes assets from owned album', async () => { // it('removes assets from owned album', async () => {
@ -448,14 +418,6 @@ describe('Album service', () => {
albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity)); albumRepositoryMock.get.mockImplementation(() => Promise.resolve<AlbumEntity>(albumEntity));
albumRepositoryMock.addAssets.mockImplementation(() => Promise.resolve<AddAssetsResponseDto>(albumResponse)); albumRepositoryMock.addAssets.mockImplementation(() => Promise.resolve<AddAssetsResponseDto>(albumResponse));
await expect( await expect(sut.removeAssets(authUser, albumId, { assetIds: ['1'] })).rejects.toBeInstanceOf(ForbiddenException);
sut.removeAssetsFromAlbum(
authUser,
{
assetIds: ['1'],
},
albumId,
),
).rejects.toBeInstanceOf(ForbiddenException);
}); });
}); });

View File

@ -61,18 +61,18 @@ export class AlbumService {
return mapAlbum(albumEntity); return mapAlbum(albumEntity);
} }
async getAlbumInfo(authUser: AuthUserDto, albumId: string): Promise<AlbumResponseDto> { async get(authUser: AuthUserDto, albumId: string): Promise<AlbumResponseDto> {
const album = await this._getAlbum({ authUser, albumId, validateIsOwner: false }); const album = await this._getAlbum({ authUser, albumId, validateIsOwner: false });
return mapAlbum(album); return mapAlbum(album);
} }
async addUsersToAlbum(authUser: AuthUserDto, addUsersDto: AddUsersDto, albumId: string): Promise<AlbumResponseDto> { async addUsers(authUser: AuthUserDto, albumId: string, dto: AddUsersDto): Promise<AlbumResponseDto> {
const album = await this._getAlbum({ authUser, albumId }); const album = await this._getAlbum({ authUser, albumId });
const updatedAlbum = await this.albumRepository.addSharedUsers(album, addUsersDto); const updatedAlbum = await this.albumRepository.addSharedUsers(album, dto);
return mapAlbum(updatedAlbum); return mapAlbum(updatedAlbum);
} }
async deleteAlbum(authUser: AuthUserDto, albumId: string): Promise<void> { async delete(authUser: AuthUserDto, albumId: string): Promise<void> {
const album = await this._getAlbum({ authUser, albumId }); const album = await this._getAlbum({ authUser, albumId });
for (const sharedLink of album.sharedLinks) { for (const sharedLink of album.sharedLinks) {
@ -83,7 +83,7 @@ export class AlbumService {
await this.jobRepository.queue({ name: JobName.SEARCH_REMOVE_ALBUM, data: { ids: [albumId] } }); await this.jobRepository.queue({ name: JobName.SEARCH_REMOVE_ALBUM, data: { ids: [albumId] } });
} }
async removeUserFromAlbum(authUser: AuthUserDto, albumId: string, userId: string | 'me'): Promise<void> { async removeUser(authUser: AuthUserDto, albumId: string, userId: string | 'me'): Promise<void> {
const sharedUserId = userId == 'me' ? authUser.id : userId; const sharedUserId = userId == 'me' ? authUser.id : userId;
const album = await this._getAlbum({ authUser, albumId, validateIsOwner: false }); const album = await this._getAlbum({ authUser, albumId, validateIsOwner: false });
if (album.ownerId != authUser.id && authUser.id != sharedUserId) { if (album.ownerId != authUser.id && authUser.id != sharedUserId) {
@ -95,34 +95,26 @@ export class AlbumService {
await this.albumRepository.removeUser(album, sharedUserId); await this.albumRepository.removeUser(album, sharedUserId);
} }
async removeAssetsFromAlbum( async removeAssets(authUser: AuthUserDto, albumId: string, dto: RemoveAssetsDto): Promise<AlbumResponseDto> {
authUser: AuthUserDto,
removeAssetsDto: RemoveAssetsDto,
albumId: string,
): Promise<AlbumResponseDto> {
const album = await this._getAlbum({ authUser, albumId }); const album = await this._getAlbum({ authUser, albumId });
const deletedCount = await this.albumRepository.removeAssets(album, removeAssetsDto); const deletedCount = await this.albumRepository.removeAssets(album, dto);
const newAlbum = await this._getAlbum({ authUser, albumId }); const newAlbum = await this._getAlbum({ authUser, albumId });
if (deletedCount !== removeAssetsDto.assetIds.length) { if (deletedCount !== dto.assetIds.length) {
throw new BadRequestException('Some assets were not found in the album'); throw new BadRequestException('Some assets were not found in the album');
} }
return mapAlbum(newAlbum); return mapAlbum(newAlbum);
} }
async addAssetsToAlbum( async addAssets(authUser: AuthUserDto, albumId: string, dto: AddAssetsDto): Promise<AddAssetsResponseDto> {
authUser: AuthUserDto,
addAssetsDto: AddAssetsDto,
albumId: string,
): Promise<AddAssetsResponseDto> {
if (authUser.isPublicUser && !authUser.isAllowUpload) { if (authUser.isPublicUser && !authUser.isAllowUpload) {
this.logger.warn('Deny public user attempt to add asset to album'); this.logger.warn('Deny public user attempt to add asset to album');
throw new ForbiddenException('Public user is not allowed to upload'); throw new ForbiddenException('Public user is not allowed to upload');
} }
const album = await this._getAlbum({ authUser, albumId, validateIsOwner: false }); const album = await this._getAlbum({ authUser, albumId, validateIsOwner: false });
const result = await this.albumRepository.addAssets(album, addAssetsDto); const result = await this.albumRepository.addAssets(album, dto);
const newAlbum = await this._getAlbum({ authUser, albumId, validateIsOwner: false }); const newAlbum = await this._getAlbum({ authUser, albumId, validateIsOwner: false });
return { return {
@ -131,25 +123,21 @@ export class AlbumService {
}; };
} }
async updateAlbumInfo( async update(authUser: AuthUserDto, albumId: string, dto: UpdateAlbumDto): Promise<AlbumResponseDto> {
authUser: AuthUserDto,
updateAlbumDto: UpdateAlbumDto,
albumId: string,
): Promise<AlbumResponseDto> {
const album = await this._getAlbum({ authUser, albumId }); const album = await this._getAlbum({ authUser, albumId });
if (authUser.id != album.ownerId) { if (authUser.id != album.ownerId) {
throw new BadRequestException('Unauthorized to change album info'); throw new BadRequestException('Unauthorized to change album info');
} }
const updatedAlbum = await this.albumRepository.updateAlbum(album, updateAlbumDto); const updatedAlbum = await this.albumRepository.updateAlbum(album, dto);
await this.jobRepository.queue({ name: JobName.SEARCH_INDEX_ALBUM, data: { ids: [updatedAlbum.id] } }); await this.jobRepository.queue({ name: JobName.SEARCH_INDEX_ALBUM, data: { ids: [updatedAlbum.id] } });
return mapAlbum(updatedAlbum); return mapAlbum(updatedAlbum);
} }
async getAlbumCountByUserId(authUser: AuthUserDto): Promise<AlbumCountResponseDto> { async getCountByUserId(authUser: AuthUserDto): Promise<AlbumCountResponseDto> {
return this.albumRepository.getCountByUserId(authUser.id); return this.albumRepository.getCountByUserId(authUser.id);
} }
@ -160,7 +148,7 @@ export class AlbumService {
return this.downloadService.downloadArchive(album.albumName, assets); return this.downloadService.downloadArchive(album.albumName, assets);
} }
async createAlbumSharedLink(authUser: AuthUserDto, dto: CreateAlbumShareLinkDto): Promise<SharedLinkResponseDto> { async createSharedLink(authUser: AuthUserDto, dto: CreateAlbumShareLinkDto): Promise<SharedLinkResponseDto> {
const album = await this._getAlbum({ authUser, albumId: dto.albumId }); const album = await this._getAlbum({ authUser, albumId: dto.albumId });
const sharedLink = await this.shareCore.create(authUser.id, { const sharedLink = await this.shareCore.create(authUser.id, {

View File

@ -1,6 +0,0 @@
import { ValidateUUID } from 'apps/immich/src/decorators/validate-uuid.decorator';
export class AlbumIdDto {
@ValidateUUID()
albumId!: string;
}

View File

@ -3627,12 +3627,12 @@
] ]
} }
}, },
"/album/{albumId}/users": { "/album/{id}/users": {
"put": { "put": {
"operationId": "addUsersToAlbum", "operationId": "addUsersToAlbum",
"parameters": [ "parameters": [
{ {
"name": "albumId", "name": "id",
"required": true, "required": true,
"in": "path", "in": "path",
"schema": { "schema": {
@ -3679,12 +3679,12 @@
] ]
} }
}, },
"/album/{albumId}/assets": { "/album/{id}/assets": {
"put": { "put": {
"operationId": "addAssetsToAlbum", "operationId": "addAssetsToAlbum",
"parameters": [ "parameters": [
{ {
"name": "albumId", "name": "id",
"required": true, "required": true,
"in": "path", "in": "path",
"schema": { "schema": {
@ -3742,7 +3742,7 @@
"operationId": "removeAssetFromAlbum", "operationId": "removeAssetFromAlbum",
"parameters": [ "parameters": [
{ {
"name": "albumId", "name": "id",
"required": true, "required": true,
"in": "path", "in": "path",
"schema": { "schema": {
@ -3789,12 +3789,12 @@
] ]
} }
}, },
"/album/{albumId}": { "/album/{id}": {
"get": { "get": {
"operationId": "getAlbumInfo", "operationId": "getAlbumInfo",
"parameters": [ "parameters": [
{ {
"name": "albumId", "name": "id",
"required": true, "required": true,
"in": "path", "in": "path",
"schema": { "schema": {
@ -3842,7 +3842,7 @@
"operationId": "deleteAlbum", "operationId": "deleteAlbum",
"parameters": [ "parameters": [
{ {
"name": "albumId", "name": "id",
"required": true, "required": true,
"in": "path", "in": "path",
"schema": { "schema": {
@ -3875,7 +3875,7 @@
"operationId": "updateAlbumInfo", "operationId": "updateAlbumInfo",
"parameters": [ "parameters": [
{ {
"name": "albumId", "name": "id",
"required": true, "required": true,
"in": "path", "in": "path",
"schema": { "schema": {
@ -3922,12 +3922,12 @@
] ]
} }
}, },
"/album/{albumId}/user/{userId}": { "/album/{id}/user/{userId}": {
"delete": { "delete": {
"operationId": "removeUserFromAlbum", "operationId": "removeUserFromAlbum",
"parameters": [ "parameters": [
{ {
"name": "albumId", "name": "id",
"required": true, "required": true,
"in": "path", "in": "path",
"schema": { "schema": {
@ -3965,12 +3965,12 @@
] ]
} }
}, },
"/album/{albumId}/download": { "/album/{id}/download": {
"get": { "get": {
"operationId": "downloadArchive", "operationId": "downloadArchive",
"parameters": [ "parameters": [
{ {
"name": "albumId", "name": "id",
"required": true, "required": true,
"in": "path", "in": "path",
"schema": { "schema": {

View File

@ -3082,19 +3082,19 @@ export const AlbumApiAxiosParamCreator = function (configuration?: Configuration
return { return {
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {AddAssetsDto} addAssetsDto * @param {AddAssetsDto} addAssetsDto
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
addAssetsToAlbum: async (albumId: string, addAssetsDto: AddAssetsDto, key?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => { addAssetsToAlbum: async (id: string, addAssetsDto: AddAssetsDto, key?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'albumId' is not null or undefined // verify required parameter 'id' is not null or undefined
assertParamExists('addAssetsToAlbum', 'albumId', albumId) assertParamExists('addAssetsToAlbum', 'id', id)
// verify required parameter 'addAssetsDto' is not null or undefined // verify required parameter 'addAssetsDto' is not null or undefined
assertParamExists('addAssetsToAlbum', 'addAssetsDto', addAssetsDto) assertParamExists('addAssetsToAlbum', 'addAssetsDto', addAssetsDto)
const localVarPath = `/album/{albumId}/assets` const localVarPath = `/album/{id}/assets`
.replace(`{${"albumId"}}`, encodeURIComponent(String(albumId))); .replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions; let baseOptions;
@ -3135,18 +3135,18 @@ export const AlbumApiAxiosParamCreator = function (configuration?: Configuration
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {AddUsersDto} addUsersDto * @param {AddUsersDto} addUsersDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
addUsersToAlbum: async (albumId: string, addUsersDto: AddUsersDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => { addUsersToAlbum: async (id: string, addUsersDto: AddUsersDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'albumId' is not null or undefined // verify required parameter 'id' is not null or undefined
assertParamExists('addUsersToAlbum', 'albumId', albumId) assertParamExists('addUsersToAlbum', 'id', id)
// verify required parameter 'addUsersDto' is not null or undefined // verify required parameter 'addUsersDto' is not null or undefined
assertParamExists('addUsersToAlbum', 'addUsersDto', addUsersDto) assertParamExists('addUsersToAlbum', 'addUsersDto', addUsersDto)
const localVarPath = `/album/{albumId}/users` const localVarPath = `/album/{id}/users`
.replace(`{${"albumId"}}`, encodeURIComponent(String(albumId))); .replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions; let baseOptions;
@ -3271,15 +3271,15 @@ export const AlbumApiAxiosParamCreator = function (configuration?: Configuration
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
deleteAlbum: async (albumId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => { deleteAlbum: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'albumId' is not null or undefined // verify required parameter 'id' is not null or undefined
assertParamExists('deleteAlbum', 'albumId', albumId) assertParamExists('deleteAlbum', 'id', id)
const localVarPath = `/album/{albumId}` const localVarPath = `/album/{id}`
.replace(`{${"albumId"}}`, encodeURIComponent(String(albumId))); .replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions; let baseOptions;
@ -3313,18 +3313,18 @@ export const AlbumApiAxiosParamCreator = function (configuration?: Configuration
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} [name] * @param {string} [name]
* @param {number} [skip] * @param {number} [skip]
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
downloadArchive: async (albumId: string, name?: string, skip?: number, key?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => { downloadArchive: async (id: string, name?: string, skip?: number, key?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'albumId' is not null or undefined // verify required parameter 'id' is not null or undefined
assertParamExists('downloadArchive', 'albumId', albumId) assertParamExists('downloadArchive', 'id', id)
const localVarPath = `/album/{albumId}/download` const localVarPath = `/album/{id}/download`
.replace(`{${"albumId"}}`, encodeURIComponent(String(albumId))); .replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions; let baseOptions;
@ -3408,16 +3408,16 @@ export const AlbumApiAxiosParamCreator = function (configuration?: Configuration
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
getAlbumInfo: async (albumId: string, key?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => { getAlbumInfo: async (id: string, key?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'albumId' is not null or undefined // verify required parameter 'id' is not null or undefined
assertParamExists('getAlbumInfo', 'albumId', albumId) assertParamExists('getAlbumInfo', 'id', id)
const localVarPath = `/album/{albumId}` const localVarPath = `/album/{id}`
.replace(`{${"albumId"}}`, encodeURIComponent(String(albumId))); .replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions; let baseOptions;
@ -3503,18 +3503,18 @@ export const AlbumApiAxiosParamCreator = function (configuration?: Configuration
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {RemoveAssetsDto} removeAssetsDto * @param {RemoveAssetsDto} removeAssetsDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
removeAssetFromAlbum: async (albumId: string, removeAssetsDto: RemoveAssetsDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => { removeAssetFromAlbum: async (id: string, removeAssetsDto: RemoveAssetsDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'albumId' is not null or undefined // verify required parameter 'id' is not null or undefined
assertParamExists('removeAssetFromAlbum', 'albumId', albumId) assertParamExists('removeAssetFromAlbum', 'id', id)
// verify required parameter 'removeAssetsDto' is not null or undefined // verify required parameter 'removeAssetsDto' is not null or undefined
assertParamExists('removeAssetFromAlbum', 'removeAssetsDto', removeAssetsDto) assertParamExists('removeAssetFromAlbum', 'removeAssetsDto', removeAssetsDto)
const localVarPath = `/album/{albumId}/assets` const localVarPath = `/album/{id}/assets`
.replace(`{${"albumId"}}`, encodeURIComponent(String(albumId))); .replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions; let baseOptions;
@ -3551,18 +3551,18 @@ export const AlbumApiAxiosParamCreator = function (configuration?: Configuration
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} userId * @param {string} userId
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
removeUserFromAlbum: async (albumId: string, userId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => { removeUserFromAlbum: async (id: string, userId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'albumId' is not null or undefined // verify required parameter 'id' is not null or undefined
assertParamExists('removeUserFromAlbum', 'albumId', albumId) assertParamExists('removeUserFromAlbum', 'id', id)
// verify required parameter 'userId' is not null or undefined // verify required parameter 'userId' is not null or undefined
assertParamExists('removeUserFromAlbum', 'userId', userId) assertParamExists('removeUserFromAlbum', 'userId', userId)
const localVarPath = `/album/{albumId}/user/{userId}` const localVarPath = `/album/{id}/user/{userId}`
.replace(`{${"albumId"}}`, encodeURIComponent(String(albumId))) .replace(`{${"id"}}`, encodeURIComponent(String(id)))
.replace(`{${"userId"}}`, encodeURIComponent(String(userId))); .replace(`{${"userId"}}`, encodeURIComponent(String(userId)));
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
@ -3597,18 +3597,18 @@ export const AlbumApiAxiosParamCreator = function (configuration?: Configuration
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {UpdateAlbumDto} updateAlbumDto * @param {UpdateAlbumDto} updateAlbumDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
updateAlbumInfo: async (albumId: string, updateAlbumDto: UpdateAlbumDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => { updateAlbumInfo: async (id: string, updateAlbumDto: UpdateAlbumDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
// verify required parameter 'albumId' is not null or undefined // verify required parameter 'id' is not null or undefined
assertParamExists('updateAlbumInfo', 'albumId', albumId) assertParamExists('updateAlbumInfo', 'id', id)
// verify required parameter 'updateAlbumDto' is not null or undefined // verify required parameter 'updateAlbumDto' is not null or undefined
assertParamExists('updateAlbumInfo', 'updateAlbumDto', updateAlbumDto) assertParamExists('updateAlbumInfo', 'updateAlbumDto', updateAlbumDto)
const localVarPath = `/album/{albumId}` const localVarPath = `/album/{id}`
.replace(`{${"albumId"}}`, encodeURIComponent(String(albumId))); .replace(`{${"id"}}`, encodeURIComponent(String(id)));
// use dummy base URL string because the URL constructor only accepts absolute URLs. // use dummy base URL string because the URL constructor only accepts absolute URLs.
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL); const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
let baseOptions; let baseOptions;
@ -3655,25 +3655,25 @@ export const AlbumApiFp = function(configuration?: Configuration) {
return { return {
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {AddAssetsDto} addAssetsDto * @param {AddAssetsDto} addAssetsDto
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async addAssetsToAlbum(albumId: string, addAssetsDto: AddAssetsDto, key?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AddAssetsResponseDto>> { async addAssetsToAlbum(id: string, addAssetsDto: AddAssetsDto, key?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AddAssetsResponseDto>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.addAssetsToAlbum(albumId, addAssetsDto, key, options); const localVarAxiosArgs = await localVarAxiosParamCreator.addAssetsToAlbum(id, addAssetsDto, key, options);
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {AddUsersDto} addUsersDto * @param {AddUsersDto} addUsersDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async addUsersToAlbum(albumId: string, addUsersDto: AddUsersDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AlbumResponseDto>> { async addUsersToAlbum(id: string, addUsersDto: AddUsersDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AlbumResponseDto>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.addUsersToAlbum(albumId, addUsersDto, options); const localVarAxiosArgs = await localVarAxiosParamCreator.addUsersToAlbum(id, addUsersDto, options);
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
}, },
/** /**
@ -3698,25 +3698,25 @@ export const AlbumApiFp = function(configuration?: Configuration) {
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async deleteAlbum(albumId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> { async deleteAlbum(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.deleteAlbum(albumId, options); const localVarAxiosArgs = await localVarAxiosParamCreator.deleteAlbum(id, options);
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} [name] * @param {string} [name]
* @param {number} [skip] * @param {number} [skip]
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async downloadArchive(albumId: string, name?: string, skip?: number, key?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<File>> { async downloadArchive(id: string, name?: string, skip?: number, key?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<File>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.downloadArchive(albumId, name, skip, key, options); const localVarAxiosArgs = await localVarAxiosParamCreator.downloadArchive(id, name, skip, key, options);
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
}, },
/** /**
@ -3730,13 +3730,13 @@ export const AlbumApiFp = function(configuration?: Configuration) {
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async getAlbumInfo(albumId: string, key?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AlbumResponseDto>> { async getAlbumInfo(id: string, key?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AlbumResponseDto>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.getAlbumInfo(albumId, key, options); const localVarAxiosArgs = await localVarAxiosParamCreator.getAlbumInfo(id, key, options);
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
}, },
/** /**
@ -3752,35 +3752,35 @@ export const AlbumApiFp = function(configuration?: Configuration) {
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {RemoveAssetsDto} removeAssetsDto * @param {RemoveAssetsDto} removeAssetsDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async removeAssetFromAlbum(albumId: string, removeAssetsDto: RemoveAssetsDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AlbumResponseDto>> { async removeAssetFromAlbum(id: string, removeAssetsDto: RemoveAssetsDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AlbumResponseDto>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.removeAssetFromAlbum(albumId, removeAssetsDto, options); const localVarAxiosArgs = await localVarAxiosParamCreator.removeAssetFromAlbum(id, removeAssetsDto, options);
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} userId * @param {string} userId
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async removeUserFromAlbum(albumId: string, userId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> { async removeUserFromAlbum(id: string, userId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.removeUserFromAlbum(albumId, userId, options); const localVarAxiosArgs = await localVarAxiosParamCreator.removeUserFromAlbum(id, userId, options);
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {UpdateAlbumDto} updateAlbumDto * @param {UpdateAlbumDto} updateAlbumDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
async updateAlbumInfo(albumId: string, updateAlbumDto: UpdateAlbumDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AlbumResponseDto>> { async updateAlbumInfo(id: string, updateAlbumDto: UpdateAlbumDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AlbumResponseDto>> {
const localVarAxiosArgs = await localVarAxiosParamCreator.updateAlbumInfo(albumId, updateAlbumDto, options); const localVarAxiosArgs = await localVarAxiosParamCreator.updateAlbumInfo(id, updateAlbumDto, options);
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration); return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
}, },
} }
@ -3795,24 +3795,24 @@ export const AlbumApiFactory = function (configuration?: Configuration, basePath
return { return {
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {AddAssetsDto} addAssetsDto * @param {AddAssetsDto} addAssetsDto
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
addAssetsToAlbum(albumId: string, addAssetsDto: AddAssetsDto, key?: string, options?: any): AxiosPromise<AddAssetsResponseDto> { addAssetsToAlbum(id: string, addAssetsDto: AddAssetsDto, key?: string, options?: any): AxiosPromise<AddAssetsResponseDto> {
return localVarFp.addAssetsToAlbum(albumId, addAssetsDto, key, options).then((request) => request(axios, basePath)); return localVarFp.addAssetsToAlbum(id, addAssetsDto, key, options).then((request) => request(axios, basePath));
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {AddUsersDto} addUsersDto * @param {AddUsersDto} addUsersDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
addUsersToAlbum(albumId: string, addUsersDto: AddUsersDto, options?: any): AxiosPromise<AlbumResponseDto> { addUsersToAlbum(id: string, addUsersDto: AddUsersDto, options?: any): AxiosPromise<AlbumResponseDto> {
return localVarFp.addUsersToAlbum(albumId, addUsersDto, options).then((request) => request(axios, basePath)); return localVarFp.addUsersToAlbum(id, addUsersDto, options).then((request) => request(axios, basePath));
}, },
/** /**
* *
@ -3834,24 +3834,24 @@ export const AlbumApiFactory = function (configuration?: Configuration, basePath
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
deleteAlbum(albumId: string, options?: any): AxiosPromise<void> { deleteAlbum(id: string, options?: any): AxiosPromise<void> {
return localVarFp.deleteAlbum(albumId, options).then((request) => request(axios, basePath)); return localVarFp.deleteAlbum(id, options).then((request) => request(axios, basePath));
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} [name] * @param {string} [name]
* @param {number} [skip] * @param {number} [skip]
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
downloadArchive(albumId: string, name?: string, skip?: number, key?: string, options?: any): AxiosPromise<File> { downloadArchive(id: string, name?: string, skip?: number, key?: string, options?: any): AxiosPromise<File> {
return localVarFp.downloadArchive(albumId, name, skip, key, options).then((request) => request(axios, basePath)); return localVarFp.downloadArchive(id, name, skip, key, options).then((request) => request(axios, basePath));
}, },
/** /**
* *
@ -3863,13 +3863,13 @@ export const AlbumApiFactory = function (configuration?: Configuration, basePath
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
getAlbumInfo(albumId: string, key?: string, options?: any): AxiosPromise<AlbumResponseDto> { getAlbumInfo(id: string, key?: string, options?: any): AxiosPromise<AlbumResponseDto> {
return localVarFp.getAlbumInfo(albumId, key, options).then((request) => request(axios, basePath)); return localVarFp.getAlbumInfo(id, key, options).then((request) => request(axios, basePath));
}, },
/** /**
* *
@ -3883,33 +3883,33 @@ export const AlbumApiFactory = function (configuration?: Configuration, basePath
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {RemoveAssetsDto} removeAssetsDto * @param {RemoveAssetsDto} removeAssetsDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
removeAssetFromAlbum(albumId: string, removeAssetsDto: RemoveAssetsDto, options?: any): AxiosPromise<AlbumResponseDto> { removeAssetFromAlbum(id: string, removeAssetsDto: RemoveAssetsDto, options?: any): AxiosPromise<AlbumResponseDto> {
return localVarFp.removeAssetFromAlbum(albumId, removeAssetsDto, options).then((request) => request(axios, basePath)); return localVarFp.removeAssetFromAlbum(id, removeAssetsDto, options).then((request) => request(axios, basePath));
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} userId * @param {string} userId
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
removeUserFromAlbum(albumId: string, userId: string, options?: any): AxiosPromise<void> { removeUserFromAlbum(id: string, userId: string, options?: any): AxiosPromise<void> {
return localVarFp.removeUserFromAlbum(albumId, userId, options).then((request) => request(axios, basePath)); return localVarFp.removeUserFromAlbum(id, userId, options).then((request) => request(axios, basePath));
}, },
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {UpdateAlbumDto} updateAlbumDto * @param {UpdateAlbumDto} updateAlbumDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
*/ */
updateAlbumInfo(albumId: string, updateAlbumDto: UpdateAlbumDto, options?: any): AxiosPromise<AlbumResponseDto> { updateAlbumInfo(id: string, updateAlbumDto: UpdateAlbumDto, options?: any): AxiosPromise<AlbumResponseDto> {
return localVarFp.updateAlbumInfo(albumId, updateAlbumDto, options).then((request) => request(axios, basePath)); return localVarFp.updateAlbumInfo(id, updateAlbumDto, options).then((request) => request(axios, basePath));
}, },
}; };
}; };
@ -3923,27 +3923,27 @@ export const AlbumApiFactory = function (configuration?: Configuration, basePath
export class AlbumApi extends BaseAPI { export class AlbumApi extends BaseAPI {
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {AddAssetsDto} addAssetsDto * @param {AddAssetsDto} addAssetsDto
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
* @memberof AlbumApi * @memberof AlbumApi
*/ */
public addAssetsToAlbum(albumId: string, addAssetsDto: AddAssetsDto, key?: string, options?: AxiosRequestConfig) { public addAssetsToAlbum(id: string, addAssetsDto: AddAssetsDto, key?: string, options?: AxiosRequestConfig) {
return AlbumApiFp(this.configuration).addAssetsToAlbum(albumId, addAssetsDto, key, options).then((request) => request(this.axios, this.basePath)); return AlbumApiFp(this.configuration).addAssetsToAlbum(id, addAssetsDto, key, options).then((request) => request(this.axios, this.basePath));
} }
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {AddUsersDto} addUsersDto * @param {AddUsersDto} addUsersDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
* @memberof AlbumApi * @memberof AlbumApi
*/ */
public addUsersToAlbum(albumId: string, addUsersDto: AddUsersDto, options?: AxiosRequestConfig) { public addUsersToAlbum(id: string, addUsersDto: AddUsersDto, options?: AxiosRequestConfig) {
return AlbumApiFp(this.configuration).addUsersToAlbum(albumId, addUsersDto, options).then((request) => request(this.axios, this.basePath)); return AlbumApiFp(this.configuration).addUsersToAlbum(id, addUsersDto, options).then((request) => request(this.axios, this.basePath));
} }
/** /**
@ -3970,18 +3970,18 @@ export class AlbumApi extends BaseAPI {
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
* @memberof AlbumApi * @memberof AlbumApi
*/ */
public deleteAlbum(albumId: string, options?: AxiosRequestConfig) { public deleteAlbum(id: string, options?: AxiosRequestConfig) {
return AlbumApiFp(this.configuration).deleteAlbum(albumId, options).then((request) => request(this.axios, this.basePath)); return AlbumApiFp(this.configuration).deleteAlbum(id, options).then((request) => request(this.axios, this.basePath));
} }
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} [name] * @param {string} [name]
* @param {number} [skip] * @param {number} [skip]
* @param {string} [key] * @param {string} [key]
@ -3989,8 +3989,8 @@ export class AlbumApi extends BaseAPI {
* @throws {RequiredError} * @throws {RequiredError}
* @memberof AlbumApi * @memberof AlbumApi
*/ */
public downloadArchive(albumId: string, name?: string, skip?: number, key?: string, options?: AxiosRequestConfig) { public downloadArchive(id: string, name?: string, skip?: number, key?: string, options?: AxiosRequestConfig) {
return AlbumApiFp(this.configuration).downloadArchive(albumId, name, skip, key, options).then((request) => request(this.axios, this.basePath)); return AlbumApiFp(this.configuration).downloadArchive(id, name, skip, key, options).then((request) => request(this.axios, this.basePath));
} }
/** /**
@ -4005,14 +4005,14 @@ export class AlbumApi extends BaseAPI {
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} [key] * @param {string} [key]
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
* @memberof AlbumApi * @memberof AlbumApi
*/ */
public getAlbumInfo(albumId: string, key?: string, options?: AxiosRequestConfig) { public getAlbumInfo(id: string, key?: string, options?: AxiosRequestConfig) {
return AlbumApiFp(this.configuration).getAlbumInfo(albumId, key, options).then((request) => request(this.axios, this.basePath)); return AlbumApiFp(this.configuration).getAlbumInfo(id, key, options).then((request) => request(this.axios, this.basePath));
} }
/** /**
@ -4029,38 +4029,38 @@ export class AlbumApi extends BaseAPI {
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {RemoveAssetsDto} removeAssetsDto * @param {RemoveAssetsDto} removeAssetsDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
* @memberof AlbumApi * @memberof AlbumApi
*/ */
public removeAssetFromAlbum(albumId: string, removeAssetsDto: RemoveAssetsDto, options?: AxiosRequestConfig) { public removeAssetFromAlbum(id: string, removeAssetsDto: RemoveAssetsDto, options?: AxiosRequestConfig) {
return AlbumApiFp(this.configuration).removeAssetFromAlbum(albumId, removeAssetsDto, options).then((request) => request(this.axios, this.basePath)); return AlbumApiFp(this.configuration).removeAssetFromAlbum(id, removeAssetsDto, options).then((request) => request(this.axios, this.basePath));
} }
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {string} userId * @param {string} userId
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
* @memberof AlbumApi * @memberof AlbumApi
*/ */
public removeUserFromAlbum(albumId: string, userId: string, options?: AxiosRequestConfig) { public removeUserFromAlbum(id: string, userId: string, options?: AxiosRequestConfig) {
return AlbumApiFp(this.configuration).removeUserFromAlbum(albumId, userId, options).then((request) => request(this.axios, this.basePath)); return AlbumApiFp(this.configuration).removeUserFromAlbum(id, userId, options).then((request) => request(this.axios, this.basePath));
} }
/** /**
* *
* @param {string} albumId * @param {string} id
* @param {UpdateAlbumDto} updateAlbumDto * @param {UpdateAlbumDto} updateAlbumDto
* @param {*} [options] Override http request option. * @param {*} [options] Override http request option.
* @throws {RequiredError} * @throws {RequiredError}
* @memberof AlbumApi * @memberof AlbumApi
*/ */
public updateAlbumInfo(albumId: string, updateAlbumDto: UpdateAlbumDto, options?: AxiosRequestConfig) { public updateAlbumInfo(id: string, updateAlbumDto: UpdateAlbumDto, options?: AxiosRequestConfig) {
return AlbumApiFp(this.configuration).updateAlbumInfo(albumId, updateAlbumDto, options).then((request) => request(this.axios, this.basePath)); return AlbumApiFp(this.configuration).updateAlbumInfo(id, updateAlbumDto, options).then((request) => request(this.axios, this.basePath));
} }
} }