feat(emoji): 管理用のカスタム絵文字フィールドの追加 (MisskeyIO#397)

This commit is contained in:
まっちゃとーにゅ
2024-02-01 10:22:51 +09:00
committed by GitHub
parent c4cc9dae87
commit 8befa531a5
18 changed files with 168 additions and 23 deletions

View File

@@ -50,6 +50,8 @@ export const paramDef = {
license: { type: 'string', nullable: true },
isSensitive: { type: 'boolean' },
localOnly: { type: 'boolean' },
requestedBy: { type: 'string', nullable: true },
memo: { type: 'string', nullable: true },
roleIdsThatCanBeUsedThisEmojiAsReaction: { type: 'array', items: {
type: 'string',
format: 'misskey:id',
@@ -89,6 +91,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
license: ps.license ?? null,
isSensitive: ps.isSensitive ?? false,
localOnly: ps.localOnly ?? false,
requestedBy: ps.requestedBy ?? null,
memo: ps.memo ?? null,
roleIdsThatCanBeUsedThisEmojiAsReaction: ps.roleIdsThatCanBeUsedThisEmojiAsReaction ?? [],
roleIdsThatCanNotBeUsedThisEmojiAsReaction: ps.roleIdsThatCanNotBeUsedThisEmojiAsReaction ?? [],
}, me);

View File

@@ -106,6 +106,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
license: emoji.license,
isSensitive: emoji.isSensitive,
localOnly: emoji.localOnly,
requestedBy: emoji.requestedBy,
memo: emoji.memo,
roleIdsThatCanBeUsedThisEmojiAsReaction: emoji.roleIdsThatCanBeUsedThisEmojiAsReaction,
roleIdsThatCanNotBeUsedThisEmojiAsReaction: emoji.roleIdsThatCanNotBeUsedThisEmojiAsReaction,
}, me);

View File

@@ -106,7 +106,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
.limit(ps.limit)
.getMany();
return this.emojiEntityService.packDetailedMany(emojis);
return this.emojiEntityService.packInternalMany(emojis);
});
}
}

View File

@@ -10,7 +10,6 @@ import type { MiEmoji } from '@/models/Emoji.js';
import { QueryService } from '@/core/QueryService.js';
import { DI } from '@/di-symbols.js';
import { EmojiEntityService } from '@/core/entities/EmojiEntityService.js';
//import { sqlLikeEscape } from '@/misc/sql-like-escape.js';
export const meta = {
tags: ['admin'],
@@ -88,28 +87,26 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
let emojis: MiEmoji[];
if (ps.query) {
//q.andWhere('emoji.name ILIKE :q', { q: `%${ sqlLikeEscape(ps.query) }%` });
//const emojis = await q.limit(ps.limit).getMany();
if (ps.query.startsWith(':') && ps.query.endsWith(':') && ps.query.length > 2) {
// 登録名と完全一致の検索
q.andWhere('emoji.name = :q', { q: ps.query.slice(1, -1) });
emojis = await q.getMany();
const queryarry = ps.query.match(/\:([a-z0-9_]*)\:/g);
if (queryarry) {
emojis = emojis.filter(emoji =>
queryarry.includes(`:${emoji.name}:`),
);
emojis = await q.limit(ps.limit).getMany();
} else {
emojis = emojis.filter(emoji =>
emoji.name.includes(ps.query!) ||
emoji.aliases.some(a => a.includes(ps.query!)) ||
emoji.category?.includes(ps.query!));
// 登録名、エイリアス、カテゴリーの部分一致の検索
// TODO: クエリーで処理したいが、aliasesがarrayなので複雑になりすぎるためいったん放置
emojis = (await q.getMany())
.filter(emoji =>
emoji.name.includes(ps.query!) ||
emoji.aliases.some(a => a.includes(ps.query!)) ||
emoji.category?.includes(ps.query!))
.splice(ps.limit + 1);
}
emojis.splice(ps.limit + 1);
} else {
emojis = await q.limit(ps.limit).getMany();
}
return this.emojiEntityService.packDetailedMany(emojis);
return this.emojiEntityService.packInternalMany(emojis);
});
}
}

View File

@@ -53,6 +53,8 @@ export const paramDef = {
license: { type: 'string', nullable: true },
isSensitive: { type: 'boolean' },
localOnly: { type: 'boolean' },
requestedBy: { type: 'string', nullable: true },
memo: { type: 'string', nullable: true },
roleIdsThatCanBeUsedThisEmojiAsReaction: { type: 'array', items: {
type: 'string',
format: 'misskey:id',
@@ -98,6 +100,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
license: ps.license ?? null,
isSensitive: ps.isSensitive,
localOnly: ps.localOnly,
requestedBy: ps.requestedBy ?? null,
memo: ps.memo ?? null,
roleIdsThatCanBeUsedThisEmojiAsReaction: ps.roleIdsThatCanBeUsedThisEmojiAsReaction,
roleIdsThatCanNotBeUsedThisEmojiAsReaction: ps.roleIdsThatCanNotBeUsedThisEmojiAsReaction,
}, me);