firefish/packages/backend/src/server/api/endpoints/admin/emoji/list-remote.ts
ThatOneCalculator 7c2dabd047
no more eslint
2023-01-12 20:54:33 -08:00

102 lines
2.1 KiB
TypeScript

import define from "../../../define.js";
import { Emojis } from "@/models/index.js";
import { toPuny } from "@/misc/convert-host.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",
optional: false,
nullable: false,
format: "id",
},
aliases: {
type: "array",
optional: false,
nullable: false,
items: {
type: "string",
optional: false,
nullable: false,
},
},
name: {
type: "string",
optional: false,
nullable: false,
},
category: {
type: "string",
optional: false,
nullable: true,
},
host: {
type: "string",
optional: false,
nullable: true,
description: "The local host is represented with `null`.",
},
url: {
type: "string",
optional: false,
nullable: false,
},
},
},
},
} as const;
export const paramDef = {
type: "object",
properties: {
query: { type: "string", nullable: true, default: null },
host: {
type: "string",
nullable: true,
default: null,
description: "Use `null` to represent the local host.",
},
limit: { type: "integer", minimum: 1, maximum: 100, default: 10 },
sinceId: { type: "string", format: "misskey:id" },
untilId: { type: "string", format: "misskey:id" },
},
required: [],
} as const;
export default define(meta, paramDef, async (ps) => {
const q = makePaginationQuery(
Emojis.createQueryBuilder("emoji"),
ps.sinceId,
ps.untilId,
);
if (ps.host == null) {
q.andWhere("emoji.host IS NOT NULL");
} else {
q.andWhere("emoji.host = :host", { host: toPuny(ps.host) });
}
if (ps.query) {
q.andWhere("emoji.name like :query", { query: `%${ps.query}%` });
}
const emojis = await q.orderBy("emoji.id", "DESC").take(ps.limit).getMany();
return Emojis.packMany(emojis);
});