mirror of
https://github.com/KevinMidboe/immich.git
synced 2025-10-29 17:40:28 +00:00
fix(server): memory lane title (#2772)
* fix(server): memory lane title * feat: parallel requests * pr feedback * fix test --------- Co-authored-by: Alex Tran <alex.tran1502@gmail.com>
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import { Inject } from '@nestjs/common';
|
||||
import { DateTime } from 'luxon';
|
||||
import { AuthUserDto } from '../auth';
|
||||
import { IAssetRepository } from './asset.repository';
|
||||
import { MemoryLaneDto } from './dto';
|
||||
import { MapMarkerDto } from './dto/map-marker.dto';
|
||||
import { MapMarkerResponseDto, mapAsset } from './response-dto';
|
||||
import { mapAsset, MapMarkerResponseDto } from './response-dto';
|
||||
import { MemoryLaneResponseDto } from './response-dto/memory-lane-response.dto';
|
||||
import { DateTime } from 'luxon';
|
||||
|
||||
export class AssetService {
|
||||
constructor(@Inject(IAssetRepository) private assetRepository: IAssetRepository) {}
|
||||
@@ -13,30 +14,22 @@ export class AssetService {
|
||||
return this.assetRepository.getMapMarkers(authUser.id, options);
|
||||
}
|
||||
|
||||
async getMemoryLane(authUser: AuthUserDto, timezone: string): Promise<MemoryLaneResponseDto[]> {
|
||||
const result: MemoryLaneResponseDto[] = [];
|
||||
async getMemoryLane(authUser: AuthUserDto, dto: MemoryLaneDto): Promise<MemoryLaneResponseDto[]> {
|
||||
const target = DateTime.fromJSDate(dto.timestamp);
|
||||
|
||||
const luxonDate = DateTime.fromISO(new Date().toISOString(), { zone: timezone });
|
||||
const today = new Date(luxonDate.year, luxonDate.month - 1, luxonDate.day);
|
||||
const onRequest = async (yearsAgo: number): Promise<MemoryLaneResponseDto> => {
|
||||
const assets = await this.assetRepository.getByDate(authUser.id, target.minus({ years: yearsAgo }).toJSDate());
|
||||
return {
|
||||
title: `${yearsAgo} year${yearsAgo > 1 ? 's' : ''} since...`,
|
||||
assets: assets.map((a) => mapAsset(a)),
|
||||
};
|
||||
};
|
||||
|
||||
const years = Array.from({ length: 30 }, (_, i) => {
|
||||
const year = today.getFullYear() - i - 1;
|
||||
return new Date(year, today.getMonth(), today.getDate());
|
||||
});
|
||||
|
||||
for (const year of years) {
|
||||
const assets = await this.assetRepository.getByDate(authUser.id, year);
|
||||
|
||||
if (assets.length > 0) {
|
||||
const yearGap = today.getFullYear() - year.getFullYear();
|
||||
const memory = new MemoryLaneResponseDto();
|
||||
memory.title = `${yearGap} year${yearGap > 1 && 's'} since...`;
|
||||
memory.assets = assets.map((a) => mapAsset(a));
|
||||
|
||||
result.push(memory);
|
||||
}
|
||||
const requests: Promise<MemoryLaneResponseDto>[] = [];
|
||||
for (let i = 1; i <= dto.years; i++) {
|
||||
requests.push(onRequest(i));
|
||||
}
|
||||
|
||||
return result;
|
||||
return Promise.all(requests).then((results) => results.filter((result) => result.assets.length > 0));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user