mirror of
https://github.com/toeverything/AFFiNE.git
synced 2025-10-26 11:37:06 +00:00
feat(server): put current user in first on the list
This commit is contained in:
parent
c4cf5799d4
commit
5638c2d8e5
@ -226,9 +226,23 @@ e2e('should support pagination for member', async t => {
|
||||
take: 2,
|
||||
},
|
||||
});
|
||||
t.is(result.workspace.members[0].id, owner.id);
|
||||
t.is(result.workspace.memberCount, 3);
|
||||
t.is(result.workspace.members.length, 2);
|
||||
|
||||
await app.login(u1);
|
||||
result = await app.gql({
|
||||
query: getMembersByWorkspaceIdQuery,
|
||||
variables: {
|
||||
workspaceId: workspace.id,
|
||||
skip: 0,
|
||||
take: 5,
|
||||
},
|
||||
});
|
||||
t.is(result.workspace.members[0].id, u1.id);
|
||||
t.is(result.workspace.memberCount, 3);
|
||||
t.is(result.workspace.members.length, 3);
|
||||
|
||||
result = await app.gql({
|
||||
query: getMembersByWorkspaceIdQuery,
|
||||
variables: {
|
||||
|
||||
@ -117,10 +117,14 @@ export class WorkspaceMemberResolver {
|
||||
status,
|
||||
}));
|
||||
} else {
|
||||
const [list] = await this.models.workspaceUser.paginate(workspace.id, {
|
||||
offset: skip ?? 0,
|
||||
first: take ?? 8,
|
||||
});
|
||||
const [list] = await this.models.workspaceUser.paginate(
|
||||
workspace.id,
|
||||
{
|
||||
offset: skip ?? 0,
|
||||
first: take ?? 8,
|
||||
},
|
||||
user.id
|
||||
);
|
||||
|
||||
return list.map(({ id, status, type, user }) => ({
|
||||
...user,
|
||||
|
||||
@ -302,7 +302,50 @@ export class WorkspaceUserModel extends BaseModel {
|
||||
});
|
||||
}
|
||||
|
||||
async paginate(workspaceId: string, pagination: PaginationInput) {
|
||||
async paginate(
|
||||
workspaceId: string,
|
||||
pagination: PaginationInput,
|
||||
priorityUserId?: string
|
||||
) {
|
||||
// If priorityUserId is provided and we're on the first page, handle priority user separately
|
||||
if (priorityUserId && pagination.offset === 0 && !pagination.after) {
|
||||
const priorityUser = await this.db.workspaceUserRole.findFirst({
|
||||
include: {
|
||||
user: {
|
||||
select: workspaceUserSelect,
|
||||
},
|
||||
},
|
||||
where: {
|
||||
workspaceId,
|
||||
userId: priorityUserId,
|
||||
},
|
||||
});
|
||||
|
||||
const remainingLimit = pagination.first - (priorityUser ? 1 : 0);
|
||||
|
||||
const otherUsers = await this.db.workspaceUserRole.findMany({
|
||||
include: {
|
||||
user: {
|
||||
select: workspaceUserSelect,
|
||||
},
|
||||
},
|
||||
where: {
|
||||
workspaceId,
|
||||
userId: priorityUser ? { not: priorityUserId } : undefined,
|
||||
},
|
||||
orderBy: {
|
||||
createdAt: 'asc',
|
||||
},
|
||||
take: remainingLimit,
|
||||
skip: 0,
|
||||
});
|
||||
|
||||
const users = priorityUser ? [priorityUser, ...otherUsers] : otherUsers;
|
||||
const total = await this.count(workspaceId);
|
||||
|
||||
return [users, total] as const;
|
||||
}
|
||||
|
||||
return await Promise.all([
|
||||
this.db.workspaceUserRole.findMany({
|
||||
include: {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user