import define from "../../define.js"; import { AbuseUserReports } from "../../../../models/index.js"; import { makePaginationQuery } from "../../common/make-pagination-query.js"; export const meta = { tags: [ "admin" ], requireCredential: true, requireModerator: true, res: { type: "array", optional: false, nullable: false, items: { type: "object", optional: false, nullable: false, properties: { id: { type: "string", nullable: false, optional: false, format: "id", example: "xxxxxxxxxx" }, createdAt: { type: "string", nullable: false, optional: false, format: "date-time" }, comment: { type: "string", nullable: false, optional: false }, resolved: { type: "boolean", nullable: false, optional: false, example: false }, reporterId: { type: "string", nullable: false, optional: false, format: "id" }, targetUserId: { type: "string", nullable: false, optional: false, format: "id" }, assigneeId: { type: "string", nullable: true, optional: false, format: "id" }, reporter: { type: "object", nullable: false, optional: false, ref: "User" }, targetUser: { type: "object", nullable: false, optional: false, ref: "User" }, assignee: { type: "object", nullable: true, optional: true, ref: "User" } } } } }; export const paramDef = { type: "object", properties: { limit: { type: "integer", minimum: 1, maximum: 100, default: 10 }, sinceId: { type: "string", format: "misskey:id" }, untilId: { type: "string", format: "misskey:id" }, state: { type: "string", nullable: true, default: null }, reporterOrigin: { type: "string", enum: [ "combined", "local", "remote" ], default: "combined" }, targetUserOrigin: { type: "string", enum: [ "combined", "local", "remote" ], default: "combined" }, forwarded: { type: "boolean", default: false } }, required: [] }; export default define(meta, paramDef, async (ps)=>{ const query = makePaginationQuery(AbuseUserReports.createQueryBuilder("report"), ps.sinceId, ps.untilId); switch(ps.state){ case "resolved": query.andWhere("report.resolved = TRUE"); break; case "unresolved": query.andWhere("report.resolved = FALSE"); break; } switch(ps.reporterOrigin){ case "local": query.andWhere("report.reporterHost IS NULL"); break; case "remote": query.andWhere("report.reporterHost IS NOT NULL"); break; } switch(ps.targetUserOrigin){ case "local": query.andWhere("report.targetUserHost IS NULL"); break; case "remote": query.andWhere("report.targetUserHost IS NOT NULL"); break; } const reports = await query.take(ps.limit).getMany(); return await AbuseUserReports.packMany(reports); });