Skip to content

Conversation

@sw34
Copy link
Contributor

@sw34 sw34 commented Sep 25, 2025

Implements sparse fieldsets as defined by https://jsonapi.org/format/#fetching-sparse-fieldsets

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Sep 25, 2025

Caution

Review failed

The pull request is closed.

📝 Walkthrough

Walkthrough

Adds sparse fieldset (partial-field) selection to REST read operations. Implements buildPartialSelect, integrates it into single, related, relationship, and collection reads, merges with includes, validates duplicated fields parameters, and updates serialization for to-one/to-many relations. Adds comprehensive tests covering fields, includes, filtering, sorting, and pagination.

Changes

Cohort / File(s) Summary
REST handler: partial-field selection integration
packages/server/src/api/rest/index.ts
Introduces buildPartialSelect(type, query); threads partial selects into args.select/args.include across single, related, relationship, and collection reads; merges partial selects with includes; updates buildRelationSelect signature to accept query; validates duplicated fields arrays; adjusts serialization for to-one/to-many relations to honor partial selects.
Tests: sparse fieldsets and read behaviors
packages/server/tests/api/rest-partial.test.ts
Adds end-to-end tests for fields[...], include, filtering, sorting, pagination on User/Post; verifies selective fields on primary and included resources; checks collection vs single resource responses and structure.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  participant C as Client
  participant H as REST Handler
  participant PS as buildPartialSelect
  participant PR as Prisma
  participant S as Serializer

  C->>H: GET /:type[?fields[type]=...&include=...]
  H->>PS: compute partial select for type and included types
  alt duplicated fields parameter
    PS-->>H: Error { code: duplicatedFieldsParameter }
    H-->>C: 400 Bad Request
  else valid
    PS-->>H: select maps (type -> select)
    H->>H: merge select with include for relations
    H->>PR: findUnique/findMany(args.select/include)
    PR-->>H: data
    H->>S: serialize with partial selects (to-one/to-many)
    S-->>H: JSON:API payload
    H-->>C: 200 OK
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • ymc9
✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f8847f8 and f92fea4.

📒 Files selected for processing (2)
  • packages/server/src/api/rest/index.ts (12 hunks)
  • packages/server/tests/api/rest-partial.test.ts (1 hunks)

Tip

👮 Agentic pre-merge checks are now available in preview!

Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.

  • Built-in checks – Quickly apply ready-made checks to enforce title conventions, require pull request descriptions that follow templates, validate linked issues for compliance, and more.
  • Custom agentic checks – Define your own rules using CodeRabbit’s advanced agentic capabilities to enforce organization-specific policies and workflows. For example, you can instruct CodeRabbit’s agent to verify that API documentation is updated whenever API schema files are modified in a PR. Note: Upto 5 custom checks are currently allowed during the preview period. Pricing for this feature will be announced in a few weeks.

Please see the documentation for more information.

Example:

reviews:
  pre_merge_checks:
    custom_checks:
      - name: "Undocumented Breaking Changes"
        mode: "warning"
        instructions: |
          Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).

Please share your feedback with us on this Discord post.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@sw34 sw34 closed this Sep 25, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant