グループ招待の通知とか

Resolve #5880
Resolve #5927
This commit is contained in:
syuilo
2020-02-13 02:17:54 +09:00
parent 037d4b581b
commit 2feef81516
17 changed files with 163 additions and 82 deletions

View File

@ -1,7 +1,7 @@
import $ from 'cafy';
import { ID } from '../../../../misc/cafy-id';
import define from '../../define';
import { UserGroupInvites } from '../../../../models';
import { UserGroupInvitations } from '../../../../models';
import { makePaginationQuery } from '../../common/make-pagination-query';
export const meta = {
@ -33,13 +33,13 @@ export const meta = {
};
export default define(meta, async (ps, user) => {
const query = makePaginationQuery(UserGroupInvites.createQueryBuilder('invite'), ps.sinceId, ps.untilId)
.andWhere(`invite.userId = :meId`, { meId: user.id })
.leftJoinAndSelect('invite.userGroup', 'user_group');
const query = makePaginationQuery(UserGroupInvitations.createQueryBuilder('invitation'), ps.sinceId, ps.untilId)
.andWhere(`invitation.userId = :meId`, { meId: user.id })
.leftJoinAndSelect('invitation.userGroup', 'user_group');
const invites = await query
const invitations = await query
.take(ps.limit!)
.getMany();
return await UserGroupInvites.packMany(invites);
return await UserGroupInvitations.packMany(invitations);
});

View File

@ -2,14 +2,14 @@ import $ from 'cafy';
import { ID } from '../../../../../../misc/cafy-id';
import define from '../../../../define';
import { ApiError } from '../../../../error';
import { UserGroupJoinings, UserGroupInvites } from '../../../../../../models';
import { UserGroupJoinings, UserGroupInvitations } from '../../../../../../models';
import { genId } from '../../../../../../misc/gen-id';
import { UserGroupJoining } from '../../../../../../models/entities/user-group-joining';
export const meta = {
desc: {
'ja-JP': 'ユーザーグループへの招待を承認します。',
'en-US': 'Accept invite of a user group.'
'en-US': 'Accept invitation of a user group.'
},
tags: ['groups', 'users'],
@ -19,11 +19,11 @@ export const meta = {
kind: 'write:user-groups',
params: {
inviteId: {
invitationId: {
validator: $.type(ID),
desc: {
'ja-JP': '招待ID',
'en-US': 'The invite ID'
'en-US': 'The invitation ID'
}
},
},
@ -39,15 +39,15 @@ export const meta = {
export default define(meta, async (ps, user) => {
// Fetch the invitation
const invite = await UserGroupInvites.findOne({
id: ps.inviteId,
const invitation = await UserGroupInvitations.findOne({
id: ps.invitationId,
});
if (invite == null) {
if (invitation == null) {
throw new ApiError(meta.errors.noSuchInvitation);
}
if (invite.userId !== user.id) {
if (invitation.userId !== user.id) {
throw new ApiError(meta.errors.noSuchInvitation);
}
@ -56,8 +56,8 @@ export default define(meta, async (ps, user) => {
id: genId(),
createdAt: new Date(),
userId: user.id,
userGroupId: invite.userGroupId
userGroupId: invitation.userGroupId
} as UserGroupJoining);
UserGroupInvites.delete(invite.id);
UserGroupInvitations.delete(invitation.id);
});

View File

@ -2,12 +2,12 @@ import $ from 'cafy';
import { ID } from '../../../../../../misc/cafy-id';
import define from '../../../../define';
import { ApiError } from '../../../../error';
import { UserGroupInvites } from '../../../../../../models';
import { UserGroupInvitations } from '../../../../../../models';
export const meta = {
desc: {
'ja-JP': 'ユーザーグループへの招待を拒否します。',
'en-US': 'Reject invite of a user group.'
'en-US': 'Reject invitation of a user group.'
},
tags: ['groups', 'users'],
@ -17,11 +17,11 @@ export const meta = {
kind: 'write:user-groups',
params: {
inviteId: {
invitationId: {
validator: $.type(ID),
desc: {
'ja-JP': '招待ID',
'en-US': 'The invite ID'
'en-US': 'The invitation ID'
}
},
},
@ -37,17 +37,17 @@ export const meta = {
export default define(meta, async (ps, user) => {
// Fetch the invitation
const invite = await UserGroupInvites.findOne({
id: ps.inviteId,
const invitation = await UserGroupInvitations.findOne({
id: ps.invitationId,
});
if (invite == null) {
if (invitation == null) {
throw new ApiError(meta.errors.noSuchInvitation);
}
if (invite.userId !== user.id) {
if (invitation.userId !== user.id) {
throw new ApiError(meta.errors.noSuchInvitation);
}
await UserGroupInvites.delete(invite.id);
await UserGroupInvitations.delete(invitation.id);
});

View File

@ -3,9 +3,10 @@ import { ID } from '../../../../../misc/cafy-id';
import define from '../../../define';
import { ApiError } from '../../../error';
import { getUser } from '../../../common/getters';
import { UserGroups, UserGroupJoinings, UserGroupInvites } from '../../../../../models';
import { UserGroups, UserGroupJoinings, UserGroupInvitations } from '../../../../../models';
import { genId } from '../../../../../misc/gen-id';
import { UserGroupInvite } from '../../../../../models/entities/user-group-invite';
import { UserGroupInvitation } from '../../../../../models/entities/user-group-invitation';
import { createNotification } from '../../../../../services/create-notification';
export const meta = {
desc: {
@ -86,19 +87,24 @@ export default define(meta, async (ps, me) => {
throw new ApiError(meta.errors.alreadyAdded);
}
const invite = await UserGroupInvites.findOne({
const existInvitation = await UserGroupInvitations.findOne({
userGroupId: userGroup.id,
userId: user.id
});
if (invite) {
if (existInvitation) {
throw new ApiError(meta.errors.alreadyInvited);
}
await UserGroupInvites.save({
const invitation = await UserGroupInvitations.save({
id: genId(),
createdAt: new Date(),
userId: user.id,
userGroupId: userGroup.id
} as UserGroupInvite);
} as UserGroupInvitation);
// 通知を作成
createNotification(user.id, me.id, 'groupInvited', {
userGroupInvitationId: invitation.id
});
});