mirror of
https://github.com/immich-app/immich.git
synced 2025-06-03 05:34:32 -04:00
refactor: dedicated get album thumbnail files query (#17657)
This commit is contained in:
parent
8cefa0b84b
commit
85c2d36d99
@ -183,6 +183,16 @@ from
|
|||||||
where
|
where
|
||||||
"assets"."id" = $1
|
"assets"."id" = $1
|
||||||
|
|
||||||
|
-- AssetJobRepository.getAlbumThumbnailFile
|
||||||
|
select
|
||||||
|
"asset_files"."id",
|
||||||
|
"asset_files"."path",
|
||||||
|
"asset_files"."type"
|
||||||
|
from
|
||||||
|
"asset_files"
|
||||||
|
where
|
||||||
|
"asset_files"."assetId" = $1
|
||||||
|
|
||||||
-- AssetJobRepository.getForStorageTemplateJob
|
-- AssetJobRepository.getForStorageTemplateJob
|
||||||
select
|
select
|
||||||
"assets"."id",
|
"assets"."id",
|
||||||
|
@ -117,6 +117,11 @@ export class AssetJobRepository {
|
|||||||
.executeTakeFirst();
|
.executeTakeFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GenerateSql({ params: [DummyValue.UUID] })
|
||||||
|
getAlbumThumbnailFile(id: string) {
|
||||||
|
return this.db.selectFrom('asset_files').select(columns.assetFiles).where('asset_files.assetId', '=', id).execute();
|
||||||
|
}
|
||||||
|
|
||||||
private storageTemplateAssetQuery() {
|
private storageTemplateAssetQuery() {
|
||||||
return this.db
|
return this.db
|
||||||
.selectFrom('assets')
|
.selectFrom('assets')
|
||||||
|
@ -412,11 +412,12 @@ describe(NotificationService.name, () => {
|
|||||||
});
|
});
|
||||||
mocks.systemMetadata.get.mockResolvedValue({ server: {} });
|
mocks.systemMetadata.get.mockResolvedValue({ server: {} });
|
||||||
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
||||||
|
mocks.assetJob.getAlbumThumbnailFile.mockResolvedValue([]);
|
||||||
|
|
||||||
await expect(sut.handleAlbumInvite({ id: '', recipientId: '' })).resolves.toBe(JobStatus.SUCCESS);
|
await expect(sut.handleAlbumInvite({ id: '', recipientId: '' })).resolves.toBe(JobStatus.SUCCESS);
|
||||||
expect(mocks.asset.getById).toHaveBeenCalledWith(albumStub.emptyWithValidThumbnail.albumThumbnailAssetId, {
|
expect(mocks.assetJob.getAlbumThumbnailFile).toHaveBeenCalledWith(
|
||||||
files: true,
|
albumStub.emptyWithValidThumbnail.albumThumbnailAssetId,
|
||||||
});
|
);
|
||||||
expect(mocks.job.queue).toHaveBeenCalledWith({
|
expect(mocks.job.queue).toHaveBeenCalledWith({
|
||||||
name: JobName.SEND_EMAIL,
|
name: JobName.SEND_EMAIL,
|
||||||
data: expect.objectContaining({
|
data: expect.objectContaining({
|
||||||
@ -439,15 +440,14 @@ describe(NotificationService.name, () => {
|
|||||||
});
|
});
|
||||||
mocks.systemMetadata.get.mockResolvedValue({ server: {} });
|
mocks.systemMetadata.get.mockResolvedValue({ server: {} });
|
||||||
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
||||||
mocks.asset.getById.mockResolvedValue({
|
mocks.assetJob.getAlbumThumbnailFile.mockResolvedValue([
|
||||||
...assetStub.image,
|
{ id: '1', type: AssetFileType.THUMBNAIL, path: 'path-to-thumb.jpg' },
|
||||||
files: [{ id: '1', type: AssetFileType.THUMBNAIL, path: 'path-to-thumb.jpg' }],
|
]);
|
||||||
});
|
|
||||||
|
|
||||||
await expect(sut.handleAlbumInvite({ id: '', recipientId: '' })).resolves.toBe(JobStatus.SUCCESS);
|
await expect(sut.handleAlbumInvite({ id: '', recipientId: '' })).resolves.toBe(JobStatus.SUCCESS);
|
||||||
expect(mocks.asset.getById).toHaveBeenCalledWith(albumStub.emptyWithValidThumbnail.albumThumbnailAssetId, {
|
expect(mocks.assetJob.getAlbumThumbnailFile).toHaveBeenCalledWith(
|
||||||
files: true,
|
albumStub.emptyWithValidThumbnail.albumThumbnailAssetId,
|
||||||
});
|
);
|
||||||
expect(mocks.job.queue).toHaveBeenCalledWith({
|
expect(mocks.job.queue).toHaveBeenCalledWith({
|
||||||
name: JobName.SEND_EMAIL,
|
name: JobName.SEND_EMAIL,
|
||||||
data: expect.objectContaining({
|
data: expect.objectContaining({
|
||||||
@ -470,12 +470,12 @@ describe(NotificationService.name, () => {
|
|||||||
});
|
});
|
||||||
mocks.systemMetadata.get.mockResolvedValue({ server: {} });
|
mocks.systemMetadata.get.mockResolvedValue({ server: {} });
|
||||||
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
||||||
mocks.asset.getById.mockResolvedValue(assetStub.image);
|
mocks.assetJob.getAlbumThumbnailFile.mockResolvedValue(assetStub.image.files);
|
||||||
|
|
||||||
await expect(sut.handleAlbumInvite({ id: '', recipientId: '' })).resolves.toBe(JobStatus.SUCCESS);
|
await expect(sut.handleAlbumInvite({ id: '', recipientId: '' })).resolves.toBe(JobStatus.SUCCESS);
|
||||||
expect(mocks.asset.getById).toHaveBeenCalledWith(albumStub.emptyWithValidThumbnail.albumThumbnailAssetId, {
|
expect(mocks.assetJob.getAlbumThumbnailFile).toHaveBeenCalledWith(
|
||||||
files: true,
|
albumStub.emptyWithValidThumbnail.albumThumbnailAssetId,
|
||||||
});
|
);
|
||||||
expect(mocks.job.queue).toHaveBeenCalledWith({
|
expect(mocks.job.queue).toHaveBeenCalledWith({
|
||||||
name: JobName.SEND_EMAIL,
|
name: JobName.SEND_EMAIL,
|
||||||
data: expect.objectContaining({
|
data: expect.objectContaining({
|
||||||
@ -506,6 +506,7 @@ describe(NotificationService.name, () => {
|
|||||||
});
|
});
|
||||||
mocks.user.get.mockResolvedValueOnce(userStub.user1);
|
mocks.user.get.mockResolvedValueOnce(userStub.user1);
|
||||||
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
||||||
|
mocks.assetJob.getAlbumThumbnailFile.mockResolvedValue([]);
|
||||||
|
|
||||||
await sut.handleAlbumUpdate({ id: '', recipientIds: [userStub.user1.id] });
|
await sut.handleAlbumUpdate({ id: '', recipientIds: [userStub.user1.id] });
|
||||||
expect(mocks.user.get).toHaveBeenCalledWith(userStub.user1.id, { withDeleted: false });
|
expect(mocks.user.get).toHaveBeenCalledWith(userStub.user1.id, { withDeleted: false });
|
||||||
@ -527,6 +528,7 @@ describe(NotificationService.name, () => {
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
||||||
|
mocks.assetJob.getAlbumThumbnailFile.mockResolvedValue([]);
|
||||||
|
|
||||||
await sut.handleAlbumUpdate({ id: '', recipientIds: [userStub.user1.id] });
|
await sut.handleAlbumUpdate({ id: '', recipientIds: [userStub.user1.id] });
|
||||||
expect(mocks.user.get).toHaveBeenCalledWith(userStub.user1.id, { withDeleted: false });
|
expect(mocks.user.get).toHaveBeenCalledWith(userStub.user1.id, { withDeleted: false });
|
||||||
@ -548,6 +550,7 @@ describe(NotificationService.name, () => {
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
||||||
|
mocks.assetJob.getAlbumThumbnailFile.mockResolvedValue([]);
|
||||||
|
|
||||||
await sut.handleAlbumUpdate({ id: '', recipientIds: [userStub.user1.id] });
|
await sut.handleAlbumUpdate({ id: '', recipientIds: [userStub.user1.id] });
|
||||||
expect(mocks.user.get).toHaveBeenCalledWith(userStub.user1.id, { withDeleted: false });
|
expect(mocks.user.get).toHaveBeenCalledWith(userStub.user1.id, { withDeleted: false });
|
||||||
@ -561,6 +564,7 @@ describe(NotificationService.name, () => {
|
|||||||
});
|
});
|
||||||
mocks.user.get.mockResolvedValue(userStub.user1);
|
mocks.user.get.mockResolvedValue(userStub.user1);
|
||||||
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
mocks.notification.renderEmail.mockResolvedValue({ html: '', text: '' });
|
||||||
|
mocks.assetJob.getAlbumThumbnailFile.mockResolvedValue([]);
|
||||||
|
|
||||||
await sut.handleAlbumUpdate({ id: '', recipientIds: [userStub.user1.id] });
|
await sut.handleAlbumUpdate({ id: '', recipientIds: [userStub.user1.id] });
|
||||||
expect(mocks.user.get).toHaveBeenCalledWith(userStub.user1.id, { withDeleted: false });
|
expect(mocks.user.get).toHaveBeenCalledWith(userStub.user1.id, { withDeleted: false });
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { BadRequestException, Injectable } from '@nestjs/common';
|
import { BadRequestException, Injectable } from '@nestjs/common';
|
||||||
import { OnEvent, OnJob } from 'src/decorators';
|
import { OnEvent, OnJob } from 'src/decorators';
|
||||||
import { SystemConfigSmtpDto } from 'src/dtos/system-config.dto';
|
import { SystemConfigSmtpDto } from 'src/dtos/system-config.dto';
|
||||||
import { AlbumEntity } from 'src/entities/album.entity';
|
|
||||||
import { AssetFileType, JobName, JobStatus, QueueName } from 'src/enum';
|
import { AssetFileType, JobName, JobStatus, QueueName } from 'src/enum';
|
||||||
import { ArgOf } from 'src/repositories/event.repository';
|
import { ArgOf } from 'src/repositories/event.repository';
|
||||||
import { EmailTemplate } from 'src/repositories/notification.repository';
|
import { EmailTemplate } from 'src/repositories/notification.repository';
|
||||||
@ -392,17 +391,19 @@ export class NotificationService extends BaseService {
|
|||||||
return JobStatus.SUCCESS;
|
return JobStatus.SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async getAlbumThumbnailAttachment(album: AlbumEntity): Promise<EmailImageAttachment | undefined> {
|
private async getAlbumThumbnailAttachment(album: {
|
||||||
|
albumThumbnailAssetId: string | null;
|
||||||
|
}): Promise<EmailImageAttachment | undefined> {
|
||||||
if (!album.albumThumbnailAssetId) {
|
if (!album.albumThumbnailAssetId) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const albumThumbnail = await this.assetRepository.getById(album.albumThumbnailAssetId, { files: true });
|
const albumThumbnailFiles = await this.assetJobRepository.getAlbumThumbnailFile(album.albumThumbnailAssetId);
|
||||||
if (!albumThumbnail) {
|
if (albumThumbnailFiles.length === 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const thumbnailFile = getAssetFile(albumThumbnail.files, AssetFileType.THUMBNAIL);
|
const thumbnailFile = getAssetFile(albumThumbnailFiles, AssetFileType.THUMBNAIL);
|
||||||
if (!thumbnailFile) {
|
if (!thumbnailFile) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user