Skip to content

[Backend APIs] Implement Summary Suggestion GET/PATCH CRUD API with OCC Version Token Enforcement - #6672

Open
jcscottiii wants to merge 1 commit into
jcscottiii/pr7-releasenotes-apifrom
jcscottiii/pr8-summary-suggestions-crud
Open

[Backend APIs] Implement Summary Suggestion GET/PATCH CRUD API with OCC Version Token Enforcement#6672
jcscottiii wants to merge 1 commit into
jcscottiii/pr7-releasenotes-apifrom
jcscottiii/pr8-summary-suggestions-crud

Conversation

@jcscottiii

@jcscottiii jcscottiii commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

[Backend APIs] Implement Summary Suggestion GET/PATCH CRUD API with OCC Version Token Enforcement

Summary

Implements GET and PATCH /api/v0/summary-suggestions/<int:feature_id> for retrieving and updating AI summary suggestions, progress steps timelines, and editorial access levels.

Enforces Optimistic Concurrency Control (OCC) via version_token during PATCH operations to prevent concurrent edit overwrites. Validates string status updates against SummarySuggestionStatus enums and checks feature edit permissions.

Key Changes

  • Controller (api/summary_suggestion_api.py): Adds SummarySuggestionAPI handling do_get and do_patch. Leverages repository helpers self.get_specified_feature(**kwargs) for feature retrieval & view authorization, and self.get_int_param for OCC version_token extraction. Returns dynamically computed access_level (CAN_EDIT vs READ_ONLY, evaluated per request based on user permissions rather than stored in Datastore) and orders progress steps timeline by start_timestamp. Validates OCC version_token matching (HTTP 409 Conflict on mismatch) and assigns updated UTC timestamps.
  • Converters (api/converters.py): Defines OpenAPISummarySuggestionAccessLevel enum and SUMMARY_SUGGESTION_ACCESS_LEVEL_TO_API mapping proxy (converting boolean edit permissions directly to API response strings), verified via bidirectional OpenAPI schema parity unit tests.
  • Route (main.py): Registers GET and PATCH /api/v0/summary-suggestions/<int:feature_id>.
  • Testing (api/summary_suggestion_api_test.py, api/converters_test.py): Added SummarySuggestionAPITest suite verifying read-only and editable GET access, status updates, OCC version token conflict handling (HTTP 409), invalid enum validation (HTTP 400), and BOLA permission checks (HTTP 403) isolated via @mock.patch.

TAG=agy
CONV=86f63625-bdb5-4d50-ac8d-2f8ca5128ca9

@jcscottiii
jcscottiii force-pushed the jcscottiii/pr8-summary-suggestions-crud branch 5 times, most recently from e7fe33c to 2a08ba6 Compare July 28, 2026 17:10
…CC Version Token Enforcement

## Summary

Implements `GET` and `PATCH /api/v0/summary-suggestions/<int:feature_id>` for retrieving and updating AI summary suggestions, progress steps timelines, and editorial access levels.

Enforces Optimistic Concurrency Control (OCC) via `version_token` during `PATCH` operations to prevent concurrent edit overwrites. Validates string status updates against `SummarySuggestionStatus` enums and checks feature edit permissions.

## Key Changes

- **Controller (`api/summary_suggestion_api.py`)**: Adds `SummarySuggestionAPI` handling `do_get` and `do_patch`. Returns `access_level` (`CAN_EDIT` vs `READ_ONLY`) and orders progress steps timeline by `start_timestamp`. Validates OCC `version_token` matching (HTTP 409 Conflict on mismatch) and assigns updated UTC timestamps.
- **Route (`main.py`)**: Registers `GET` and `PATCH /api/v0/summary-suggestions/<int:feature_id>`.
- **Testing (`api/summary_suggestion_api_test.py`)**: Added `SummarySuggestionAPITest` suite verifying read-only and editable GET access, status updates, OCC version token conflict handling (HTTP 409), invalid enum validation (HTTP 400), and BOLA permission checks (HTTP 403).

TAG=agy
CONV=86f63625-bdb5-4d50-ac8d-2f8ca5128ca9
@jcscottiii
jcscottiii force-pushed the jcscottiii/pr8-summary-suggestions-crud branch from 2a08ba6 to 2d36511 Compare July 28, 2026 17:14
@jcscottiii
jcscottiii requested a review from jrobbins July 28, 2026 17:29
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