summaryrefslogtreecommitdiff
path: root/src/server/api/endpoints/messaging
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2021-11-12 02:02:25 +0900
commit0e4a111f81cceed275d9bec2695f6e401fb654d8 (patch)
tree40874799472fa07416f17b50a398ac33b7771905 /src/server/api/endpoints/messaging
parentupdate deps (diff)
downloadsharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.gz
sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.tar.bz2
sharkey-0e4a111f81cceed275d9bec2695f6e401fb654d8.zip
refactoring
Resolve #7779
Diffstat (limited to 'src/server/api/endpoints/messaging')
-rw-r--r--src/server/api/endpoints/messaging/history.ts94
-rw-r--r--src/server/api/endpoints/messaging/messages.ts148
-rw-r--r--src/server/api/endpoints/messaging/messages/create.ts148
-rw-r--r--src/server/api/endpoints/messaging/messages/delete.ts48
-rw-r--r--src/server/api/endpoints/messaging/messages/read.ts48
5 files changed, 0 insertions, 486 deletions
diff --git a/src/server/api/endpoints/messaging/history.ts b/src/server/api/endpoints/messaging/history.ts
deleted file mode 100644
index e447703546..0000000000
--- a/src/server/api/endpoints/messaging/history.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import $ from 'cafy';
-import define from '../../define';
-import { MessagingMessage } from '@/models/entities/messaging-message';
-import { MessagingMessages, Mutings, UserGroupJoinings } from '@/models/index';
-import { Brackets } from 'typeorm';
-
-export const meta = {
- tags: ['messaging'],
-
- requireCredential: true as const,
-
- kind: 'read:messaging',
-
- params: {
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10
- },
-
- group: {
- validator: $.optional.bool,
- default: false
- }
- },
-
- res: {
- type: 'array' as const,
- optional: false as const, nullable: false as const,
- items: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
- ref: 'MessagingMessage',
- }
- },
-};
-
-export default define(meta, async (ps, user) => {
- const mute = await Mutings.find({
- muterId: user.id,
- });
-
- const groups = ps.group ? await UserGroupJoinings.find({
- userId: user.id,
- }).then(xs => xs.map(x => x.userGroupId)) : [];
-
- if (ps.group && groups.length === 0) {
- return [];
- }
-
- const history: MessagingMessage[] = [];
-
- for (let i = 0; i < ps.limit!; i++) {
- const found = ps.group
- ? history.map(m => m.groupId!)
- : history.map(m => (m.userId === user.id) ? m.recipientId! : m.userId!);
-
- const query = MessagingMessages.createQueryBuilder('message')
- .orderBy('message.createdAt', 'DESC');
-
- if (ps.group) {
- query.where(`message.groupId IN (:...groups)`, { groups: groups });
-
- if (found.length > 0) {
- query.andWhere(`message.groupId NOT IN (:...found)`, { found: found });
- }
- } else {
- query.where(new Brackets(qb => { qb
- .where(`message.userId = :userId`, { userId: user.id })
- .orWhere(`message.recipientId = :userId`, { userId: user.id });
- }));
- query.andWhere(`message.groupId IS NULL`);
-
- if (found.length > 0) {
- query.andWhere(`message.userId NOT IN (:...found)`, { found: found });
- query.andWhere(`message.recipientId NOT IN (:...found)`, { found: found });
- }
-
- if (mute.length > 0) {
- query.andWhere(`message.userId NOT IN (:...mute)`, { mute: mute.map(m => m.muteeId) });
- query.andWhere(`message.recipientId NOT IN (:...mute)`, { mute: mute.map(m => m.muteeId) });
- }
- }
-
- const message = await query.getOne();
-
- if (message) {
- history.push(message);
- } else {
- break;
- }
- }
-
- return await Promise.all(history.map(h => MessagingMessages.pack(h.id, user)));
-});
diff --git a/src/server/api/endpoints/messaging/messages.ts b/src/server/api/endpoints/messaging/messages.ts
deleted file mode 100644
index 6baa24609e..0000000000
--- a/src/server/api/endpoints/messaging/messages.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
-import define from '../../define';
-import { ApiError } from '../../error';
-import { getUser } from '../../common/getters';
-import { MessagingMessages, UserGroups, UserGroupJoinings, Users } from '@/models/index';
-import { makePaginationQuery } from '../../common/make-pagination-query';
-import { Brackets } from 'typeorm';
-import { readUserMessagingMessage, readGroupMessagingMessage, deliverReadActivity } from '../../common/read-messaging-message';
-
-export const meta = {
- tags: ['messaging'],
-
- requireCredential: true as const,
-
- kind: 'read:messaging',
-
- params: {
- userId: {
- validator: $.optional.type(ID),
- },
-
- groupId: {
- validator: $.optional.type(ID),
- },
-
- limit: {
- validator: $.optional.num.range(1, 100),
- default: 10
- },
-
- sinceId: {
- validator: $.optional.type(ID),
- },
-
- untilId: {
- validator: $.optional.type(ID),
- },
-
- markAsRead: {
- validator: $.optional.bool,
- default: true
- }
- },
-
- res: {
- type: 'array' as const,
- optional: false as const, nullable: false as const,
- items: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
- ref: 'MessagingMessage',
- }
- },
-
- errors: {
- noSuchUser: {
- message: 'No such user.',
- code: 'NO_SUCH_USER',
- id: '11795c64-40ea-4198-b06e-3c873ed9039d'
- },
-
- noSuchGroup: {
- message: 'No such group.',
- code: 'NO_SUCH_GROUP',
- id: 'c4d9f88c-9270-4632-b032-6ed8cee36f7f'
- },
-
- groupAccessDenied: {
- message: 'You can not read messages of groups that you have not joined.',
- code: 'GROUP_ACCESS_DENIED',
- id: 'a053a8dd-a491-4718-8f87-50775aad9284'
- },
- }
-};
-
-export default define(meta, async (ps, user) => {
- if (ps.userId != null) {
- // Fetch recipient (user)
- const recipient = await getUser(ps.userId).catch(e => {
- if (e.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(meta.errors.noSuchUser);
- throw e;
- });
-
- const query = makePaginationQuery(MessagingMessages.createQueryBuilder('message'), ps.sinceId, ps.untilId)
- .andWhere(new Brackets(qb => { qb
- .where(new Brackets(qb => { qb
- .where('message.userId = :meId')
- .andWhere('message.recipientId = :recipientId');
- }))
- .orWhere(new Brackets(qb => { qb
- .where('message.userId = :recipientId')
- .andWhere('message.recipientId = :meId');
- }));
- }))
- .setParameter('meId', user.id)
- .setParameter('recipientId', recipient.id);
-
- const messages = await query.take(ps.limit!).getMany();
-
- // Mark all as read
- if (ps.markAsRead) {
- readUserMessagingMessage(user.id, recipient.id, messages.filter(m => m.recipientId === user.id).map(x => x.id));
-
- // リモートユーザーとのメッセージだったら既読配信
- if (Users.isLocalUser(user) && Users.isRemoteUser(recipient)) {
- deliverReadActivity(user, recipient, messages);
- }
- }
-
- return await Promise.all(messages.map(message => MessagingMessages.pack(message, user, {
- populateRecipient: false
- })));
- } else if (ps.groupId != null) {
- // Fetch recipient (group)
- const recipientGroup = await UserGroups.findOne(ps.groupId);
-
- if (recipientGroup == null) {
- throw new ApiError(meta.errors.noSuchGroup);
- }
-
- // check joined
- const joining = await UserGroupJoinings.findOne({
- userId: user.id,
- userGroupId: recipientGroup.id
- });
-
- if (joining == null) {
- throw new ApiError(meta.errors.groupAccessDenied);
- }
-
- const query = makePaginationQuery(MessagingMessages.createQueryBuilder('message'), ps.sinceId, ps.untilId)
- .andWhere(`message.groupId = :groupId`, { groupId: recipientGroup.id });
-
- const messages = await query.take(ps.limit!).getMany();
-
- // Mark all as read
- if (ps.markAsRead) {
- readGroupMessagingMessage(user.id, recipientGroup.id, messages.map(x => x.id));
- }
-
- return await Promise.all(messages.map(message => MessagingMessages.pack(message, user, {
- populateGroup: false
- })));
- } else {
- throw new Error();
- }
-});
diff --git a/src/server/api/endpoints/messaging/messages/create.ts b/src/server/api/endpoints/messaging/messages/create.ts
deleted file mode 100644
index df0b455cbe..0000000000
--- a/src/server/api/endpoints/messaging/messages/create.ts
+++ /dev/null
@@ -1,148 +0,0 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { getUser } from '../../../common/getters';
-import { MessagingMessages, DriveFiles, UserGroups, UserGroupJoinings, Blockings } from '@/models/index';
-import { User } from '@/models/entities/user';
-import { UserGroup } from '@/models/entities/user-group';
-import { createMessage } from '@/services/messages/create';
-
-export const meta = {
- tags: ['messaging'],
-
- requireCredential: true as const,
-
- kind: 'write:messaging',
-
- params: {
- userId: {
- validator: $.optional.type(ID),
- },
-
- groupId: {
- validator: $.optional.type(ID),
- },
-
- text: {
- validator: $.optional.str.pipe(MessagingMessages.validateText)
- },
-
- fileId: {
- validator: $.optional.type(ID),
- }
- },
-
- res: {
- type: 'object' as const,
- optional: false as const, nullable: false as const,
- ref: 'MessagingMessage',
- },
-
- errors: {
- recipientIsYourself: {
- message: 'You can not send a message to yourself.',
- code: 'RECIPIENT_IS_YOURSELF',
- id: '17e2ba79-e22a-4cbc-bf91-d327643f4a7e'
- },
-
- noSuchUser: {
- message: 'No such user.',
- code: 'NO_SUCH_USER',
- id: '11795c64-40ea-4198-b06e-3c873ed9039d'
- },
-
- noSuchGroup: {
- message: 'No such group.',
- code: 'NO_SUCH_GROUP',
- id: 'c94e2a5d-06aa-4914-8fa6-6a42e73d6537'
- },
-
- groupAccessDenied: {
- message: 'You can not send messages to groups that you have not joined.',
- code: 'GROUP_ACCESS_DENIED',
- id: 'd96b3cca-5ad1-438b-ad8b-02f931308fbd'
- },
-
- noSuchFile: {
- message: 'No such file.',
- code: 'NO_SUCH_FILE',
- id: '4372b8e2-185d-4146-8749-2f68864a3e5f'
- },
-
- contentRequired: {
- message: 'Content required. You need to set text or fileId.',
- code: 'CONTENT_REQUIRED',
- id: '25587321-b0e6-449c-9239-f8925092942c'
- },
-
- youHaveBeenBlocked: {
- message: 'You cannot send a message because you have been blocked by this user.',
- code: 'YOU_HAVE_BEEN_BLOCKED',
- id: 'c15a5199-7422-4968-941a-2a462c478f7d'
- },
- }
-};
-
-export default define(meta, async (ps, user) => {
- let recipientUser: User | undefined;
- let recipientGroup: UserGroup | undefined;
-
- if (ps.userId != null) {
- // Myself
- if (ps.userId === user.id) {
- throw new ApiError(meta.errors.recipientIsYourself);
- }
-
- // Fetch recipient (user)
- recipientUser = await getUser(ps.userId).catch(e => {
- if (e.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(meta.errors.noSuchUser);
- throw e;
- });
-
- // Check blocking
- const block = await Blockings.findOne({
- blockerId: recipientUser.id,
- blockeeId: user.id,
- });
- if (block) {
- throw new ApiError(meta.errors.youHaveBeenBlocked);
- }
- } else if (ps.groupId != null) {
- // Fetch recipient (group)
- recipientGroup = await UserGroups.findOne(ps.groupId);
-
- if (recipientGroup == null) {
- throw new ApiError(meta.errors.noSuchGroup);
- }
-
- // check joined
- const joining = await UserGroupJoinings.findOne({
- userId: user.id,
- userGroupId: recipientGroup.id
- });
-
- if (joining == null) {
- throw new ApiError(meta.errors.groupAccessDenied);
- }
- }
-
- let file = null;
- if (ps.fileId != null) {
- file = await DriveFiles.findOne({
- id: ps.fileId,
- userId: user.id
- });
-
- if (file == null) {
- throw new ApiError(meta.errors.noSuchFile);
- }
- }
-
- // テキストが無いかつ添付ファイルも無かったらエラー
- if (ps.text == null && file == null) {
- throw new ApiError(meta.errors.contentRequired);
- }
-
- return await createMessage(user, recipientUser, recipientGroup, ps.text, file);
-});
diff --git a/src/server/api/endpoints/messaging/messages/delete.ts b/src/server/api/endpoints/messaging/messages/delete.ts
deleted file mode 100644
index bd4890fc8a..0000000000
--- a/src/server/api/endpoints/messaging/messages/delete.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
-import define from '../../../define';
-import * as ms from 'ms';
-import { ApiError } from '../../../error';
-import { MessagingMessages } from '@/models/index';
-import { deleteMessage } from '@/services/messages/delete';
-
-export const meta = {
- tags: ['messaging'],
-
- requireCredential: true as const,
-
- kind: 'write:messaging',
-
- limit: {
- duration: ms('1hour'),
- max: 300,
- minInterval: ms('1sec')
- },
-
- params: {
- messageId: {
- validator: $.type(ID),
- }
- },
-
- errors: {
- noSuchMessage: {
- message: 'No such message.',
- code: 'NO_SUCH_MESSAGE',
- id: '54b5b326-7925-42cf-8019-130fda8b56af'
- },
- }
-};
-
-export default define(meta, async (ps, user) => {
- const message = await MessagingMessages.findOne({
- id: ps.messageId,
- userId: user.id
- });
-
- if (message == null) {
- throw new ApiError(meta.errors.noSuchMessage);
- }
-
- await deleteMessage(message);
-});
diff --git a/src/server/api/endpoints/messaging/messages/read.ts b/src/server/api/endpoints/messaging/messages/read.ts
deleted file mode 100644
index a1747310d3..0000000000
--- a/src/server/api/endpoints/messaging/messages/read.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import $ from 'cafy';
-import { ID } from '@/misc/cafy-id';
-import define from '../../../define';
-import { ApiError } from '../../../error';
-import { MessagingMessages } from '@/models/index';
-import { readUserMessagingMessage, readGroupMessagingMessage } from '../../../common/read-messaging-message';
-
-export const meta = {
- tags: ['messaging'],
-
- requireCredential: true as const,
-
- kind: 'write:messaging',
-
- params: {
- messageId: {
- validator: $.type(ID),
- }
- },
-
- errors: {
- noSuchMessage: {
- message: 'No such message.',
- code: 'NO_SUCH_MESSAGE',
- id: '86d56a2f-a9c3-4afb-b13c-3e9bfef9aa14'
- },
- }
-};
-
-export default define(meta, async (ps, user) => {
- const message = await MessagingMessages.findOne(ps.messageId);
-
- if (message == null) {
- throw new ApiError(meta.errors.noSuchMessage);
- }
-
- if (message.recipientId) {
- await readUserMessagingMessage(user.id, message.userId, [message.id]).catch(e => {
- if (e.id === 'e140a4bf-49ce-4fb6-b67c-b78dadf6b52f') throw new ApiError(meta.errors.noSuchMessage);
- throw e;
- });
- } else if (message.groupId) {
- await readGroupMessagingMessage(user.id, message.groupId, [message.id]).catch(e => {
- if (e.id === '930a270c-714a-46b2-b776-ad27276dc569') throw new ApiError(meta.errors.noSuchMessage);
- throw e;
- });
- }
-});