feat(server): get recently updated docs (#12861)

close AI-218



#### PR Dependency Tree


* **PR #12861** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Added a "Recently Updated Documents" feature, allowing users to view a
paginated list of the most recently updated documents within a
workspace.
- Document metadata now includes a "title" field for easier
identification.
- **Tests**
- Introduced new end-to-end tests to verify the recently updated
documents query and its pagination behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
fengmk2
2025-06-20 11:35:39 +08:00
committed by GitHub
parent 5623d808bf
commit ad5722f637
7 changed files with 237 additions and 0 deletions
@@ -0,0 +1,62 @@
import { getRecentlyUpdatedDocsQuery } from '@affine/graphql';
import { Mockers } from '../../mocks';
import { app, e2e } from '../test';
e2e('should get recently updated docs', async t => {
const owner = await app.signup();
const workspace = await app.create(Mockers.Workspace, {
owner: { id: owner.id },
});
const docSnapshot1 = await app.create(Mockers.DocSnapshot, {
workspaceId: workspace.id,
user: owner,
});
const doc1 = await app.create(Mockers.DocMeta, {
workspaceId: workspace.id,
docId: docSnapshot1.id,
title: 'doc1',
});
const docSnapshot2 = await app.create(Mockers.DocSnapshot, {
workspaceId: workspace.id,
user: owner,
});
const doc2 = await app.create(Mockers.DocMeta, {
workspaceId: workspace.id,
docId: docSnapshot2.id,
title: 'doc2',
});
const docSnapshot3 = await app.create(Mockers.DocSnapshot, {
workspaceId: workspace.id,
user: owner,
});
const doc3 = await app.create(Mockers.DocMeta, {
workspaceId: workspace.id,
docId: docSnapshot3.id,
title: 'doc3',
});
const {
workspace: { recentlyUpdatedDocs },
} = await app.gql({
query: getRecentlyUpdatedDocsQuery,
variables: {
workspaceId: workspace.id,
pagination: {
first: 10,
},
},
});
t.is(recentlyUpdatedDocs.totalCount, 3);
t.is(recentlyUpdatedDocs.edges[0].node.id, doc3.docId);
t.is(recentlyUpdatedDocs.edges[0].node.title, doc3.title);
t.is(recentlyUpdatedDocs.edges[1].node.id, doc2.docId);
t.is(recentlyUpdatedDocs.edges[1].node.title, doc2.title);
t.is(recentlyUpdatedDocs.edges[2].node.id, doc1.docId);
t.is(recentlyUpdatedDocs.edges[2].node.title, doc1.title);
});