refactor(core): adjust merbers module apis (#9695)

This commit is contained in:
EYHN
2025-01-17 02:50:02 +00:00
parent 64335b9e0c
commit ca9c94861a
8 changed files with 215 additions and 248 deletions

View File

@@ -1,8 +1,4 @@
import { DebugLogger } from '@affine/debug';
import type {
Permission,
WorkspaceInviteLinkExpireTime,
} from '@affine/graphql';
import {
backoffRetry,
catchErrorInto,
@@ -75,65 +71,6 @@ export class WorkspacePermission extends Entity {
})
);
async inviteMember(email: string, sendInviteMail?: boolean) {
return await this.store.inviteMember(
this.workspaceService.workspace.id,
email,
sendInviteMail
);
}
async inviteMembers(emails: string[], sendInviteMail?: boolean) {
return await this.store.inviteBatch(
this.workspaceService.workspace.id,
emails,
sendInviteMail
);
}
async generateInviteLink(expireTime: WorkspaceInviteLinkExpireTime) {
return await this.store.generateInviteLink(
this.workspaceService.workspace.id,
expireTime
);
}
async revokeInviteLink() {
return await this.store.revokeInviteLink(
this.workspaceService.workspace.id
);
}
async revokeMember(userId: string) {
return await this.store.revokeMemberPermission(
this.workspaceService.workspace.id,
userId
);
}
async acceptInvite(inviteId: string, sendAcceptMail?: boolean) {
return await this.store.acceptInvite(
this.workspaceService.workspace.id,
inviteId,
sendAcceptMail
);
}
async approveMember(userId: string) {
return await this.store.approveMember(
this.workspaceService.workspace.id,
userId
);
}
async adjustMemberPermission(userId: string, permission: Permission) {
return await this.store.adjustMemberPermission(
this.workspaceService.workspace.id,
userId,
permission
);
}
override dispose(): void {
this.revalidate.unsubscribe();
}

View File

@@ -27,7 +27,7 @@ export function configurePermissionsModule(framework: Framework) {
])
.store(WorkspacePermissionStore, [WorkspaceServerService])
.entity(WorkspacePermission, [WorkspaceService, WorkspacePermissionStore])
.service(WorkspaceMembersService)
.service(WorkspaceMembersService, [WorkspaceMembersStore, WorkspaceService])
.store(WorkspaceMembersStore, [WorkspaceServerService])
.entity(WorkspaceMembers, [WorkspaceMembersStore, WorkspaceService]);
}

View File

@@ -1,7 +1,71 @@
import type {
Permission,
WorkspaceInviteLinkExpireTime,
} from '@affine/graphql';
import { Service } from '@toeverything/infra';
import type { WorkspaceService } from '../../workspace';
import { WorkspaceMembers } from '../entities/members';
import type { WorkspaceMembersStore } from '../stores/members';
export class WorkspaceMembersService extends Service {
constructor(
private readonly store: WorkspaceMembersStore,
private readonly workspaceService: WorkspaceService
) {
super();
}
members = this.framework.createEntity(WorkspaceMembers);
async inviteMember(email: string, sendInviteMail?: boolean) {
return await this.store.inviteMember(
this.workspaceService.workspace.id,
email,
sendInviteMail
);
}
async inviteMembers(emails: string[], sendInviteMail?: boolean) {
return await this.store.inviteBatch(
this.workspaceService.workspace.id,
emails,
sendInviteMail
);
}
async generateInviteLink(expireTime: WorkspaceInviteLinkExpireTime) {
return await this.store.generateInviteLink(
this.workspaceService.workspace.id,
expireTime
);
}
async revokeInviteLink() {
return await this.store.revokeInviteLink(
this.workspaceService.workspace.id
);
}
async revokeMember(userId: string) {
return await this.store.revokeMemberPermission(
this.workspaceService.workspace.id,
userId
);
}
async approveMember(userId: string) {
return await this.store.approveMember(
this.workspaceService.workspace.id,
userId
);
}
async adjustMemberPermission(userId: string, permission: Permission) {
return await this.store.adjustMemberPermission(
this.workspaceService.workspace.id,
userId,
permission
);
}
}

View File

@@ -1,4 +1,15 @@
import { getMembersByWorkspaceIdQuery } from '@affine/graphql';
import {
approveWorkspaceTeamMemberMutation,
createInviteLinkMutation,
getMembersByWorkspaceIdQuery,
grantWorkspaceTeamMemberMutation,
inviteByEmailMutation,
inviteByEmailsMutation,
type Permission,
revokeInviteLinkMutation,
revokeMemberPermissionMutation,
type WorkspaceInviteLinkExpireTime,
} from '@affine/graphql';
import { Store } from '@toeverything/infra';
import type { WorkspaceServerService } from '../../cloud';
@@ -31,4 +42,125 @@ export class WorkspaceMembersStore extends Store {
return data.workspace;
}
async inviteMember(
workspaceId: string,
email: string,
sendInviteMail = false
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const invite = await this.workspaceServerService.server.gql({
query: inviteByEmailMutation,
variables: {
workspaceId,
email,
sendInviteMail,
},
});
return invite.invite;
}
async inviteBatch(
workspaceId: string,
emails: string[],
sendInviteMail = false
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const inviteBatch = await this.workspaceServerService.server.gql({
query: inviteByEmailsMutation,
variables: {
workspaceId,
emails,
sendInviteMail,
},
});
return inviteBatch.inviteBatch;
}
async generateInviteLink(
workspaceId: string,
expireTime: WorkspaceInviteLinkExpireTime
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const inviteLink = await this.workspaceServerService.server.gql({
query: createInviteLinkMutation,
variables: {
workspaceId,
expireTime,
},
});
return inviteLink.createInviteLink;
}
async revokeInviteLink(workspaceId: string, signal?: AbortSignal) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const revoke = await this.workspaceServerService.server.gql({
query: revokeInviteLinkMutation,
variables: {
workspaceId,
},
context: { signal },
});
return revoke.revokeInviteLink;
}
async revokeMemberPermission(
workspaceId: string,
userId: string,
signal?: AbortSignal
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const revoke = await this.workspaceServerService.server.gql({
query: revokeMemberPermissionMutation,
variables: {
workspaceId,
userId,
},
context: { signal },
});
return revoke.revoke;
}
async approveMember(workspaceId: string, userId: string) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const member = await this.workspaceServerService.server.gql({
query: approveWorkspaceTeamMemberMutation,
variables: {
workspaceId,
userId,
},
});
return member.approveMember;
}
async adjustMemberPermission(
workspaceId: string,
userId: string,
permission: Permission
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const member = await this.workspaceServerService.server.gql({
query: grantWorkspaceTeamMemberMutation,
variables: {
workspaceId,
userId,
permission,
},
});
return member.grantMember;
}
}

View File

@@ -1,18 +1,5 @@
import type { WorkspaceServerService } from '@affine/core/modules/cloud';
import {
acceptInviteByInviteIdMutation,
approveWorkspaceTeamMemberMutation,
createInviteLinkMutation,
getWorkspaceInfoQuery,
grantWorkspaceTeamMemberMutation,
inviteByEmailMutation,
inviteByEmailsMutation,
leaveWorkspaceMutation,
type Permission,
revokeInviteLinkMutation,
revokeMemberPermissionMutation,
type WorkspaceInviteLinkExpireTime,
} from '@affine/graphql';
import { getWorkspaceInfoQuery, leaveWorkspaceMutation } from '@affine/graphql';
import { Store } from '@toeverything/infra';
export class WorkspacePermissionStore extends Store {
@@ -35,146 +22,6 @@ export class WorkspacePermissionStore extends Store {
return info;
}
async inviteMember(
workspaceId: string,
email: string,
sendInviteMail = false
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const invite = await this.workspaceServerService.server.gql({
query: inviteByEmailMutation,
variables: {
workspaceId,
email,
sendInviteMail,
},
});
return invite.invite;
}
async inviteBatch(
workspaceId: string,
emails: string[],
sendInviteMail = false
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const inviteBatch = await this.workspaceServerService.server.gql({
query: inviteByEmailsMutation,
variables: {
workspaceId,
emails,
sendInviteMail,
},
});
return inviteBatch.inviteBatch;
}
async generateInviteLink(
workspaceId: string,
expireTime: WorkspaceInviteLinkExpireTime
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const inviteLink = await this.workspaceServerService.server.gql({
query: createInviteLinkMutation,
variables: {
workspaceId,
expireTime,
},
});
return inviteLink.createInviteLink;
}
async revokeInviteLink(workspaceId: string, signal?: AbortSignal) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const revoke = await this.workspaceServerService.server.gql({
query: revokeInviteLinkMutation,
variables: {
workspaceId,
},
context: { signal },
});
return revoke.revokeInviteLink;
}
async revokeMemberPermission(
workspaceId: string,
userId: string,
signal?: AbortSignal
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const revoke = await this.workspaceServerService.server.gql({
query: revokeMemberPermissionMutation,
variables: {
workspaceId,
userId,
},
context: { signal },
});
return revoke.revoke;
}
async acceptInvite(
workspaceId: string,
inviteId: string,
sendAcceptMail = false
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const accept = await this.workspaceServerService.server.gql({
query: acceptInviteByInviteIdMutation,
variables: {
workspaceId,
inviteId,
sendAcceptMail,
},
});
return accept.acceptInviteById;
}
async approveMember(workspaceId: string, userId: string) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const member = await this.workspaceServerService.server.gql({
query: approveWorkspaceTeamMemberMutation,
variables: {
workspaceId,
userId,
},
});
return member.approveMember;
}
async adjustMemberPermission(
workspaceId: string,
userId: string,
permission: Permission
) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const member = await this.workspaceServerService.server.gql({
query: grantWorkspaceTeamMemberMutation,
variables: {
workspaceId,
userId,
permission,
},
});
return member.grantMember;
}
/**
* @param workspaceName for send email
*/