mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-25 22:38:56 +08:00
feat(server): add invitation status to getInviteInfo response (#11158)
close CLOUD-182
This commit is contained in:
@@ -20,6 +20,7 @@ import { WorkspaceRole } from '../../permission';
|
||||
import { WorkspaceBlobStorage } from '../../storage';
|
||||
|
||||
export type InviteInfo = {
|
||||
isLink: boolean;
|
||||
workspaceId: string;
|
||||
inviterUserId?: string;
|
||||
inviteeUserId?: string;
|
||||
@@ -45,7 +46,10 @@ export class WorkspaceService {
|
||||
`workspace:inviteLinkId:${inviteId}`
|
||||
);
|
||||
if (typeof invite?.workspaceId === 'string') {
|
||||
return invite;
|
||||
return {
|
||||
...invite,
|
||||
isLink: true,
|
||||
};
|
||||
}
|
||||
|
||||
const workspaceUser = await this.models.workspaceUser.getById(inviteId);
|
||||
@@ -55,6 +59,7 @@ export class WorkspaceService {
|
||||
}
|
||||
|
||||
return {
|
||||
isLink: false,
|
||||
workspaceId: workspaceUser.workspaceId,
|
||||
inviteeUserId: workspaceUser.userId,
|
||||
};
|
||||
|
||||
@@ -514,8 +514,8 @@ export class WorkspaceResolver {
|
||||
async getInviteInfo(
|
||||
@CurrentUser() user: UserType | undefined,
|
||||
@Args('inviteId') inviteId: string
|
||||
) {
|
||||
const { workspaceId, inviteeUserId } =
|
||||
): Promise<InvitationType> {
|
||||
const { workspaceId, inviteeUserId, isLink } =
|
||||
await this.workspaceService.getInviteInfo(inviteId);
|
||||
const workspace = await this.workspaceService.getWorkspaceInfo(workspaceId);
|
||||
const owner = await this.models.workspaceUser.getOwner(workspaceId);
|
||||
@@ -523,8 +523,21 @@ export class WorkspaceResolver {
|
||||
const inviteeId = inviteeUserId || user?.id;
|
||||
if (!inviteeId) throw new UserNotFound();
|
||||
const invitee = await this.models.user.getWorkspaceUser(inviteeId);
|
||||
if (!invitee) throw new UserNotFound();
|
||||
|
||||
return { workspace, user: owner, invitee };
|
||||
let status: WorkspaceMemberStatus | undefined;
|
||||
if (isLink) {
|
||||
const invitation = await this.models.workspaceUser.get(
|
||||
workspaceId,
|
||||
inviteeId
|
||||
);
|
||||
status = invitation?.status;
|
||||
} else {
|
||||
const invitation = await this.models.workspaceUser.getById(inviteId);
|
||||
status = invitation?.status;
|
||||
}
|
||||
|
||||
return { workspace, user: owner, invitee, status };
|
||||
}
|
||||
|
||||
@Mutation(() => Boolean)
|
||||
|
||||
@@ -12,7 +12,7 @@ import { WorkspaceMemberStatus } from '@prisma/client';
|
||||
import { SafeIntResolver } from 'graphql-scalars';
|
||||
|
||||
import { DocRole, WorkspaceRole } from '../permission';
|
||||
import { UserType } from '../user/types';
|
||||
import { UserType, WorkspaceUserType } from '../user/types';
|
||||
|
||||
registerEnumType(WorkspaceRole, {
|
||||
name: 'WorkspaceRole',
|
||||
@@ -120,9 +120,14 @@ export class InvitationType {
|
||||
@Field({ description: 'Workspace information' })
|
||||
workspace!: InvitationWorkspaceType;
|
||||
@Field({ description: 'User information' })
|
||||
user!: UserType;
|
||||
user!: WorkspaceUserType;
|
||||
@Field({ description: 'Invitee information' })
|
||||
invitee!: UserType;
|
||||
invitee!: WorkspaceUserType;
|
||||
@Field(() => WorkspaceMemberStatus, {
|
||||
description: 'Invitation status in workspace',
|
||||
nullable: true,
|
||||
})
|
||||
status?: WorkspaceMemberStatus;
|
||||
}
|
||||
|
||||
@InputType()
|
||||
|
||||
Reference in New Issue
Block a user