Table of Contents |
---|
Specification
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
"""
Methods to use when ordering `Merge Request`.
"""
enum MergeRequestOrderBy {
"Sort Person by inserted at in ascending order."
INSERTED_AT_ASC
"Sort Person by inserted at in descending order."
INSERTED_AT_DESC
"Sort Person by birth date in ascending order."
STATUS_ASC
"Sort Person by birth date in descending order."
STATUS_DESC
}
"""
A connection to a list of `MergeRequest` values.
"""
type MergeRequestConnection {
"Information to aid in pagination."
pageInfo: PageInfo!
"Flag which shows whether NEW merge candidate can be assigned to the User"
canAssignNew: Boolean!
"A list of nodes."
nodes: [MergeRequest]
"A list of edges."
edges: [MergeRequestEdge]
}
"""
Reads and enables pagination through a set of `MergeRequest`.
"""
type MergeRequestEdge {
"The item at the end of the edge."
node: MergeRequest!
"A cursor for use in pagination."
cursor: String!
}
"""
Return type for `assignMergeCandidate` mutation.
"""
type AssignMergeCandidatePayload {
"Information of pair of persons which can be same."
mergeRequest: MergeRequest!
}
"""
Input for `updateMergeRequest` mutation.
In order to update status user must have a scope `merge_request:write`
"""
input UpdateMergeRequestInput {
"Primary key identifier from the database"
id: ID!
"next status of merge request"
status: MergeRequestStatus!
"comment which user can leave"
comment: String
}
"""
Return type for `updateMergeRequest` mutation.
"""
type UpdateMergeRequestPayload {
"Information of pair of persons which can be same."
mergeRequest: MergeRequest!
}
"""
This is Merge Request details. In order to obtain details user must have a scope **merge_request:read**
"""
type MergeRequest implements Node {
"The ID of an object"
id: ID!
"Primary key identifier from the database"
databaseId: UUID!
"The pair of persons which is considerated to be the same person"
manualMergeCandidate: ManualMergeCandidate!
"status of merge request"
status: MergeRequestStatus!
"comment which user can leave"
comment: String
"Technical information when the patient was inserted into the DB."
insertedAt: DateTime!
"Technical information when the patient was updated in the DB."
updatedAt: DateTime!
}
"""
List of MergeRequest statuses.
"""
enum MergeRequestStatus {
"Status `MERGE` for a merge request"
MERGE
"Status `NEW` for a merge request"
NEW
"Status `POSTPONE` for a merge request"
POSTPONE
"Status `SPLIT` for a merge request"
SPLIT
"Status `TRASH` for a merge request"
TRASH
}
"""
Information about Manual Merge Candidate.
"""
type ManualMergeCandidate {
"The ID of an object"
id: ID!
"Primary key identifier from the database"
databaseId: UUID!
"The pair of persons which is considerated to be the same person"
mergeCandidate: MergeCandidate!
"status of merge candidate"
status: ManualMergeCandidateStatus
"Technical information when the patient was inserted into the DB."
insertedAt: DateTime!
"Technical information when the patient was updated in the DB."
updatedAt: DateTime!
}
"""
Information about Merge Candidate.
"""
type MergeCandidate {
"The ID of an object"
id: ID!
"Primary key identifier from the database"
databaseId: UUID!
"The person wich will be deactivated"
person: Person!
"The person wich will remain"
masterPerson: Person!
}
"""
List of Merge candidate statuses
"""
enum ManualMergeCandidateStatus {
"Status `NEW` for a merge request"
NEW
"Status `PROCESSED` for a merge request"
PROCESSED
} |
Purpose
This WS is designed to review and update assign merge_request.
...
- 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')
- Verify the validity of access token
Verify user and role
Extract from token:
...
Response
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 | $manual_merge_process.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