<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="622px" preserveAspectRatio="none" style="width:666px;height:622px;background:#F0F0F0;" version="1.1" viewBox="0 0 666 622" width="666px" zoomAndPan="magnify"><defs><filter height="300%" id="fmbmvvqwg1s80" width="300%" x="-1" y="-1"><feGaussianBlur result="blurOut" stdDeviation="2.0"/><feColorMatrix in="blurOut" result="blurOut2" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .4 0"/><feOffset dx="4.0" dy="4.0" in="blurOut2" result="blurOut3"/><feBlend in="SourceGraphic" in2="blurOut3" mode="normal"/></filter></defs><g><rect fill="#F0F0F0" filter="url(#fmbmvvqwg1s80)" height="46.2656" style="stroke: #000000; stroke-width: 2.0;" width="397.5" x="246.5" y="429.7578"/><rect fill="#F0F0F0" filter="url(#fmbmvvqwg1s80)" height="46.2656" style="stroke: #000000; stroke-width: 2.0;" width="397.5" x="246.5" y="490.0234"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="54" x2="54" y1="38.2969" y2="582.4219"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="317.5" x2="317.5" y1="38.2969" y2="582.4219"/><line style="stroke: #A80036; stroke-width: 1.0; stroke-dasharray: 5.0,5.0;" x1="582" x2="582" y1="38.2969" y2="582.4219"/><rect fill="#FEFECE" filter="url(#fmbmvvqwg1s80)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="89" x="8" y="3"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="75" x="15" y="22.9951">Application</text><rect fill="#FEFECE" filter="url(#fmbmvvqwg1s80)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="89" x="8" y="581.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="75" x="15" y="601.417">Application</text><rect fill="#FEFECE" filter="url(#fmbmvvqwg1s80)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="118" x="256.5" y="3"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="104" x="263.5" y="22.9951">ContactRecord</text><rect fill="#FEFECE" filter="url(#fmbmvvqwg1s80)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="118" x="256.5" y="581.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="104" x="263.5" y="601.417">ContactRecord</text><rect fill="#FEFECE" filter="url(#fmbmvvqwg1s80)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="99" x="531" y="3"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="85" x="538" y="22.9951">contacts DB</text><rect fill="#FEFECE" filter="url(#fmbmvvqwg1s80)" height="30.2969" style="stroke: #A80036; stroke-width: 1.5;" width="99" x="531" y="581.4219"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacingAndGlyphs" textLength="85" x="538" y="601.417">contacts DB</text><rect fill="#EEEEEE" filter="url(#fmbmvvqwg1s80)" height="3" style="stroke: #EEEEEE; stroke-width: 1.0;" width="651" x="3" y="68.8633"/><line style="stroke: #000000; stroke-width: 1.0;" x1="3" x2="654" y1="68.8633" y2="68.8633"/><line style="stroke: #000000; stroke-width: 1.0;" x1="3" x2="654" y1="71.8633" y2="71.8633"/><rect fill="#EEEEEE" filter="url(#fmbmvvqwg1s80)" height="23.1328" style="stroke: #000000; stroke-width: 2.0;" width="195" x="231" y="58.2969"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="176" x="237" y="74.3638">Checking for duplicates</text><polygon fill="#A80036" points="305.5,123.6953,315.5,127.6953,305.5,131.6953,309.5,127.6953" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="54.5" x2="311.5" y1="127.6953" y2="127.6953"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="113" x="61.5" y="107.4966">contacts to check</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="239" x="61.5" y="122.6294">(query::CheckContactsListDuplicates)</text><polygon fill="#A80036" points="570.5,152.8281,580.5,156.8281,570.5,160.8281,574.5,156.8281" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="317.5" x2="576.5" y1="156.8281" y2="156.8281"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="82" x="324.5" y="151.7622">get numbers</text><polygon fill="#A80036" points="328.5,166.8281,318.5,170.8281,328.5,174.8281,324.5,170.8281" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="322.5" x2="581.5" y1="170.8281" y2="170.8281"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="317.5" x2="359.5" y1="199.9609" y2="199.9609"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="359.5" x2="359.5" y1="199.9609" y2="212.9609"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="318.5" x2="359.5" y1="212.9609" y2="212.9609"/><polygon fill="#A80036" points="328.5,208.9609,318.5,212.9609,328.5,216.9609,324.5,212.9609" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="136" x="324.5" y="194.895">numbers comparison</text><polygon fill="#A80036" points="65.5,238.0938,55.5,242.0938,65.5,246.0938,61.5,242.0938" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="59.5" x2="316.5" y1="242.0938" y2="242.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="125" x="71.5" y="237.0278">duplicated contacts</text><rect fill="#EEEEEE" filter="url(#fmbmvvqwg1s80)" height="3" style="stroke: #EEEEEE; stroke-width: 1.0;" width="651" x="3" y="270.6602"/><line style="stroke: #000000; stroke-width: 1.0;" x1="3" x2="654" y1="270.6602" y2="270.6602"/><line style="stroke: #000000; stroke-width: 1.0;" x1="3" x2="654" y1="273.6602" y2="273.6602"/><rect fill="#EEEEEE" filter="url(#fmbmvvqwg1s80)" height="23.1328" style="stroke: #000000; stroke-width: 2.0;" width="221" x="218" y="260.0938"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="202" x="224" y="276.1606">Merging contacts list to DB</text><polygon fill="#A80036" points="305.5,325.4922,315.5,329.4922,305.5,333.4922,309.5,329.4922" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="54.5" x2="311.5" y1="329.4922" y2="329.4922"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="118" x="61.5" y="309.2935">contacts to merge</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="173" x="61.5" y="324.4263">(query::MergeContactsList)</text><polygon fill="#A80036" points="570.5,354.625,580.5,358.625,570.5,362.625,574.5,358.625" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="317.5" x2="576.5" y1="358.625" y2="358.625"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="82" x="324.5" y="353.5591">get numbers</text><polygon fill="#A80036" points="328.5,368.625,318.5,372.625,328.5,376.625,324.5,372.625" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="322.5" x2="581.5" y1="372.625" y2="372.625"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="317.5" x2="359.5" y1="401.7578" y2="401.7578"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="359.5" x2="359.5" y1="401.7578" y2="414.7578"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="318.5" x2="359.5" y1="414.7578" y2="414.7578"/><polygon fill="#A80036" points="328.5,410.7578,318.5,414.7578,328.5,418.7578,324.5,414.7578" style="stroke: #A80036; stroke-width: 1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="136" x="324.5" y="396.6919">numbers comparison</text><path d="M246.5,429.7578 L425.5,429.7578 L425.5,436.7578 L415.5,446.7578 L246.5,446.7578 L246.5,429.7578 " fill="#EEEEEE" style="stroke: #000000; stroke-width: 1.0;"/><rect fill="none" height="46.2656" style="stroke: #000000; stroke-width: 2.0;" width="397.5" x="246.5" y="429.7578"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="134" x="261.5" y="442.8247">number not found</text><polygon fill="#A80036" points="570.5,464.0234,580.5,468.0234,570.5,472.0234,574.5,468.0234" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="317.5" x2="576.5" y1="468.0234" y2="468.0234"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="77" x="324.5" y="462.9575">Add contact</text><path d="M246.5,490.0234 L439.5,490.0234 L439.5,497.0234 L429.5,507.0234 L246.5,507.0234 L246.5,490.0234 " fill="#EEEEEE" style="stroke: #000000; stroke-width: 1.0;"/><rect fill="none" height="46.2656" style="stroke: #000000; stroke-width: 2.0;" width="397.5" x="246.5" y="490.0234"/><text fill="#000000" font-family="sans-serif" font-size="13" font-weight="bold" lengthAdjust="spacingAndGlyphs" textLength="148" x="261.5" y="503.0903">number found in db</text><polygon fill="#A80036" points="570.5,524.2891,580.5,528.2891,570.5,532.2891,574.5,528.2891" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="317.5" x2="576.5" y1="528.2891" y2="528.2891"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="241" x="324.5" y="523.2231">Update contact by overriding old data</text><polygon fill="#A80036" points="65.5,560.4219,55.5,564.4219,65.5,568.4219,61.5,564.4219" style="stroke: #A80036; stroke-width: 1.0;"/><line style="stroke: #A80036; stroke-width: 1.0;" x1="59.5" x2="316.5" y1="564.4219" y2="564.4219"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacingAndGlyphs" textLength="103" x="71.5" y="559.356">status response</text><!--MD5=[515b218ac3b5f2cb30693f184c9eef1c]
@startuml
skinparam BackgroundColor F0F0F0
participant "Application" as app
participant "ContactRecord" as rec
participant "contacts DB" as db
== Checking for duplicates ==
app -> rec : contacts to check\n(query::CheckContactsListDuplicates)
rec -> db : get numbers
db -> rec
rec -> rec : numbers comparison
rec -> app : duplicated contacts
== Merging contacts list to DB ==
app -> rec : contacts to merge\n(query::MergeContactsList)
rec -> db : get numbers
db -> rec
rec -> rec : numbers comparison
group number not found
rec -> db : Add contact
end
group number found in db
rec -> db : Update contact by overriding old data
end
rec -> app : status response
@enduml
PlantUML version 1.2020.02(Sun Mar 01 05:22:07 EST 2020)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Java Version: 11.0.12+7-post-Debian-2
Operating System: Linux
Default Encoding: UTF-8
Language: en
Country: US
--></g></svg>