mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-14 21:27:20 +00:00
@@ -13,4 +13,4 @@ import { UserManagementResolver, UserResolver } from './resolver';
|
||||
})
|
||||
export class UserModule {}
|
||||
|
||||
export { PublicUserType, UserType } from './types';
|
||||
export { PublicUserType, UserType, WorkspaceUserType } from './types';
|
||||
|
||||
@@ -27,6 +27,7 @@ import { validators } from '../utils/validators';
|
||||
import {
|
||||
DeleteAccount,
|
||||
ManageUserInput,
|
||||
PublicUserType,
|
||||
RemoveAvatar,
|
||||
UpdateUserInput,
|
||||
UserOrLimitedUser,
|
||||
@@ -70,6 +71,19 @@ export class UserResolver {
|
||||
};
|
||||
}
|
||||
|
||||
@Throttle('strict')
|
||||
@Query(() => PublicUserType, {
|
||||
name: 'publicUserById',
|
||||
description: 'Get public user by id',
|
||||
nullable: true,
|
||||
})
|
||||
@Public()
|
||||
async getPublicUserById(
|
||||
@Args('id', { type: () => String }) id: string
|
||||
): Promise<PublicUserType | null> {
|
||||
return await this.models.user.getPublicUser(id);
|
||||
}
|
||||
|
||||
@Mutation(() => UserType, {
|
||||
name: 'uploadAvatar',
|
||||
description: 'Upload user avatar',
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
} from '@nestjs/graphql';
|
||||
import type { User } from '@prisma/client';
|
||||
|
||||
import { PublicUser } from '../../models';
|
||||
import { PublicUser, WorkspaceUser } from '../../models';
|
||||
import { type CurrentUser } from '../auth/session';
|
||||
|
||||
@ObjectType()
|
||||
@@ -51,6 +51,18 @@ export class PublicUserType implements PublicUser {
|
||||
@Field()
|
||||
name!: string;
|
||||
|
||||
@Field(() => String, { nullable: true })
|
||||
avatarUrl!: string | null;
|
||||
}
|
||||
|
||||
@ObjectType()
|
||||
export class WorkspaceUserType implements WorkspaceUser {
|
||||
@Field()
|
||||
id!: string;
|
||||
|
||||
@Field()
|
||||
name!: string;
|
||||
|
||||
@Field()
|
||||
email!: string;
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ export class WorkspaceEvents {
|
||||
userId,
|
||||
workspaceId,
|
||||
}: Events['workspace.members.requestDeclined']) {
|
||||
const user = await this.models.user.getPublicUser(userId);
|
||||
const user = await this.models.user.getWorkspaceUser(userId);
|
||||
// send decline mail
|
||||
await this.workspaceService.sendReviewDeclinedEmail(
|
||||
user?.email,
|
||||
@@ -60,8 +60,8 @@ export class WorkspaceEvents {
|
||||
to,
|
||||
}: Events['workspace.owner.changed']) {
|
||||
// send ownership transferred mail
|
||||
const fromUser = await this.models.user.getPublicUser(from);
|
||||
const toUser = await this.models.user.getPublicUser(to);
|
||||
const fromUser = await this.models.user.getWorkspaceUser(from);
|
||||
const toUser = await this.models.user.getWorkspaceUser(to);
|
||||
|
||||
if (fromUser) {
|
||||
await this.workspaceService.sendOwnershipTransferredEmail(
|
||||
|
||||
@@ -35,7 +35,7 @@ import {
|
||||
DocAction,
|
||||
DocRole,
|
||||
} from '../../permission';
|
||||
import { PublicUserType } from '../../user';
|
||||
import { WorkspaceUserType } from '../../user';
|
||||
import { WorkspaceType } from '../types';
|
||||
import {
|
||||
DotToUnderline,
|
||||
@@ -124,8 +124,8 @@ class GrantedDocUserType {
|
||||
@Field(() => DocRole, { name: 'role' })
|
||||
type!: DocRole;
|
||||
|
||||
@Field(() => PublicUserType)
|
||||
user!: PublicUserType;
|
||||
@Field(() => WorkspaceUserType)
|
||||
user!: WorkspaceUserType;
|
||||
}
|
||||
|
||||
@ObjectType()
|
||||
@@ -391,16 +391,16 @@ export class DocResolver {
|
||||
pagination
|
||||
);
|
||||
|
||||
const publicUsers = await this.models.user.getPublicUsers(
|
||||
const workspaceUsers = await this.models.user.getWorkspaceUsers(
|
||||
permissions.map(p => p.userId)
|
||||
);
|
||||
|
||||
const publicUsersMap = new Map(publicUsers.map(pu => [pu.id, pu]));
|
||||
const workspaceUsersMap = new Map(workspaceUsers.map(wu => [wu.id, wu]));
|
||||
|
||||
return paginate(
|
||||
permissions.map(p => ({
|
||||
...p,
|
||||
user: publicUsersMap.get(p.userId) as PublicUserType,
|
||||
user: workspaceUsersMap.get(p.userId) as WorkspaceUserType,
|
||||
})),
|
||||
'createdAt',
|
||||
pagination,
|
||||
|
||||
@@ -86,7 +86,7 @@ export class WorkspaceService {
|
||||
return;
|
||||
}
|
||||
const workspace = await this.getWorkspaceInfo(workspaceId);
|
||||
const invitee = await this.models.user.getPublicUser(inviteeUserId);
|
||||
const invitee = await this.models.user.getWorkspaceUser(inviteeUserId);
|
||||
if (!invitee) {
|
||||
this.logger.error(
|
||||
`Invitee user not found in workspace: ${workspaceId}, userId: ${inviteeUserId}`
|
||||
@@ -105,10 +105,10 @@ export class WorkspaceService {
|
||||
await this.getInviteInfo(inviteId);
|
||||
const workspace = await this.getWorkspaceInfo(workspaceId);
|
||||
const invitee = inviteeUserId
|
||||
? await this.models.user.getPublicUser(inviteeUserId)
|
||||
? await this.models.user.getWorkspaceUser(inviteeUserId)
|
||||
: null;
|
||||
const inviter = inviterUserId
|
||||
? await this.models.user.getPublicUser(inviterUserId)
|
||||
? await this.models.user.getWorkspaceUser(inviterUserId)
|
||||
: await this.models.workspaceUser.getOwner(workspaceId);
|
||||
|
||||
if (!inviter || !invitee) {
|
||||
@@ -173,7 +173,7 @@ export class WorkspaceService {
|
||||
return;
|
||||
}
|
||||
|
||||
const invitee = await this.models.user.getPublicUser(inviteeUserId);
|
||||
const invitee = await this.models.user.getWorkspaceUser(inviteeUserId);
|
||||
if (!invitee) {
|
||||
this.logger.error(
|
||||
`Invitee user not found for inviteId: ${inviteId}, userId: ${inviteeUserId}`
|
||||
@@ -220,7 +220,7 @@ export class WorkspaceService {
|
||||
userId: string,
|
||||
ws: { id: string; role: WorkspaceRole }
|
||||
) {
|
||||
const user = await this.models.user.getPublicUser(userId);
|
||||
const user = await this.models.user.getWorkspaceUser(userId);
|
||||
if (!user) throw new UserNotFound();
|
||||
|
||||
const workspace = await this.getWorkspaceInfo(ws.id);
|
||||
|
||||
@@ -533,7 +533,7 @@ export class WorkspaceResolver {
|
||||
|
||||
const inviteeId = inviteeUserId || user?.id;
|
||||
if (!inviteeId) throw new UserNotFound();
|
||||
const invitee = await this.models.user.getPublicUser(inviteeId);
|
||||
const invitee = await this.models.user.getWorkspaceUser(inviteeId);
|
||||
|
||||
return { workspace, user: owner, invitee };
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user