Skip to content

[Backend APIs] Implement Milestone Editorial Curation Workflow API (GET/PATCH /milestone-curation) - #6675

Open
jcscottiii wants to merge 1 commit into
jcscottiii/pr9-pending-reviews-queuefrom
jcscottiii/pr10-milestone-curation-api
Open

[Backend APIs] Implement Milestone Editorial Curation Workflow API (GET/PATCH /milestone-curation)#6675
jcscottiii wants to merge 1 commit into
jcscottiii/pr9-pending-reviews-queuefrom
jcscottiii/pr10-milestone-curation-api

Conversation

@jcscottiii

Copy link
Copy Markdown
Collaborator

[Backend APIs] Implement Milestone Editorial Curation Workflow API (GET/PATCH /milestone-curation)

Summary

Implements GET /api/v0/milestone-curation/<int:milestone> and PATCH /api/v0/milestone-curation/<int:milestone> tracking editorial milestone status (PENDING, IN_REVIEW, COMPLETED) and curator assignments.

Enforces Datastore entity key alignment (id=str(milestone)), site editor permissions (permissions.can_edit_any_feature), status enum validation, and timezone-aware UTC timestamps.

Key Changes

  • Controller (api/milestone_curation_api.py): Implements MilestoneCurationAPI handling do_get (retrieving or defaulting MilestoneCuration entities using string milestone keys id=str(milestone)) and do_patch (updating status, curator_emails, and timezone-aware updated timestamps).
  • Routes (main.py): Registers /milestone-curation/<int:milestone> route.
  • Testing (api/milestone_curation_api_test.py): Added MilestoneCurationAPITest unit test suite covering default state creation, stored state retrieval, non-positive milestone validation (HTTP 400), unauthorized access shielding (HTTP 403), invalid status/curator_emails payloads (HTTP 400), and entity persistence.

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

…ET/PATCH /milestone-curation)

## Summary

Implements `GET /api/v0/milestone-curation/<int:milestone>` and `PATCH /api/v0/milestone-curation/<int:milestone>` tracking editorial milestone status (`PENDING`, `IN_REVIEW`, `COMPLETED`) and curator assignments.

Enforces Datastore entity key alignment (`id=str(milestone)`), site editor permissions (`permissions.can_edit_any_feature`), status enum validation, and timezone-aware UTC timestamps.

## Key Changes

- **Controller (`api/milestone_curation_api.py`)**: Implements `MilestoneCurationAPI` handling `do_get` (retrieving or defaulting `MilestoneCuration` entities using string milestone keys `id=str(milestone)`) and `do_patch` (updating `status`, `curator_emails`, and timezone-aware `updated` timestamps).
- **Routes (`main.py`)**: Registers `/milestone-curation/<int:milestone>` route.
- **Testing (`api/milestone_curation_api_test.py`)**: Added `MilestoneCurationAPITest` unit test suite covering default state creation, stored state retrieval, non-positive milestone validation (HTTP 400), unauthorized access shielding (HTTP 403), invalid status/curator_emails payloads (HTTP 400), and entity persistence.

TAG=agy
CONV=86f63625-bdb5-4d50-ac8d-2f8ca5128ca9
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