...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
...
Table of Contents |
---|
...
GraphQL
Purpose
This WS is designed to review and update assign merge_request.
...
Table of Contents |
---|
Purpose
This WS is designed to review and update assign merge_request.
Specification
Page Properties | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||
|
GraphQL schema
Expand | ||
---|---|---|
| ||
|
Logic
Assignee can postpone merge_request change its status to POSTPONE
POSTPONE is not final status and must be changed to one of MERGE, SPLIT, TRASH
MERGE, SPLIT, TRASH are final statuses
In case one of MERGE, SPLIT, TRASH for one merge_request reached decision_amount value this request must be processed
Decisions with status SPLIT and TRASH changes Merge Candidates to PROCESSED
Decisions with status MERGE changes Merge Candidates to PROCESSED and creates Merge Job
Request structure
API paragraph not found
Authorize
Verify the validity of access token
in case of error return 401 ('Access denied')
Check user scope merge_request:review in order to perform this action
in case of error generate 401 response ('Invalid scopes')
Headers
API paragraph not found
Request data validation
Verify user and role
Extract from token:
Validate client_id (is_blocked=false)
in case of error return 403 Error ('Client is blocked')
Check user_roles by client_id
check whether exist role NHS_REVIEWER
in case of error return 403 Error ('User doesn't have required role')
Validate client_id is NHS
check client type is NHS
in case of error rerun forbidden error (Client is not allowed to the action')
Validate request
Check allowed status transitions:
from NEW to POSTPONE/SPLIT/MERGE/TRASH
from POSTPONE to SPLIT/MERGE/TRASH
in case of other transitions return CONFLICT error - 'Incorrect transition status'
Check id exists. In case if error return 404 'Merge request doesn't exist'
Check assignee_id = $user_id
in case of error return FORBIDDEN 'Current client is not allowed to access this resource'
...
Processing
Update manual_merge_requests record by ID
column | value |
---|---|
updated_at | now() |
status | $status |
comment | $comment |
Add a record to audit log
After status was changed add new record to audit_log
field | value |
---|---|
id | generate UUID |
actor_id | $user_id |
resource | 'manual_merge_process' |
resource_id | |
changeset | {status:$status} |
inserted_at | DATETIME |
Update manual_merge_
...
candidates
Update assignee_id
Fetch the record from manual_merge_candidates by manual_merge_candidate_id=dedup.manual_merge_candidates.id
column | value |
---|---|
assignee_id | null |
updated_at | now() |
Check amount of decisions
In case status was changed to final SPLIT/MERGE/TRASH recalculate how many decisions on this merge_request was made by each status (qty).
Compare calculated qty to decision_amount. If qty=decision_amount:
update manual_merge_candidates by manual_merge_candidate_id=dedup.manual_merge_candidates.id
Field | Value |
---|---|
status | $PROCESSED |
updated_at | now() |
decision | $status (by calculated qty) |
in case final decision is MERGE it should be checked whether deactivated person is a slave/master person in any other merge candidate.
a) fetch all records from manual_merge_candidates where person_id or master_person_id=$person_id
b) for such record update
...
Field | Value |
---|---|
status | $PROCESSED |
updated_at | now() |
decision | $MERGE |
status_reason | auto_merge |
2. Add event to terminate declaration with reason manual_merge and deactivate person by person_id to Kafka in case final decision is MERGE
Response structure
API paragraph not found
Post-processing processes
API paragraph not found
HTTP status codes
API paragraph not found