mirror of
https://codeberg.org/yeentown/barkey.git
synced 2025-07-07 20:44:34 +00:00
add targetInstance to abuse report schema
This commit is contained in:
parent
cfbf2c9c8e
commit
71f60d519b
4 changed files with 51 additions and 3 deletions
|
@ -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);
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
*/
|
||||
|
||||
import { PrimaryColumn, Entity, Index, JoinColumn, Column, ManyToOne } from 'typeorm';
|
||||
import { MiInstance } from '@/models/Instance.js';
|
||||
import { id } from './util/id.js';
|
||||
import { MiUser } from './User.js';
|
||||
|
||||
|
@ -88,11 +89,31 @@ export class MiAbuseUserReport {
|
|||
})
|
||||
public targetUserHost: string | null;
|
||||
|
||||
@ManyToOne(() => MiInstance, {
|
||||
// TODO create a foreign key constraint after hazelnoot/labs/persisted-instance-blocks is merged
|
||||
createForeignKeyConstraints: false,
|
||||
})
|
||||
@JoinColumn({
|
||||
name: 'targetUserHost',
|
||||
referencedColumnName: 'host',
|
||||
})
|
||||
public targetUserInstance: MiInstance | null;
|
||||
|
||||
@Index()
|
||||
@Column('varchar', {
|
||||
length: 128, nullable: true,
|
||||
comment: '[Denormalized]',
|
||||
})
|
||||
public reporterHost: string | null;
|
||||
|
||||
@ManyToOne(() => MiInstance, {
|
||||
// TODO create a foreign key constraint after hazelnoot/labs/persisted-instance-blocks is merged
|
||||
createForeignKeyConstraints: false,
|
||||
})
|
||||
@JoinColumn({
|
||||
name: 'reporterHost',
|
||||
referencedColumnName: 'host',
|
||||
})
|
||||
public reporterInstance: MiInstance | null;
|
||||
//#endregion
|
||||
}
|
||||
|
|
|
@ -69,6 +69,11 @@ export const meta = {
|
|||
nullable: false, optional: false,
|
||||
ref: 'UserDetailedNotMe',
|
||||
},
|
||||
targetInstance: {
|
||||
type: 'object',
|
||||
nullable: true, optional: false,
|
||||
ref: 'FederationInstance',
|
||||
},
|
||||
assignee: {
|
||||
type: 'object',
|
||||
nullable: true, optional: false,
|
||||
|
|
|
@ -6198,6 +6198,7 @@ export type operations = {
|
|||
assigneeId: string | null;
|
||||
reporter: components['schemas']['UserDetailedNotMe'];
|
||||
targetUser: components['schemas']['UserDetailedNotMe'];
|
||||
targetInstance: components['schemas']['FederationInstance'] | null;
|
||||
assignee: components['schemas']['UserDetailedNotMe'] | null;
|
||||
forwarded: boolean;
|
||||
/** @enum {string|null} */
|
||||
|
|
Loading…
Add table
Reference in a new issue