From f7a85e06b193da3a6e4b1acb5e9111a843274c58 Mon Sep 17 00:00:00 2001 From: Gian Lazzarini <1166579+gianlazz@users.noreply.github.com> Date: Sat, 13 Jun 2026 14:06:58 -0700 Subject: [PATCH 1/4] first cut --- src/dal/entity/file.entity.ts | 14 +++++++++++++- src/dal/entity/shareableId.entity.ts | 10 ++++++++++ src/open-graph/open-graph.service.ts | 22 ++++------------------ 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/dal/entity/file.entity.ts b/src/dal/entity/file.entity.ts index 2d14756..aae1ed3 100644 --- a/src/dal/entity/file.entity.ts +++ b/src/dal/entity/file.entity.ts @@ -6,7 +6,7 @@ import { type Ref, Unique, } from '@mikro-orm/core'; -import { ShareableId } from './shareableId.entity'; +import { OpenGraphTagValues, ShareableId } from './shareableId.entity'; import { User } from './user.entity'; @Entity() @@ -31,4 +31,16 @@ export class File extends ShareableId { nullable: true, }) public createdBy?: Ref; + + public async getOpenGraphTagValues(): Promise { + const createdBy = await this?.createdBy?.load(); + return { + ogUrl: `${req.protocol}://${req.host}/file/${shareableId}`, + ogTitle: file?.fileName, + ogDescription: `From ${createdBy?.email}`, + ogImage: this.fileUrlService.getWatermarkedFileUrl(shareableId, req), + file, + createdBy, + } as OpenGraphTagValues; + } } diff --git a/src/dal/entity/shareableId.entity.ts b/src/dal/entity/shareableId.entity.ts index 5ddc568..ee81049 100644 --- a/src/dal/entity/shareableId.entity.ts +++ b/src/dal/entity/shareableId.entity.ts @@ -1,6 +1,14 @@ import { BeforeCreate, Property } from '@mikro-orm/core'; import { randomUUID } from 'crypto'; +export interface OpenGraphTagValues { + ogUrl: string; + ogTitle: string; + ogDescription: string; + ogImage: string; + file?: any; +} + export abstract class ShareableId { @Property() shareableId?: string; @@ -17,4 +25,6 @@ export abstract class ShareableId { @Property({ nullable: true }) public banned?: boolean; + + public abstract getOpenGraphTagValues(): Promise; } diff --git a/src/open-graph/open-graph.service.ts b/src/open-graph/open-graph.service.ts index f1359bf..00720ba 100644 --- a/src/open-graph/open-graph.service.ts +++ b/src/open-graph/open-graph.service.ts @@ -4,13 +4,7 @@ import { FileUrlService } from '../file/file-url/file-url.service'; import { InjectRepository } from '@mikro-orm/nestjs'; import { File } from '../dal/entity/file.entity'; import { EntityManager, EntityRepository } from '@mikro-orm/core'; - -export interface OpenGraphTagValues { - ogUrl: string; - ogTitle: string; - ogDescription: string; - ogImage: string; -} +import { OpenGraphTagValues } from '../dal/entity/shareableId.entity'; @Injectable() export class OpenGraphService { @@ -19,13 +13,13 @@ export class OpenGraphService { @InjectRepository(File) private readonly fileRepository: EntityRepository, private readonly em: EntityManager, - ) {} + ) { } public async getShareableTagValues( shareableId: string, type: string, req: FastifyRequest, - ) { + ): Promise { if (type == 'file') { const file = await this.fileRepository.findOne( { shareableId }, @@ -33,15 +27,7 @@ export class OpenGraphService { populate: ['createdBy'], }, ); - const createdBy = await file?.createdBy?.load(); - return { - ogUrl: `${req.protocol}://${req.host}/file/${shareableId}`, - ogTitle: file?.fileName, - ogDescription: `From ${createdBy?.email}`, - ogImage: this.fileUrlService.getWatermarkedFileUrl(shareableId, req), - file, - createdBy, - }; + return file.getOpenGraphTagValues(); } } } From 8836588710b8376a0b1445751cb4a7d52eb8a766 Mon Sep 17 00:00:00 2001 From: Gian Lazzarini <1166579+gianlazz@users.noreply.github.com> Date: Sat, 13 Jun 2026 14:13:05 -0700 Subject: [PATCH 2/4] wip --- src/dal/entity/file.entity.ts | 8 ++++---- src/dal/entity/shareableId.entity.ts | 5 ++++- src/open-graph/open-graph.service.ts | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/dal/entity/file.entity.ts b/src/dal/entity/file.entity.ts index aae1ed3..48569f4 100644 --- a/src/dal/entity/file.entity.ts +++ b/src/dal/entity/file.entity.ts @@ -35,11 +35,11 @@ export class File extends ShareableId { public async getOpenGraphTagValues(): Promise { const createdBy = await this?.createdBy?.load(); return { - ogUrl: `${req.protocol}://${req.host}/file/${shareableId}`, - ogTitle: file?.fileName, + ogUrl: `${req.protocol}://${req.host}/file/${this.shareableId}`, + ogTitle: this?.fileName, ogDescription: `From ${createdBy?.email}`, - ogImage: this.fileUrlService.getWatermarkedFileUrl(shareableId, req), - file, + ogImage: this.fileUrlService.getWatermarkedFileUrl(this.shareableId, req), + file: this, createdBy, } as OpenGraphTagValues; } diff --git a/src/dal/entity/shareableId.entity.ts b/src/dal/entity/shareableId.entity.ts index ee81049..ccae22d 100644 --- a/src/dal/entity/shareableId.entity.ts +++ b/src/dal/entity/shareableId.entity.ts @@ -1,5 +1,6 @@ import { BeforeCreate, Property } from '@mikro-orm/core'; import { randomUUID } from 'crypto'; +import type { FastifyRequest } from 'fastify'; export interface OpenGraphTagValues { ogUrl: string; @@ -26,5 +27,7 @@ export abstract class ShareableId { @Property({ nullable: true }) public banned?: boolean; - public abstract getOpenGraphTagValues(): Promise; + public abstract getOpenGraphTagValues( + req?: FastifyRequest, + ): Promise; } diff --git a/src/open-graph/open-graph.service.ts b/src/open-graph/open-graph.service.ts index 00720ba..0352b58 100644 --- a/src/open-graph/open-graph.service.ts +++ b/src/open-graph/open-graph.service.ts @@ -13,7 +13,7 @@ export class OpenGraphService { @InjectRepository(File) private readonly fileRepository: EntityRepository, private readonly em: EntityManager, - ) { } + ) {} public async getShareableTagValues( shareableId: string, @@ -27,7 +27,7 @@ export class OpenGraphService { populate: ['createdBy'], }, ); - return file.getOpenGraphTagValues(); + return file.getOpenGraphTagValues(req); } } } From cb3f164b4c835d179f436d2a3b69ecaa97cedb2a Mon Sep 17 00:00:00 2001 From: Gian Lazzarini <1166579+gianlazz@users.noreply.github.com> Date: Sat, 13 Jun 2026 14:36:15 -0700 Subject: [PATCH 3/4] added method to user entity --- src/dal/entity/file.entity.ts | 3 ++- src/dal/entity/user.entity.ts | 9 ++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/dal/entity/file.entity.ts b/src/dal/entity/file.entity.ts index 48569f4..022a893 100644 --- a/src/dal/entity/file.entity.ts +++ b/src/dal/entity/file.entity.ts @@ -8,6 +8,7 @@ import { } from '@mikro-orm/core'; import { OpenGraphTagValues, ShareableId } from './shareableId.entity'; import { User } from './user.entity'; +import { FastifyRequest } from 'fastify'; @Entity() export class File extends ShareableId { @@ -32,7 +33,7 @@ export class File extends ShareableId { }) public createdBy?: Ref; - public async getOpenGraphTagValues(): Promise { + public asynic getOpenGraphTagValues(req: FastifyRequest): Promise { const createdBy = await this?.createdBy?.load(); return { ogUrl: `${req.protocol}://${req.host}/file/${this.shareableId}`, diff --git a/src/dal/entity/user.entity.ts b/src/dal/entity/user.entity.ts index 5b4beec..5b95a49 100644 --- a/src/dal/entity/user.entity.ts +++ b/src/dal/entity/user.entity.ts @@ -11,8 +11,9 @@ import { } from '@mikro-orm/core'; import { File } from './file.entity'; import { PasswordReset } from './passwordReset.entity'; -import { ShareableId } from './shareableId.entity'; +import { OpenGraphTagValues, ShareableId } from './shareableId.entity'; import { UserDevice } from './userDevice.entity'; +import { FastifyRequest } from 'fastify'; @Entity() export class User extends ShareableId { @@ -46,4 +47,10 @@ export class User extends ShareableId { @OneToMany(() => File, (file) => file.createdBy) public fileUploads = new Collection(this); + + public getOpenGraphTagValues( + req?: FastifyRequest, + ): Promise { + throw Error('Not implemented'); + } } From 6a033f3b9f3431a38c85a59e45603ea71c65c596 Mon Sep 17 00:00:00 2001 From: Gian Lazzarini <1166579+gianlazz@users.noreply.github.com> Date: Sat, 13 Jun 2026 14:43:06 -0700 Subject: [PATCH 4/4] fixed precommit --- src/dal/entity/file.entity.ts | 4 +++- src/dal/entity/user.entity.ts | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/dal/entity/file.entity.ts b/src/dal/entity/file.entity.ts index 022a893..6c89fa9 100644 --- a/src/dal/entity/file.entity.ts +++ b/src/dal/entity/file.entity.ts @@ -33,7 +33,9 @@ export class File extends ShareableId { }) public createdBy?: Ref; - public asynic getOpenGraphTagValues(req: FastifyRequest): Promise { + public async getOpenGraphTagValues( + req: FastifyRequest, + ): Promise { const createdBy = await this?.createdBy?.load(); return { ogUrl: `${req.protocol}://${req.host}/file/${this.shareableId}`, diff --git a/src/dal/entity/user.entity.ts b/src/dal/entity/user.entity.ts index 5b95a49..6b7da72 100644 --- a/src/dal/entity/user.entity.ts +++ b/src/dal/entity/user.entity.ts @@ -51,6 +51,6 @@ export class User extends ShareableId { public getOpenGraphTagValues( req?: FastifyRequest, ): Promise { - throw Error('Not implemented'); + throw Error(`Not implemented ${JSON.stringify(req)}`); } }