From 3c6f07fc8cccdcbbd1826ec42e34c423cf433105 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Sat, 28 Jun 2025 21:38:54 +0900 Subject: feat: モデログを検索できるように MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/api/endpoints/admin/show-moderation-logs.ts | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'packages/backend/src/server/api/endpoints/admin') diff --git a/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts b/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts index e8ffd9cd9f..697fdf4210 100644 --- a/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts +++ b/packages/backend/src/server/api/endpoints/admin/show-moderation-logs.ts @@ -9,6 +9,7 @@ import type { ModerationLogsRepository } from '@/models/_.js'; import { QueryService } from '@/core/QueryService.js'; import { DI } from '@/di-symbols.js'; import { ModerationLogEntityService } from '@/core/entities/ModerationLogEntityService.js'; +import { sqlLikeEscape } from '@/misc/sql-like-escape.js'; export const meta = { tags: ['admin'], @@ -67,6 +68,7 @@ export const paramDef = { untilDate: { type: 'integer' }, type: { type: 'string', nullable: true }, userId: { type: 'string', format: 'misskey:id', nullable: true }, + search: { type: 'string', nullable: true }, }, required: [], } as const; @@ -81,19 +83,24 @@ export default class extends Endpoint { // eslint- private queryService: QueryService, ) { super(meta, paramDef, async (ps, me) => { - const query = this.queryService.makePaginationQuery(this.moderationLogsRepository.createQueryBuilder('report'), ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate); + const query = this.queryService.makePaginationQuery(this.moderationLogsRepository.createQueryBuilder('log'), ps.sinceId, ps.untilId, ps.sinceDate, ps.untilDate); if (ps.type != null) { - query.andWhere('report.type = :type', { type: ps.type }); + query.andWhere('log.type = :type', { type: ps.type }); } if (ps.userId != null) { - query.andWhere('report.userId = :userId', { userId: ps.userId }); + query.andWhere('log.userId = :userId', { userId: ps.userId }); } - const reports = await query.limit(ps.limit).getMany(); + if (ps.search != null) { + const escapedSearch = sqlLikeEscape(ps.search); + query.andWhere('log.info::text ILIKE :search', { search: `%${escapedSearch}%` }); + } + + const logs = await query.limit(ps.limit).getMany(); - return await this.moderationLogEntityService.packMany(reports); + return await this.moderationLogEntityService.packMany(logs); }); } } -- cgit v1.2.3-freya