feat(server): auto index all workspaces to indexer (#12205)

close CLOUD-207

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

- **New Features**
  - Introduced automated periodic indexing of workspaces with a new job type and a scheduled cron job running every 30 seconds.
  - Added a unique sequential identifier (`sid`) and an "indexed" flag to workspaces to track indexing status.
- **Improvements**
  - Enhanced workspace indexing to handle missing workspaces and snapshots distinctly and selectively index documents.
  - Added ability to query workspaces after a given identifier with result limits.
- **Bug Fixes**
  - Improved error handling and logging during workspace indexing operations.
- **Tests**
  - Expanded test coverage for workspace indexing and auto-indexing, including scheduling and edge cases.
- **Chores**
  - Updated data models and schema to support new workspace fields and indexing features.
  - Enhanced mock data utilities to allow custom timestamps.
  - Improved type safety and flexibility in document snapshot retrieval.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
fengmk2
2025-05-19 04:39:38 +00:00
parent 34686f3d85
commit a34c3ea200
8 changed files with 211 additions and 13 deletions
+8 -3
View File
@@ -171,15 +171,20 @@ export class DocModel extends BaseModel {
};
}
async getSnapshot(workspaceId: string, docId: string) {
return await this.db.snapshot.findUnique({
async getSnapshot<Select extends Prisma.SnapshotSelect>(
workspaceId: string,
docId: string,
options?: { select?: Select }
) {
return (await this.db.snapshot.findUnique({
where: {
workspaceId_id: {
workspaceId,
id: docId,
},
},
});
select: options?.select,
})) as Prisma.SnapshotGetPayload<{ select: Select }> | null;
}
async getAuthors(workspaceId: string, docId: string) {