|
|
|
|
@ -6,7 +6,7 @@ import { AuthDto } from 'src/dtos/auth.dto';
|
|
|
|
|
import { MemoryCreateDto, MemoryResponseDto, MemorySearchDto, MemoryUpdateDto, mapMemory } from 'src/dtos/memory.dto';
|
|
|
|
|
import { DatabaseLock, JobName, MemoryType, Permission, QueueName, SystemMetadataKey } from 'src/enum';
|
|
|
|
|
import { BaseService } from 'src/services/base.service';
|
|
|
|
|
import { addAssets, getMyPartnerIds, removeAssets } from 'src/utils/asset.util';
|
|
|
|
|
import { addAssets, removeAssets } from 'src/utils/asset.util';
|
|
|
|
|
|
|
|
|
|
const DAYS = 3;
|
|
|
|
|
|
|
|
|
|
@ -15,15 +15,6 @@ export class MemoryService extends BaseService {
|
|
|
|
|
@OnJob({ name: JobName.MemoryGenerate, queue: QueueName.BackgroundTask })
|
|
|
|
|
async onMemoriesCreate() {
|
|
|
|
|
const users = await this.userRepository.getList({ withDeleted: false });
|
|
|
|
|
const usersIds = await Promise.all(
|
|
|
|
|
users.map((user) =>
|
|
|
|
|
getMyPartnerIds({
|
|
|
|
|
userId: user.id,
|
|
|
|
|
repository: this.partnerRepository,
|
|
|
|
|
timelineEnabled: true,
|
|
|
|
|
}),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
await this.databaseRepository.withLock(DatabaseLock.MemoryCreation, async () => {
|
|
|
|
|
const state = await this.systemMetadataRepository.get(SystemMetadataKey.MemoriesState);
|
|
|
|
|
@ -38,7 +29,7 @@ export class MemoryService extends BaseService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
await Promise.all(users.map((owner, i) => this.createOnThisDayMemories(owner.id, usersIds[i], target)));
|
|
|
|
|
await Promise.all(users.map((owner) => this.createOnThisDayMemories(owner.id, target)));
|
|
|
|
|
} catch (error) {
|
|
|
|
|
this.logger.error(`Failed to create memories for ${target.toISO()}: ${error}`);
|
|
|
|
|
}
|
|
|
|
|
@ -51,10 +42,10 @@ export class MemoryService extends BaseService {
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async createOnThisDayMemories(ownerId: string, userIds: string[], target: DateTime) {
|
|
|
|
|
private async createOnThisDayMemories(ownerId: string, target: DateTime) {
|
|
|
|
|
const showAt = target.startOf('day').toISO();
|
|
|
|
|
const hideAt = target.endOf('day').toISO();
|
|
|
|
|
const memories = await this.assetRepository.getByDayOfYear([ownerId, ...userIds], target);
|
|
|
|
|
const memories = await this.assetRepository.getByDayOfYear([ownerId], target);
|
|
|
|
|
await Promise.all(
|
|
|
|
|
memories.map(({ year, assets }) =>
|
|
|
|
|
this.memoryRepository.create(
|
|
|
|
|
|