ЕСОЗ - публічна документація

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »


Specification

GraphQL

Purpose

This WS is designed to review and update assign merge_request.

Statements 

  1. Assignee can postpone merge_request change its status to POSTPONE
  2. POSTPONE is not final status and must be changed to one of MERGE, SPLIT, TRASH
  3. MERGE, SPLIT, TRASH are final statuses
  4. In case one of MERGE, SPLIT, TRASH for one merge_request reached decision_amount value this request must be processed
    1. Decisions with status SPLIT and TRASH changes Merge Candidates to PROCESSED
    2. Decisions with status MERGE changes Merge Candidates to PROCESSED and creates Merge Job

Authorize

    1. Verify the validity of access token
      1. in case of error return 401 ('Access denied')
    2. Check user scope merge_request:review in order to perform this action
      1. in case of error generate 401 response ('Invalid scopes')

Verify user and role

Extract from token:

  1. Validate client_id (is_blocked=false)
    1. in case of error return 403 Error ('Client is blocked')
  2. Check user_roles by client_id 
    1. check whether exist role NHS_REVIEWER 
      1. in case of error return 403 Error ('User doesn't have required role')
  3. Validate client_id is NHS
    1. check client type is NHS
      1. in case of error rerun forbidden error (Client is not allowed to the action')

Validate request

  1. Check allowed status transitions: 
    1. from NEW to POSTPONE/SPLIT/MERGE/TRASH
    2. from POSTPONE to SPLIT/MERGE/TRASH
      1. in case of other transitions return CONFLICT error - 'Incorrect transition status'
  2. Check id exists. In case if error return 404 'Merge request doesn't exist'
  3. Check assignee_id = $user_id
    1. in case of error return FORBIDDEN 'Current client is not allowed to access this resource'


Response

Update  manual_merge_requests record by ID

column
value
updated_atnow()
status$status
comment$comment

Add a record to audit log

After status was changed  add new record to audit_log

field
value
idgenerate UUID
actor_id$user_id
resource'manual_merge_process'
resource_id$manual_merge_process.id
changeset{status:$status}
inserted_atDATETIME

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_idnull
updated_atnow()

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:

  1. update manual_merge_candidates by manual_merge_candidate_id=dedup.manual_merge_candidates.id
Field 
Value
status$PROCESSED
updated_atnow()
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_atnow()
decision$MERGE
status_reasonauto_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

  • No labels