Commit Graph
100 Commits
Author SHA1 Message Date
fengmk2 c525ca24fd test(server): use mocker (#12435)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Tests**
  - Refactored test setup for the database-backed document reader to improve modularity and clarity.
  - Simplified database initialization and cleanup in tests.
  - Updated mocks and assertions to align with the new test structure.
  - Maintained existing test coverage and logic.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-22 04:25:20 +00:00
fengmk2 346c0df800 chore(server): support disable indexer plugin (#12408)
close CLOUD-220

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

## Summary by CodeRabbit

- **New Features**
  - Introduced a new service to handle indexing-related events and scheduled tasks, improving the management of document and workspace indexing.
  - Added support for configuring the indexer feature via the AFFINE_INDEXER_ENABLED environment variable.

- **Bug Fixes**
  - Ensured that indexing and deletion jobs are only enqueued when the indexer feature is enabled.

- **Tests**
  - Added comprehensive tests for the new indexing event service, covering various configuration scenarios.
  - Removed obsolete test related to auto-indexing scheduling.

- **Chores**
  - Updated configuration descriptions and mappings to improve clarity and environment variable support.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 13:19:02 +00:00
fengmk2 abfc994180 chore(server): support elasticsearch apiKey (#12405) 2025-05-21 08:35:51 +00:00
fengmk2 ff15779208 chore(server): add auto index batch size (#12391)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Added a configurable batch size setting for automatic workspace indexing. Users can now adjust how many workspaces are indexed per batch, with a default value of 10 and support for values between 1 and 1000.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-21 08:35:51 +00:00
fengmk2 8e9d50bfe9 chore(server): add prefix to indexer jobId (#12369) 2025-05-20 03:09:23 +00:00
fengmk2 9ad76fe2f6 chore(server): support elasticsearch alias (#12363)
https://www.elastic.co/docs/manage-data/data-store/aliases
2025-05-20 03:09:22 +00:00
fengmk2 cce66f6107 fix(server): add stemmer filter (#12358)
CLOUD-214

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

## Summary by CodeRabbit

- **New Features**
  - Improved search functionality to support stemming, allowing searches for variations of words (e.g., "window", "windows", "design") to return relevant results.
- **Tests**
  - Added new tests to verify that search results correctly highlight and match stemmed word variations in document titles.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-20 03:09:22 +00:00
fengmk2 4e37a1322e feat(nbstore): add cloud indexer storage (#12245)
close AF-2613
2025-05-19 04:39:39 +00:00
fengmk2 a34c3ea200 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 -->
2025-05-19 04:39:38 +00:00
fengmk2 1e7774929c feat(server): filter docs by access role (#12311)
close CLOUD-208

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

- **New Features**
  - Enhanced document access control with batch permission checks, enabling efficient filtering of documents based on user roles and permissions.
  - Added detailed document-level role and permission management for workspace users.
- **Bug Fixes**
  - Improved accuracy in filtering search results to only display documents users have permission to read.
- **Tests**
  - Added comprehensive tests for document-level permission filtering and search result accuracy.
  - Introduced new mock utilities to support permission-related test scenarios.
- **Refactor**
  - Simplified and optimized permission logic for determining user roles and document access.
- **Documentation**
  - Updated type definitions for improved clarity in permission handling.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-19 03:28:22 +00:00
fengmk2 f0c9453459 fix(server): add AFFINE_INDEXER_SEARCH_ENDPOINT to self-host compose.yml (#12324)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Added a `.gitignore` file to prevent the `.env` file in the self-hosted Docker directory from being tracked by Git.

- **New Features**
  - Introduced a new environment variable for the search endpoint in the Docker Compose configuration for improved service connectivity.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-17 12:51:26 +00:00
fengmk2 6a13d69dea chore(server): separate elasticsearch to run independently (#12299)
close CLOUD-217

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

- **New Features**
  - Introduced a dedicated test job for Elasticsearch, running only Elasticsearch-specific tests during CI.
- **Chores**
  - Enhanced server test workflows with explicit setup steps and automated coverage uploads.
  - Improved test suite structure for Elasticsearch provider to enable conditional and asynchronous test execution based on environment variables.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 06:16:06 +00:00
fengmk2 ffb72a4491 chore(server): fix missing indexer service on ci (#12291)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Standardized the naming of the search service to "indexer" in automated test workflows.
  - Ensured the "indexer" service is available in additional test jobs for improved consistency across workflows.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 03:28:19 +00:00
fengmk2 afa984da54 feat(server): handle workspace doc updates (#11937) 2025-05-14 14:52:41 +00:00
fengmk2 6792c3e656 feat(common): add blocksuite reader lib (#11955)
close CLOUD-202
2025-05-14 14:52:41 +00:00
fengmk2 a1bcf77447 feat(server): add cloud indexer with Elasticsearch and Manticoresearch providers (#11835)
close CLOUD-137

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

- **New Features**
  - Introduced advanced workspace-scoped search and aggregation capabilities with support for complex queries, highlights, and pagination.
  - Added pluggable search providers: Elasticsearch and Manticoresearch.
  - New GraphQL queries, schema types, and resolver support for search and aggregation.
  - Enhanced configuration options for search providers in self-hosted and cloud deployments.
  - Added Docker Compose services and environment variables for Elasticsearch and Manticoresearch.
  - Integrated indexer service into deployment and CI workflows.

- **Bug Fixes**
  - Improved error handling with new user-friendly error messages for search provider and indexer issues.

- **Documentation**
  - Updated configuration examples and environment variable references for indexer and search providers.

- **Tests**
  - Added extensive end-to-end and provider-specific tests covering indexing, searching, aggregation, deletion, and error cases.
  - Included snapshot tests and test fixtures for search providers.

- **Chores**
  - Updated deployment scripts, Helm charts, and Kubernetes manifests to include indexer-related environment variables and secrets.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-14 14:52:41 +00:00
fengmk2 62fe906f04 chore(server): add server genconfig git status check (#12202) 2025-05-12 02:42:00 +00:00
fengmk2 f9e003d220 chore(server): typo fix on cpu.doc (#12189)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **Bug Fixes**
  - Corrected CPU resource allocation for the documentation service to ensure accurate deployment configuration.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-08 08:08:13 +00:00
fengmk2 8940151ffe chore(server): dont use default export on @prisma/instrumentation (#12148)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->

## Summary by CodeRabbit

- **Chores**
  - Updated a backend dependency to the latest version to ensure continued compatibility and improvements. No user-facing changes.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-06 10:21:35 +00:00
fengmk2 ff133d1267 refactor(server): reduce server logs (#11931)
close CLOUD-201
2025-04-23 11:41:48 +00:00
fengmk2 a35a4ccf48 test(server): don't mock event bus on e2e (#11841) 2025-04-21 06:51:14 +00:00
fengmk2 70a318f1c4 fix(server): auto-accept pending invitations by link in team workspace (#11433)
close CLOUD-192
2025-04-03 07:19:14 +00:00
fengmk2 a5eb1b9985 fix(server): correct notification pagination by using 'lt' instead of 'gt' for createdAt (#11430) 2025-04-03 01:25:35 +00:00
fengmk2 f3e9b4bbf0 feat(server): search workspace users support case insensitive (#11422)
close CLOUD-193
2025-04-02 14:33:07 +00:00
fengmk2 c8392d0cbe fix(server): auto-accept pending invitations by link (#11409)
close CLOUD-192
2025-04-02 13:24:03 +00:00
fengmk2 432634c5a3 feat(server): enable job queue log (#11390) 2025-04-02 09:34:13 +00:00
fengmk2 e125b2a7c0 fix(server): should use error instance stack (#11392) 2025-04-02 07:12:18 +00:00
fengmk2 69f393fe2f refactor(server): change invitation request link to workspace members tab (#11191)
close CLOUD-184
2025-03-28 05:27:20 +00:00
fengmk2 bfa7e9a007 ci: install @types/affine__env on server build (#11252) 2025-03-28 05:01:47 +00:00
fengmk2 a189421360 ci: increase cloud E2E test shards from 3 to 6 (#11236)
Before 10m

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/e9698e8f-2220-475e-a6e3-21cca48398e3.png)

After 8m

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/e6e63736-dd03-4ee8-9ddc-652f71f15067.png)
2025-03-27 09:29:40 +00:00
fengmk2 4d6115bb00 fix(server): move avatar attachment before setting cid reference (#11231)
close CLOUD-187
2025-03-27 08:00:18 +00:00
fengmk2 5fcdc99f23 feat(server): add team user with team workspace in dev environment (#11228)
close CLOUD-186
2025-03-27 07:26:28 +00:00
fengmk2 8f124c5070 fix(server): use client doc title when server title is empty (#11210)
close CLOUD-185
2025-03-27 00:41:23 +00:00
fengmk2 07e098aef1 fix(server): send invitation review notification (#11203) 2025-03-26 09:44:03 +00:00
fengmk2 ad4e1ed7de fix(server): set default doc title to Untitled on email (#11152)
close CLOUD-181
2025-03-25 12:58:43 +00:00
fengmk2 a8c86c5ede refactor(server): rename settings to user-settings (#11161) 2025-03-25 08:47:27 +00:00
fengmk2 4d15c32242 feat(server): add invitation status to getInviteInfo response (#11158)
close CLOUD-182
2025-03-25 06:51:26 +00:00
fengmk2 9bad6fa12d feat(server): send review request when team member count over quota limit (#11126) 2025-03-25 06:51:26 +00:00
fengmk2 83a2e3bcba test(server): use new e2e (#11056) 2025-03-24 04:36:49 +00:00
fengmk2 cb71b292fc fix(server): return early from license health check when quantity matches (#11111) 2025-03-24 04:21:59 +00:00
fengmk2 b0871331de test(server): add mock mail and queue tests (#11061) 2025-03-24 03:32:25 +00:00
fengmk2 d62c8642fb test(server): omit owner before create (#11059) 2025-03-24 03:32:24 +00:00
fengmk2 28f8639aff feat(server): send invitation review notification (#10418) 2025-03-24 03:32:24 +00:00
fengmk2 ed888d6507 feat(server): send invitation accepted notification (#10421) 2025-03-24 02:27:24 +00:00
fengmk2 d7b3dc683b feat(server): send invitation notification (#10219)
close PD-2307 CLOUD-150
2025-03-24 02:27:23 +00:00
fengmk2 55a60906a5 test(server): add MockJobQueue (#11032) 2025-03-21 04:08:29 +00:00
fengmk2 f6132ad818 test(server): increase test parallelization from 3 to 8 nodes (#11043) 2025-03-21 01:07:22 +00:00
fengmk2 42745f059d feat(server): send mention email (#10859)
close CLOUD-170
2025-03-20 09:26:42 +00:00
fengmk2 89a0880bb3 feat(server): record pending updates count to metrics (#10991)
close CLOUD-161
2025-03-19 15:10:25 +00:00
fengmk2 ddd6c97b08 refactor(server): improve workspace content retrieval from database (#10964) 2025-03-19 12:16:53 +00:00
fengmk2 d00fd8316d refactor(server): remove unused randomDoc method (#10985)
close CLOUD-177
2025-03-19 06:45:22 +00:00
fengmk2 4fc3e92205 feat(server): separate storage quota limit and blob size limit (#10957)
close CLOUD-171
2025-03-18 09:28:50 +00:00
fengmk2 86c4e0705f fix(server): convert 4xx status HttpError to UserFriendlyError (#10956) 2025-03-18 09:28:50 +00:00
fengmk2 4a3180ee04 feat(server): display date in yyyy-MM-dd format on email (#10916) 2025-03-18 01:00:14 +00:00
fengmk2 3f0981a6fa feat(server): add settings resolver (#10797)
close CLOUD-166
2025-03-18 00:41:21 +00:00
fengmk2 5dcbae6f86 feat(server): add settings model (#10755)
close CLOUD-166
2025-03-18 00:41:21 +00:00
fengmk2 114e89961f fix(server): add mode property on mention doc input (#10853) 2025-03-14 08:23:28 +00:00
fengmk2 f61b166e61 fix(server): handle graphql bad input error (#10854) 2025-03-14 07:37:29 +00:00
fengmk2 8880cef20b test(infra): add check job to verify committed changes (#10829) 2025-03-14 02:58:27 +00:00
fengmk2 9518ebee95 chore(server): add pro user for testing with extended workspace member limit (#10827) 2025-03-13 09:11:59 +00:00
fengmk2 aa3bfb0a05 fix(server): only return workspace user fields (#10700)
close CLOUD-164
2025-03-12 10:35:00 +00:00
fengmk2 3417cc5dc1 fix(core): handle Content-Type with charset in fetch error handling (#10777) 2025-03-12 09:56:41 +00:00
fengmk2 fd3ce431fe fix(core): assert app schema url on open-app (#10687) 2025-03-12 08:42:35 +00:00
fengmk2 43712839fd refactor(server): improve magic link login flow (#10736) 2025-03-12 15:27:36 +08:00
fengmk2 867ae7933f refactor(server): improve oauth login flow (#10648)
close CLOUD-145
2025-03-12 15:27:36 +08:00
fengmk2 4446100150 fix(server): correct "Administrators" typo in permissions (#10690) 2025-03-07 07:13:36 +00:00
fengmk2 289d3cd20e feat(server): get public user by id (#10434)
close CLOUD-160
2025-03-06 15:25:06 +00:00
fengmk2 7302c4f954 feat(server): notification system (#10053)
closes CLOUD-52
2025-03-06 15:25:05 +00:00
fengmk2 81694a1144 feat(server): add workspace name and avatarKey to database (#10513)
close CLOUD-153
2025-03-06 15:25:05 +00:00
fengmk2 c76b2504fe feat(server): add doc title and summary to database (#10505)
close CLOUD-152
2025-03-06 14:27:42 +00:00
fengmk2 d2b45783ea feat(server): use zod parse to impl input validation (#10566)
close CLOUD-124
2025-03-06 10:40:01 +00:00
fengmk2 43ded6aa38 feat(server): add blocked state to workspace docs (#10585)
close CLOUD-162
2025-03-05 12:49:33 +00:00
fengmk2 70a0337ea3 refactor(server): use DocModel to access doc meta (#10593) 2025-03-05 12:10:28 +00:00
fengmk2 687c26304a refactor(server): split HistoryModel from DocModel (#10604) 2025-03-05 12:10:28 +00:00
fengmk2 b247b8e26c refactor(server): merge PageModel into DocModel (#10592) 2025-03-05 19:49:14 +08:00
fengmk2 b88113a2d1 feat(server): add invalid oauth callback code error handling (#10603)
close CLOUD-130
2025-03-05 06:16:59 +00:00
fengmk2 3d2c4fe007 feat(server): add user existence check and optimize permission queries (#10402) 2025-03-05 01:49:33 +00:00
fengmk2 0e24ea3ac5 fix(server): throw s3 store error directly (#10572)
close CLOUD-154
2025-03-03 07:09:54 +00:00
fengmk2 0e26498e6a refactor(server): reduce server resource requests (#10568)
close CLOUD-149
2025-03-03 06:33:07 +00:00
fengmk2 b59f60c60b feat(server): add workspace avatar support in doc reader (#10390) 2025-02-28 12:41:26 +00:00
fengmk2 7f833f8c15 fix(server): don't sync blob meta on workspace deleted event (#10334)
close CLOUD-128
2025-02-21 04:11:57 +00:00
fengmk2 0ff7c5f897 fix(server): gen new request id on websocket event request (#10330)
After

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/22431b9a-30e8-48a3-8db6-de377671f9b7.png)
2025-02-21 02:00:58 +00:00
fengmk2 b4097aef8e refactor(server): move bin content parser to doc reader (#10302) 2025-02-20 07:19:48 +00:00
fengmk2 ff0ce1a962 fix(server): remove job on complete (#10305) 2025-02-20 04:39:05 +00:00
fengmk2 e0b2b2b33c fix(server): convert error type to lower case (#10301) 2025-02-20 03:04:21 +00:00
fengmk2 320875425c fix: replace all CRLF in email token (#10271) 2025-02-19 04:07:43 +00:00
fengmk2 bae1a7f2ac fix(server): log error on gcloud (#10235) 2025-02-18 03:21:31 +00:00
fengmk2 57213781a8 refactor(server): dont convert graphql bad request into internal server error (#10203) 2025-02-17 06:17:00 +00:00
fengmk2 3ff721abe8 refactor(server): auto print full stack on logger.error (#10161) 2025-02-13 11:49:41 +00:00
fengmk2 0ce4cc8609 refactor(server): add debug info on global exception log (#10118)
before

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/4fc84ed7-a3a3-452b-85d0-240847793c5c.png)

after

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/60d9342c-6bf2-4ed0-817a-8e4eba3e0832.png)
2025-02-13 02:20:02 +00:00
fengmk2 db8557eafb fix(server): get doc diff from doc service (#10067)
close CLOUD-121

avoid sync server to merge doc updates

before

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/054bf532-845d-427b-8cc4-f29e56f65720.png)

after

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/fafe9244-c521-4af0-b131-5a6092eb5a16.png)
2025-02-12 10:20:23 +00:00
fengmk2 d970bd041c test(server): avoid db deadlock on unittest (#10104)
https://github.com/toeverything/AFFiNE/runs/37010719190

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/8df7dc1f-c549-46f2-9aca-f93d750b1a0b.png)
2025-02-12 03:48:21 +00:00
fengmk2 7840e0f900 fix(server): don't set the wrong context on logger (#10088)
![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/c84ca60c-2837-43ba-a32c-0db1a87a5062.png)
2025-02-11 10:12:56 +00:00
fengmk2 5a63bc0e53 feat(server): wrong context setting on doc publish (#10080)
context should be `WorkspaceDocResolver`

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/0826ced9-4955-45a4-b5e7-944ae898d45e.png)
2025-02-11 06:16:51 +00:00
fengmk2 c8c7b7b65c feat(server): use x-cloud-trace-context instead of x-rpc-trace-id (#10068)
x-cloud-trace-context will be overwritten by lb,
and cannot be fake from internet access request

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/6d3c47c1-ac9e-4bc9-a7f1-2be8f56dbf69.png)
2025-02-11 03:50:23 +00:00
fengmk2 7214ef9fbc fix(server): only handle doc.snapshot.updated event on renderer (#10062)
before

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/0345e2e0-85fb-45a2-a917-be0cb1731907.png)

after

![image.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/hTwOityLamd4hitrae7M/fd49d1b4-2970-4b86-aca1-4c40da3d0988.png)
2025-02-11 00:18:08 +00:00
fengmk2 67b6c28d67 refactor(server): use user model on oauth plugin (#10031)
close CLOUD-117
2025-02-10 20:26:34 +08:00
fengmk2 0757f29f83 refactor(server): use doc model on doc cron job (#10057) 2025-02-10 09:52:44 +00:00
fengmk2 09b5eb60eb refactor(server): handle ConnectedAccount on user model (#10030) 2025-02-09 08:31:02 +00:00
fengmk2 e5d1cd9ea2 feat(server): use doc service (#9967)
close CLOUD-94
2025-02-08 05:27:56 +00:00