summaryrefslogtreecommitdiff
path: root/packages/backend/src/core
diff options
context:
space:
mode:
authorHazelnoot <acomputerdog@gmail.com>2025-05-28 01:33:55 -0400
committerHazelnoot <acomputerdog@gmail.com>2025-06-04 10:45:05 -0400
commit71f60d519b6f8e655737136484658ea0f1d00507 (patch)
tree66262d7c08c7a48a36baf0b2e9cfd098f4a9aa9f /packages/backend/src/core
parentpack users with "me" context in AbuseUserReportEntityService (diff)
downloadsharkey-71f60d519b6f8e655737136484658ea0f1d00507.tar.gz
sharkey-71f60d519b6f8e655737136484658ea0f1d00507.tar.bz2
sharkey-71f60d519b6f8e655737136484658ea0f1d00507.zip
add targetInstance to abuse report schema
Diffstat (limited to 'packages/backend/src/core')
-rw-r--r--packages/backend/src/core/entities/AbuseUserReportEntityService.ts27
1 files changed, 24 insertions, 3 deletions
diff --git a/packages/backend/src/core/entities/AbuseUserReportEntityService.ts b/packages/backend/src/core/entities/AbuseUserReportEntityService.ts
index a6c00d89b9..c1d877aa12 100644
--- a/packages/backend/src/core/entities/AbuseUserReportEntityService.ts
+++ b/packages/backend/src/core/entities/AbuseUserReportEntityService.ts
@@ -5,13 +5,14 @@
import { Inject, Injectable } from '@nestjs/common';
import { DI } from '@/di-symbols.js';
-import type { AbuseUserReportsRepository, MiUser } from '@/models/_.js';
+import type { AbuseUserReportsRepository, InstancesRepository, MiInstance, MiUser } from '@/models/_.js';
import { awaitAll } from '@/misc/prelude/await-all.js';
import type { MiAbuseUserReport } from '@/models/AbuseUserReport.js';
import { bindThis } from '@/decorators.js';
import { IdService } from '@/core/IdService.js';
import type { Packed } from '@/misc/json-schema.js';
import { UserEntityService } from './UserEntityService.js';
+import { InstanceEntityService } from './InstanceEntityService.js';
@Injectable()
export class AbuseUserReportEntityService {
@@ -19,6 +20,10 @@ export class AbuseUserReportEntityService {
@Inject(DI.abuseUserReportsRepository)
private abuseUserReportsRepository: AbuseUserReportsRepository,
+ @Inject(DI.instancesRepository)
+ private instancesRepository: InstancesRepository,
+
+ private readonly instanceEntityService: InstanceEntityService,
private userEntityService: UserEntityService,
private idService: IdService,
) {
@@ -30,6 +35,7 @@ export class AbuseUserReportEntityService {
hint?: {
packedReporter?: Packed<'UserDetailedNotMe'>,
packedTargetUser?: Packed<'UserDetailedNotMe'>,
+ packedTargetInstance?: Packed<'FederationInstance'>,
packedAssignee?: Packed<'UserDetailedNotMe'>,
},
me?: MiUser | null,
@@ -51,7 +57,16 @@ export class AbuseUserReportEntityService {
targetUser: hint?.packedTargetUser ?? this.userEntityService.pack(report.targetUser ?? report.targetUserId, me, {
schema: 'UserDetailedNotMe',
}),
- assignee: report.assigneeId ? hint?.packedAssignee ?? this.userEntityService.pack(report.assignee ?? report.assigneeId, null, {
+ // return hint, or pack by relation, or fetch and pack by id, or null
+ targetInstance: hint?.packedTargetInstance ?? (
+ report.targetUserInstance
+ ? this.instanceEntityService.pack(report.targetUserInstance, me)
+ : report.targetUserHost
+ ? this.instancesRepository.findOneBy({ host: report.targetUserHost }).then(instance => instance
+ ? this.instanceEntityService.pack(instance, me)
+ : null)
+ : null),
+ assignee: report.assigneeId ? hint?.packedAssignee ?? this.userEntityService.pack(report.assignee ?? report.assigneeId, me, {
schema: 'UserDetailedNotMe',
}) : null,
forwarded: report.forwarded,
@@ -73,12 +88,18 @@ export class AbuseUserReportEntityService {
me,
{ schema: 'UserDetailedNotMe' },
).then(users => new Map(users.map(u => [u.id, u])));
+ const _targetInstances = reports
+ .map(({ targetUserInstance, targetUserHost }) => targetUserInstance ?? targetUserHost)
+ .filter((i): i is MiInstance | string => i != null);
+ const _instanceMap = await this.instanceEntityService.packMany(await this.instanceEntityService.fetchInstancesByHost(_targetInstances), me)
+ .then(instances => new Map(instances.map(i => [i.host, i])));
return Promise.all(
reports.map(report => {
const packedReporter = _userMap.get(report.reporterId);
const packedTargetUser = _userMap.get(report.targetUserId);
+ const packedTargetInstance = report.targetUserHost ? _instanceMap.get(report.targetUserHost) : undefined;
const packedAssignee = report.assigneeId != null ? _userMap.get(report.assigneeId) : undefined;
- return this.pack(report, { packedReporter, packedTargetUser, packedAssignee }, me);
+ return this.pack(report, { packedReporter, packedTargetUser, packedAssignee, packedTargetInstance }, me);
}),
);
}