summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints
diff options
context:
space:
mode:
authorCamilla Ett <camilla.ett@gmail.com>2023-12-02 17:07:57 +0900
committerGitHub <noreply@github.com>2023-12-02 17:07:57 +0900
commit8968bfd309e505f7e33796d9d2084783bcfae377 (patch)
tree070adeea076108381b376185f9391eb4b3c39a14 /packages/backend/src/server/api/endpoints
parentfeat(frontend): 絵文字ピッカーのカテゴリを多階層フォルダ... (diff)
downloadsharkey-8968bfd309e505f7e33796d9d2084783bcfae377.tar.gz
sharkey-8968bfd309e505f7e33796d9d2084783bcfae377.tar.bz2
sharkey-8968bfd309e505f7e33796d9d2084783bcfae377.zip
fix(backend): カスタム絵文字のインポート時の動作を修正 (#12360)
Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
Diffstat (limited to 'packages/backend/src/server/api/endpoints')
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/copy.ts42
1 files changed, 21 insertions, 21 deletions
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
index a65e4e7624..5b41dfb514 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts
@@ -6,11 +6,10 @@
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { EmojisRepository } from '@/models/_.js';
-import { IdService } from '@/core/IdService.js';
import type { MiDriveFile } from '@/models/DriveFile.js';
import { DI } from '@/di-symbols.js';
import { DriveService } from '@/core/DriveService.js';
-import { GlobalEventService } from '@/core/GlobalEventService.js';
+import { CustomEmojiService } from '@/core/CustomEmojiService.js';
import { EmojiEntityService } from '@/core/entities/EmojiEntityService.js';
import { ApiError } from '../../../error.js';
@@ -26,6 +25,11 @@ export const meta = {
code: 'NO_SUCH_EMOJI',
id: 'e2785b66-dca3-4087-9cac-b93c541cc425',
},
+ duplicateName: {
+ message: 'Duplicate name.',
+ code: 'DUPLICATE_NAME',
+ id: 'f7a3462c-4e6e-4069-8421-b9bd4f4c3975',
+ },
},
res: {
@@ -56,15 +60,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
constructor(
@Inject(DI.emojisRepository)
private emojisRepository: EmojisRepository,
-
private emojiEntityService: EmojiEntityService,
- private idService: IdService,
- private globalEventService: GlobalEventService,
+ private customEmojiService: CustomEmojiService,
private driveService: DriveService,
) {
super(meta, paramDef, async (ps, me) => {
const emoji = await this.emojisRepository.findOneBy({ id: ps.emojiId });
-
if (emoji == null) {
throw new ApiError(meta.errors.noSuchEmoji);
}
@@ -75,28 +76,27 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
// Create file
driveFile = await this.driveService.uploadFromUrl({ url: emoji.originalUrl, user: null, force: true });
} catch (e) {
+ // TODO: need to return Drive Error
throw new ApiError();
}
- const copied = await this.emojisRepository.insert({
- id: this.idService.gen(),
- updatedAt: new Date(),
+ // Duplication Check
+ const isDuplicate = await this.customEmojiService.checkDuplicate(emoji.name);
+ if (isDuplicate) throw new ApiError(meta.errors.duplicateName);
+
+ const addedEmoji = await this.customEmojiService.add({
+ driveFile,
name: emoji.name,
+ category: emoji.category,
+ aliases: emoji.aliases,
host: null,
- aliases: [],
- originalUrl: driveFile.url,
- publicUrl: driveFile.webpublicUrl ?? driveFile.url,
- type: driveFile.webpublicType ?? driveFile.type,
license: emoji.license,
- }).then(x => this.emojisRepository.findOneByOrFail(x.identifiers[0]));
-
- this.globalEventService.publishBroadcastStream('emojiAdded', {
- emoji: await this.emojiEntityService.packDetailed(copied.id),
- });
+ isSensitive: emoji.isSensitive,
+ localOnly: emoji.localOnly,
+ roleIdsThatCanBeUsedThisEmojiAsReaction: emoji.roleIdsThatCanBeUsedThisEmojiAsReaction,
+ }, me);
- return {
- id: copied.id,
- };
+ return this.emojiEntityService.packDetailed(addedEmoji);
});
}
}