diff options
| author | Ebise Lutica <7106976+EbiseLutica@users.noreply.github.com> | 2023-04-13 13:17:32 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-04-13 13:17:32 +0900 |
| commit | 605f1492350c6f90108018d895e47fbc37197c4a (patch) | |
| tree | 909f5118a3f756e77edf833a18bbf33999e97f08 /packages/backend/src/server/api/endpoints | |
| parent | Revert #10475 in MkTime (diff) | |
| download | misskey-605f1492350c6f90108018d895e47fbc37197c4a.tar.gz misskey-605f1492350c6f90108018d895e47fbc37197c4a.tar.bz2 misskey-605f1492350c6f90108018d895e47fbc37197c4a.zip | |
feat: 自分用メモ機能 (#10516)
* 自分用メモを作成する機能
* 不要なCSSを削除
* メモ: デザイン調整
* デザイン崩れを修正
* fix: メモ機能のe2eテストで見つかった不具合を修正
* デザイン調整
* fix(frontend): 自分用メモtextareaにline-heightが適用されない問題を修正
Diffstat (limited to 'packages/backend/src/server/api/endpoints')
| -rw-r--r-- | packages/backend/src/server/api/endpoints/users/update-memo.ts | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/users/update-memo.ts b/packages/backend/src/server/api/endpoints/users/update-memo.ts new file mode 100644 index 0000000000..300435b9ff --- /dev/null +++ b/packages/backend/src/server/api/endpoints/users/update-memo.ts @@ -0,0 +1,85 @@ +import { Inject, Injectable } from '@nestjs/common'; +import { Endpoint } from '@/server/api/endpoint-base.js'; +import { IdService } from '@/core/IdService.js'; +import type { UserMemoRepository } from '@/models/index.js'; +import { DI } from '@/di-symbols.js'; +import { GetterService } from '@/server/api/GetterService.js'; +import { ApiError } from '../../error.js'; + +export const meta = { + tags: ['account'], + + requireCredential: true, + + kind: 'write:account', + + errors: { + noSuchUser: { + message: 'No such user.', + code: 'NO_SUCH_USER', + id: '6fef56f3-e765-4957-88e5-c6f65329b8a5', + }, + }, +} as const; + +export const paramDef = { + type: 'object', + properties: { + userId: { type: 'string', format: 'misskey:id' }, + memo: { + type: 'string', + nullable: true, + description: 'A personal memo for the target user. If null or empty, delete the memo.', + }, + }, + required: ['userId', 'memo'], +} as const; + +// eslint-disable-next-line import/no-default-export +@Injectable() +export default class extends Endpoint<typeof meta, typeof paramDef> { + constructor( + @Inject(DI.userMemoRepository) + private userMemoRepository: UserMemoRepository, + private getterService: GetterService, + private idService: IdService, + ) { + super(meta, paramDef, async (ps, me) => { + // Get target + const target = await this.getterService.getUser(ps.userId).catch(err => { + if (err.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(meta.errors.noSuchUser); + throw err; + }); + + // 引数がnullか空文字であれば、パーソナルメモを削除する + if (ps.memo === '' || ps.memo == null) { + await this.userMemoRepository.delete({ + userId: me.id, + targetUserId: target.id, + }); + return; + } + + // 以前に作成されたパーソナルメモがあるかどうか確認 + const previousMemo = await this.userMemoRepository.findOneBy({ + userId: me.id, + targetUserId: target.id, + }); + + if (!previousMemo) { + await this.userMemoRepository.insert({ + id: this.idService.genId(), + userId: me.id, + targetUserId: target.id, + memo: ps.memo, + }); + } else { + await this.userMemoRepository.update(previousMemo.id, { + userId: me.id, + targetUserId: target.id, + memo: ps.memo, + }); + } + }); + } +} |