diff options
| author | Hazelnoot <acomputerdog@gmail.com> | 2025-01-31 11:38:20 -0500 |
|---|---|---|
| committer | Hazelnoot <acomputerdog@gmail.com> | 2025-02-08 13:17:50 -0500 |
| commit | 3550ce27d50f160917b3e68829fd649e3e3f0571 (patch) | |
| tree | 198886ede1a76df378871999ac4cd1d26851700d /packages/backend/src/server/api/mastodon/MastodonDataService.ts | |
| parent | fix relationship data for Mastodon API (resolves #714) (diff) | |
| download | sharkey-3550ce27d50f160917b3e68829fd649e3e3f0571.tar.gz sharkey-3550ce27d50f160917b3e68829fd649e3e3f0571.tar.bz2 sharkey-3550ce27d50f160917b3e68829fd649e3e3f0571.zip | |
hide restricted edit history from mastodon api (resolves #811)
Diffstat (limited to 'packages/backend/src/server/api/mastodon/MastodonDataService.ts')
| -rw-r--r-- | packages/backend/src/server/api/mastodon/MastodonDataService.ts | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/mastodon/MastodonDataService.ts b/packages/backend/src/server/api/mastodon/MastodonDataService.ts new file mode 100644 index 0000000000..782f592ee5 --- /dev/null +++ b/packages/backend/src/server/api/mastodon/MastodonDataService.ts @@ -0,0 +1,40 @@ +/* + * SPDX-FileCopyrightText: hazelnoot and other Sharkey contributors + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import { Inject, Injectable } from '@nestjs/common'; +import { DI } from '@/di-symbols.js'; +import { QueryService } from '@/core/QueryService.js'; +import type { MiNote, NotesRepository } from '@/models/_.js'; +import type { MiLocalUser } from '@/models/User.js'; + +/** + * Utility service for accessing data with Mastodon semantics + */ +@Injectable() +export class MastodonDataService { + constructor( + @Inject(DI.notesRepository) + private readonly notesRepository: NotesRepository, + + @Inject(QueryService) + private readonly queryService: QueryService, + ) {} + + public async getNote(noteId: string, me?: MiLocalUser | null): Promise<MiNote | null> { + // Root query: note + required dependencies + const query = this.notesRepository + .createQueryBuilder('note') + .where('note.id = :noteId', { noteId }) + .innerJoinAndSelect('note.user', 'user'); + + // Restrict visibility + this.queryService.generateVisibilityQuery(query, me); + if (me) { + this.queryService.generateBlockedUserQuery(query, me); + } + + return await query.getOne(); + } +} |