Jelajahi Sumber

Add RepoContact, RepoCustomer. Define Service layer in documentation

Dalibor Votruba 3 tahun lalu
induk
melakukan
90010bdc49

+ 614 - 88
@Documentation/QLiberace.simp

@@ -5,7 +5,7 @@
     <authors>Dalibor Votruba</authors>
     <description>SAAS based functional processing (automatic) backend with payments</description>
   </meta>
-  <counters models="4">
+  <counters models="12">
     <entity-names>
       <counter>
         <item-type stereotype="component" type-id="component" type="Component" />
@@ -15,11 +15,19 @@
         <item-type type-id="erd-entity" type="Entity" />
         <value>11</value>
       </counter>
+      <counter>
+        <item-type type-id="class" type="Class" />
+        <value>5</value>
+      </counter>
+      <counter>
+        <item-type type-id="object" type="Object" />
+        <value>6</value>
+      </counter>
     </entity-names>
     <entity-ids>
       <counter>
         <item-type type-id="group" type="Group" />
-        <value>755</value>
+        <value>912</value>
       </counter>
       <counter>
         <item-type type-id="component" type="Component" />
@@ -51,6 +59,22 @@
       </counter>
       <counter>
         <item-type type-id="universal-connector" type="Universal Connector" />
+        <value>7</value>
+      </counter>
+      <counter>
+        <item-type type-id="class" type="Class" />
+        <value>6</value>
+      </counter>
+      <counter>
+        <item-type type-id="object" type="Object" />
+        <value>7</value>
+      </counter>
+      <counter>
+        <item-type type-id="template-parameter" type="Template Parameter" />
+        <value>3</value>
+      </counter>
+      <counter>
+        <item-type type-id="generalization" type="Generalization" />
         <value>4</value>
       </counter>
     </entity-ids>
@@ -67,6 +91,10 @@
         <type>SoftwareIdeasModeler.Core.Diagrams.Other.EntityRelationshipDiagram</type>
         <value>2</value>
       </counter>
+      <counter>
+        <type>SoftwareIdeasModeler.Core.Diagrams.UmlDiagrams.UmlObjectDiagram</type>
+        <value>4</value>
+      </counter>
     </diagrams>
     <fields>
       <counter>
@@ -77,6 +105,10 @@
         <type>SoftwareIdeasModeler.Core.DiagramItems.Erd.ErdEntityIndex</type>
         <value>8</value>
       </counter>
+      <counter>
+        <type>SoftwareIdeasModeler.Core.DiagramItems.Fields.OperationField</type>
+        <value>22</value>
+      </counter>
     </fields>
   </counters>
   <alias-groups />
@@ -130,6 +162,31 @@
     <item id="49ad3ceea0bb4157b557e21e2eb7c0b9" cid="PROP006" type="property" owner="802906c103994cfb8c5117077f30e22a" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:31" visibility="private">
       <structural-feature type="Base" type-id="Class:2626a7fd504946ccaa1eb090b6d27d0d" />
     </item>
+    <item id="973f3350bf004251bfd79b861f6bfe4f" cid="ELEM001" type="template-parameter" name="TRepository" owner="7399b648d3cb40019de69d5f8ea9f2b9" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 16:52:13">
+      <style style-name="Default" shadow-type="smooth" shadow-offset="2,2" shadow-visible="true" shadow-color="#3A555555" shadow-radius="8" wrap-name-text="true" wrap-other-text="true" padding="2" margin="1" glow-color="#FFFFFF" accuracy="0.9">
+        <text-style type="name" color="#555555" font="Segoe UI;11.25;B" />
+        <text-style type="part-header" color="#1E1E1E" font="Verdana;9;I" />
+        <text-style type="text" color="#555555" font="Segoe UI;9.75;" horizontal-alignment="left" />
+        <text-style type="tagged-value" color="#555555" font="Segoe UI;9.75;" />
+        <text-style type="stereotype" color="#555555" font="Segoe UI;9;I" />
+        <background type="solid" colors="#F2F2F2,#F2F2F2" />
+        <border color="#555555" width="2" />
+        <label-connector color="#80000000" dash-style="Dash" />
+        <alternate-styles>
+          <alternate-style style-name="Alternate" shadow-type="smooth" shadow-offset="2,2" shadow-visible="true" shadow-color="#322A2A2A" shadow-radius="8" wrap-name-text="true" wrap-other-text="true" padding="2" margin="1" glow-color="#FFFFFF" accuracy="0.9">
+            <text-style type="name" color="#E9E9E9" font="Segoe UI;11.25;B" />
+            <text-style type="part-header" color="#1E1E1E" font="Verdana;9;I" />
+            <text-style type="text" color="#E9E9E9" font="Segoe UI;9.75;" horizontal-alignment="left" />
+            <text-style type="tagged-value" color="#E9E9E9" font="Segoe UI;9.75;" />
+            <text-style type="stereotype" color="#E9E9E9" font="Segoe UI;9;I" />
+            <background type="solid" colors="#203D85,#203D85" />
+            <border color="#203D85" width="2" />
+            <label-connector color="#80000000" dash-style="Dash" />
+          </alternate-style>
+        </alternate-styles>
+      </style>
+      <template-parameter kind="" />
+    </item>
     <item id="b531bae1520645b58761d8077cac7517" cid="PROP004" type="property" owner="2037f7bd032e4fa3a1d8d99f1cd1ea27" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:08" visibility="private">
       <structural-feature type="Base" type-id="Class:2626a7fd504946ccaa1eb090b6d27d0d" />
     </item>
@@ -178,8 +235,8 @@
             </stereotype-instances>
             <owned-items />
             <relation from="7546dafc2b0d406bb9cf489c5eeb4aff" to="2626a7fd504946ccaa1eb090b6d27d0d" derived="false">
-              <start-role id="umlar-be1b0bb1-8f33-4eb5-932b-5a64bb1ffbd5" name="" navigability="" association-type="association" visibility="private" property-ref="de0957d8d7ac42eab57e579c2cefbf47" />
-              <end-role id="umlar-fa9da028-f9b0-4b51-9bdc-3781aee2e5de" name="" navigability="yes" association-type="association" visibility="private" property-ref="49ad3ceea0bb4157b557e21e2eb7c0b9" />
+              <start-role id="umlar-d6511132-1863-4745-a185-5172604fd46b" name="" navigability="" association-type="association" visibility="private" property-ref="de0957d8d7ac42eab57e579c2cefbf47" />
+              <end-role id="umlar-8f651f8a-4164-4955-a5ce-390c565bb596" name="" navigability="yes" association-type="association" visibility="private" property-ref="49ad3ceea0bb4157b557e21e2eb7c0b9" />
             </relation>
           </item>
           <item id="2626a7fd504946ccaa1eb090b6d27d0d" cid="CPT001" type="component" name="Base" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:39:10" visibility="undefined">
@@ -288,6 +345,19 @@
             </stereotype-instances>
             <component />
           </item>
+          <item id="7268ad1b0bd249218475144e6941ccdf" cid="REL001" type="relationship" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:42:51" from="cb92b4b50dc847aebfdbd90ce365a1eb" to="7546dafc2b0d406bb9cf489c5eeb4aff" visibility="package">
+            <stereotypes>
+              <stereotype name="use" />
+            </stereotypes>
+            <stereotype-instances>
+              <stereotype id="7268ad1b0bd249218475144e6941ccdf_use_c" type="use" ref="" />
+            </stereotype-instances>
+            <owned-items />
+            <relation from="cb92b4b50dc847aebfdbd90ce365a1eb" to="7546dafc2b0d406bb9cf489c5eeb4aff" derived="false">
+              <start-role id="umlar-58da28cf-fc9d-4484-b8fc-8e0e8688f302" name="" navigability="" association-type="association" visibility="private" property-ref="93016f98fae440bb88e27fe09172df66" />
+              <end-role id="umlar-ebc566c8-98c5-4bc8-9caa-d91a98b165d5" name="" navigability="yes" association-type="association" visibility="private" property-ref="132ce45236e54d6da05ae53d64712729" />
+            </relation>
+          </item>
           <item id="7546dafc2b0d406bb9cf489c5eeb4aff" cid="CPT002" type="component" name="Customer" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:40:04" visibility="undefined">
             <stereotypes>
               <stereotype name="component" />
@@ -347,19 +417,6 @@
             </stereotype-instances>
             <component />
           </item>
-          <item id="7268ad1b0bd249218475144e6941ccdf" cid="REL001" type="relationship" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:42:51" from="cb92b4b50dc847aebfdbd90ce365a1eb" to="7546dafc2b0d406bb9cf489c5eeb4aff" visibility="package">
-            <stereotypes>
-              <stereotype name="use" />
-            </stereotypes>
-            <stereotype-instances>
-              <stereotype id="7268ad1b0bd249218475144e6941ccdf_use_c" type="use" ref="" />
-            </stereotype-instances>
-            <owned-items />
-            <relation from="cb92b4b50dc847aebfdbd90ce365a1eb" to="7546dafc2b0d406bb9cf489c5eeb4aff" derived="false">
-              <start-role id="umlar-ebae232b-cbbe-4026-bfa4-b0e31e631962" name="" navigability="" association-type="association" visibility="private" property-ref="93016f98fae440bb88e27fe09172df66" />
-              <end-role id="umlar-6da92844-e176-4d50-b6d9-cb69776ad7fa" name="" navigability="yes" association-type="association" visibility="private" property-ref="132ce45236e54d6da05ae53d64712729" />
-            </relation>
-          </item>
           <item id="2037f7bd032e4fa3a1d8d99f1cd1ea27" cid="REL002" type="relationship" change-tracking-state="added" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:43:08" from="cb92b4b50dc847aebfdbd90ce365a1eb" to="2626a7fd504946ccaa1eb090b6d27d0d" visibility="package">
             <stereotypes>
               <stereotype name="use" />
@@ -369,8 +426,8 @@
             </stereotype-instances>
             <owned-items />
             <relation from="cb92b4b50dc847aebfdbd90ce365a1eb" to="2626a7fd504946ccaa1eb090b6d27d0d" derived="false">
-              <start-role id="umlar-24de1d9f-f2f5-4512-a84f-70fcb3179455" name="" navigability="" association-type="association" visibility="private" property-ref="002883f71fbc4324bbd1efa19cdbd1a6" />
-              <end-role id="umlar-1db950d6-80b7-49dd-bbd5-c195a223cf1d" name="" navigability="yes" association-type="association" visibility="private" property-ref="b531bae1520645b58761d8077cac7517" />
+              <start-role id="umlar-1cf2db35-1e43-495b-a192-1a1a4deb1b71" name="" navigability="" association-type="association" visibility="private" property-ref="002883f71fbc4324bbd1efa19cdbd1a6" />
+              <end-role id="umlar-8579e2f2-fe1f-4ea8-9fc5-be3efc1c4f28" name="" navigability="yes" association-type="association" visibility="private" property-ref="b531bae1520645b58761d8077cac7517" />
             </relation>
           </item>
         </abstract-items>
@@ -493,8 +550,8 @@
           </item>
           <item id="c19c4449f012422dbba1ddec55021b44" cid="REL004" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:57:00" from="d3486fe91b1f476e8a3393099f04e99e" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
             <relation from="d3486fe91b1f476e8a3393099f04e99e" to="ba48530a7b5245a7b6efcf3d8e61f067" derived="false">
-              <start-role id="umlar-89314ee0-1a89-4f15-8ba2-2ece182a7666" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-00361b63-2b0a-4228-bb9f-6091e5802f1d" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-0f51bf25-57e7-46c5-8919-192f9709d23d" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-b639e7cc-aa20-474d-b77e-6825a287cb75" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
           <item id="c34f0bc111894b608624e52c0815c07a" cid="REQ007" type="requirement" name="RQ_TECH_SPEC_FE_4" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:02:23">
@@ -601,14 +658,14 @@
           </item>
           <item id="ce75414afc48414db34ec56233570770" cid="REL005" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:58:04" from="05792695378d4e0fa3cdd3681474e8f6" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
             <relation from="05792695378d4e0fa3cdd3681474e8f6" to="ba48530a7b5245a7b6efcf3d8e61f067" derived="false">
-              <start-role id="umlar-3a34e906-0006-4d19-8f44-90b97dfcb349" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-fb8a3288-453a-42e8-a072-ea269769e30f" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-2cedd15d-1c45-45ab-bd68-71d7d98f90eb" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-53734590-9b96-4bd1-908f-b371d9237f7e" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
           <item id="57b3095ce64f4492bf2b9b93738232bf" cid="REL007" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:02:23" from="c34f0bc111894b608624e52c0815c07a" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
             <relation from="c34f0bc111894b608624e52c0815c07a" to="ba48530a7b5245a7b6efcf3d8e61f067" derived="false">
-              <start-role id="umlar-e5da83ae-734a-4dd3-b854-ef9ab38ac04c" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-d60d4e92-816b-44af-adde-669e79b67f10" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-6a55cf37-1c4a-4dc8-960a-27658ab00adb" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-01c06a4d-2fff-44b4-a655-53ed0a96e039" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
           <item id="05792695378d4e0fa3cdd3681474e8f6" cid="REQ005" type="requirement" name="RQ_TECH_SPEC_FRAMEWORK_2" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:58:04">
@@ -769,26 +826,26 @@
           </item>
           <item id="b92a1d894874430fb846cd4ffebbe4e1" cid="REL014" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:09:33" from="f57cd7c78a5e483ebb3edb6a59957a97" to="c54c944000d84837bbb378cebd81a4e2" visibility="package">
             <relation from="f57cd7c78a5e483ebb3edb6a59957a97" to="c54c944000d84837bbb378cebd81a4e2" derived="false">
-              <start-role id="umlar-d098c652-c746-482a-b050-b83e10dc6e1e" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-647aa4b7-9ba4-4bf3-832f-74fcfa76ea36" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-975da3d2-46be-43d2-99e9-4dda0733e246" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-f4559741-fc0d-4d65-9071-19865eeb8f36" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
           <item id="2ffa044974b44d11a13593ba0173375b" cid="REL010" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:05:39" from="b2345a523c6b4b969a3fc4b92c2a427e" to="f3f58833e12d41adbad092d5fa821ae6" visibility="package">
             <relation from="b2345a523c6b4b969a3fc4b92c2a427e" to="f3f58833e12d41adbad092d5fa821ae6" derived="false">
-              <start-role id="umlar-016d97e4-abb9-4c51-9efc-5f5667935922" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-39ad0647-4303-44a7-83d6-4d3831ff8cfb" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-836fe9ce-0c4c-438b-985b-6af145d32a9b" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-d9eeb71a-1304-4a11-a84f-538569315eb4" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
           <item id="b8f1b1ee8380442a9b9806bcaabd60e1" cid="REL009" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:04:56" from="c776555b542842099176f5d00fbd63e4" to="f3f58833e12d41adbad092d5fa821ae6" visibility="package">
             <relation from="c776555b542842099176f5d00fbd63e4" to="f3f58833e12d41adbad092d5fa821ae6" derived="false">
-              <start-role id="umlar-9ed07bd5-0f35-4155-b92e-948f8f2257fa" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-134abca3-fa83-43bb-a0b5-547adf2a2aa6" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-033e47d8-8f01-4d4d-a401-6756edd354d5" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-e8dd9f6f-e394-45da-a338-c538d359a9a0" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
           <item id="d31aa3cec9784517b6f38b38341c1799" cid="REL006" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:59:19" from="cc5e96719a7b4470b17001e1bc806b61" to="ba48530a7b5245a7b6efcf3d8e61f067" visibility="package">
             <relation from="cc5e96719a7b4470b17001e1bc806b61" to="ba48530a7b5245a7b6efcf3d8e61f067" derived="false">
-              <start-role id="umlar-1d343ee4-d549-4bf8-b327-2f4ffa3567d8" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-0824b62b-2073-4ddc-9e9b-c24af1cdc7f1" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-baf5b5b4-587e-4b26-bce0-5e9436bc9e4d" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-835684b2-e8de-401e-8ee2-ee2bcfbabc03" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
           <item id="d3486fe91b1f476e8a3393099f04e99e" cid="REQ004" type="requirement" name="RQ_TECH_SPEC_PLATFORM_1" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 15:57:00">
@@ -891,8 +948,8 @@
           </item>
           <item id="6236eeabf4f94d1984205fd7fcb75b72" cid="REL008" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:04:52" from="c42a187a572a4c2c80d005bf4ea52f65" to="f3f58833e12d41adbad092d5fa821ae6" visibility="package">
             <relation from="c42a187a572a4c2c80d005bf4ea52f65" to="f3f58833e12d41adbad092d5fa821ae6" derived="false">
-              <start-role id="umlar-9e0fa10f-cce1-4b92-a6bb-b1088a374a10" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-312fb99e-acbb-400e-9b5d-1bb496d3d3b1" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-01f36e1d-730c-4a7c-b928-3f3130ed3862" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-87ac79f7-713c-456a-bb87-be1b404caae7" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
           <item id="b2345a523c6b4b969a3fc4b92c2a427e" cid="REQ009" type="requirement" name="RQ_SUP_SETTINGS" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:05:39">
@@ -1010,14 +1067,14 @@
           </item>
           <item id="613bacfba1584c98951c8961e3c0cc5e" cid="REL011" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:27" from="c54c944000d84837bbb378cebd81a4e2" to="0a48454de005413c92e4a5cce0d2982c" visibility="package">
             <relation from="c54c944000d84837bbb378cebd81a4e2" to="0a48454de005413c92e4a5cce0d2982c" derived="false">
-              <start-role id="umlar-4c432289-6306-4801-98e1-f19a63571092" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-78cb4594-a0c3-470e-97c9-443bce6ecb78" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-cd3feb61-e38b-447c-b7b0-8cb236114149" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-1f887797-12ee-4a2b-a406-44542e6f9f31" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
           <item id="4db2cc42f34c4caa94683e00c470b9da" cid="REL013" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:08:33" from="7888a9de9bb14ac0a6fadd2418d0d7a6" to="c54c944000d84837bbb378cebd81a4e2" visibility="package">
             <relation from="7888a9de9bb14ac0a6fadd2418d0d7a6" to="c54c944000d84837bbb378cebd81a4e2" derived="false">
-              <start-role id="umlar-58bb9f96-e632-424d-98cd-9cc13b50dc3a" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-93658a74-1811-4f2f-b822-14899670c7c5" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-08fc35ed-2fdf-4d4a-a60e-37d4a5849069" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-3df77877-bfd9-46ba-bc68-fd1c17438152" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
           <item id="f2c72e50f02843f08f5a7b84d1b0047f" cid="REQ012" type="requirement" name="RQ_CSTR_APP" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:51">
@@ -1245,8 +1302,8 @@
           </item>
           <item id="fbc97786a07c4aaa90c643ba77619c6e" cid="REL012" type="relationship" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="09/15/2022 16:07:51" from="f2c72e50f02843f08f5a7b84d1b0047f" to="0a48454de005413c92e4a5cce0d2982c" visibility="package">
             <relation from="f2c72e50f02843f08f5a7b84d1b0047f" to="0a48454de005413c92e4a5cce0d2982c" derived="false">
-              <start-role id="umlar-0991008f-ec42-491f-bfe4-3c6e02e9ac15" name="" navigability="" association-type="association" visibility="private" />
-              <end-role id="umlar-a5bdf015-d5f1-4138-86fc-2f425250ad16" name="" navigability="" association-type="composition" visibility="private" />
+              <start-role id="umlar-5439f410-d2b4-409b-b2d5-66fbd87002de" name="" navigability="" association-type="association" visibility="private" />
+              <end-role id="umlar-bd6be3ba-ee98-47bf-b526-e6f161d8f793" name="" navigability="" association-type="composition" visibility="private" />
             </relation>
           </item>
         </abstract-items>
@@ -1395,7 +1452,7 @@
         </layer>
       </diagram>
     </model>
-    <model id="pcb9044279dee459f9eaa1fb8d4fe6bf3_148351808" name="Database" namespace="" order-index="2" default-type-set="MSSQL" expanded="true">
+    <model id="pcb9044279dee459f9eaa1fb8d4fe6bf3_148351808" name="Database" namespace="" order-index="2" default-type-set="MSSQL">
       <meta>
         <authors>
           <author>Dalibor Votruba</author>
@@ -1484,19 +1541,6 @@
                   </index>
                 </indexes>
               </item>
-              <item id="eed22cb50bf14a369a44386ecff2eddf" cid="REL_SETTING_SETTING_ID" type="erd-relationship" name="REL_SETTING_SETTING_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:46:59" from="1995ba399cb24729b4df7bbbc0c77b31" to="1995ba399cb24729b4df7bbbc0c77b31">
-                <stereotypes>
-                  <stereotype name="relation" />
-                </stereotypes>
-                <stereotype-instances>
-                  <stereotype id="eed22cb50bf14a369a44386ecff2eddf_relation_c" type="relation" ref="" />
-                </stereotype-instances>
-                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="0..1">
-                  <attribute-pairs>
-                    <attribute-pair from-attribute="a08479372eb77415d9e7fc24b12fd0d42593" to-attribute="a43f81acbacea4b5eb1ab53c404241e92410" />
-                  </attribute-pairs>
-                </erd-relation>
-              </item>
               <item id="031a668b1d6a45e1907a612d85b43d24" cid="TBL_USER" type="erd-entity" name="User" style-class="Flat Green" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:15:45">
                 <stereotypes>
                   <stereotype name="table" />
@@ -1522,29 +1566,29 @@
                   </index>
                 </indexes>
               </item>
-              <item id="38364cd5ebf7433c827087a1d94c73ca" cid="REL_TENANTUSER_USER_ID" type="erd-relationship" name="REL_TENANTUSER_USER_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:28:44" from="f7ba98ff46b54ebd99e6e9d48d4aeee9" to="031a668b1d6a45e1907a612d85b43d24">
+              <item id="eed22cb50bf14a369a44386ecff2eddf" cid="REL_SETTING_SETTING_ID" type="erd-relationship" name="REL_SETTING_SETTING_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:46:59" from="1995ba399cb24729b4df7bbbc0c77b31" to="1995ba399cb24729b4df7bbbc0c77b31">
                 <stereotypes>
                   <stereotype name="relation" />
                 </stereotypes>
                 <stereotype-instances>
-                  <stereotype id="38364cd5ebf7433c827087a1d94c73ca_relation_c" type="relation" ref="" />
+                  <stereotype id="eed22cb50bf14a369a44386ecff2eddf_relation_c" type="relation" ref="" />
                 </stereotype-instances>
                 <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="0..1">
                   <attribute-pairs>
-                    <attribute-pair from-attribute="a6e7eae435a0345fea29288220aa8aa1d623" to-attribute="a6dda4862ea794595834ccbbeacdb68a8699" />
+                    <attribute-pair from-attribute="a08479372eb77415d9e7fc24b12fd0d42593" to-attribute="a43f81acbacea4b5eb1ab53c404241e92410" />
                   </attribute-pairs>
                 </erd-relation>
               </item>
-              <item id="ccc94b03e9f14adf85defc647f594921" cid="REL023" type="erd-relationship" name="REL_COUNTRY_CURRENCY_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/05/2022 09:28:10" from="84a3ecb6b97b4e9cbcf5d8255039f80c" to="cb80b20360f340559de7775b16dcf14f">
+              <item id="38364cd5ebf7433c827087a1d94c73ca" cid="REL_TENANTUSER_USER_ID" type="erd-relationship" name="REL_TENANTUSER_USER_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:28:44" from="f7ba98ff46b54ebd99e6e9d48d4aeee9" to="031a668b1d6a45e1907a612d85b43d24">
                 <stereotypes>
                   <stereotype name="relation" />
                 </stereotypes>
                 <stereotype-instances>
-                  <stereotype id="ccc94b03e9f14adf85defc647f594921_relation_c" type="relation" ref="" />
+                  <stereotype id="38364cd5ebf7433c827087a1d94c73ca_relation_c" type="relation" ref="" />
                 </stereotype-instances>
-                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="1">
+                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="0..1">
                   <attribute-pairs>
-                    <attribute-pair from-attribute="ab59af341336049cab67540f6403cce1425" to-attribute="ab12dbe3ddb0e44da817555c631a0bcdd360" />
+                    <attribute-pair from-attribute="a6e7eae435a0345fea29288220aa8aa1d623" to-attribute="a6dda4862ea794595834ccbbeacdb68a8699" />
                   </attribute-pairs>
                 </erd-relation>
               </item>
@@ -1561,32 +1605,31 @@
                   </attribute-pairs>
                 </erd-relation>
               </item>
-              <item id="06c92dd941704baf86d79ecead01e134" cid="REL_TENANTUSER_TENANT_ID" type="erd-relationship" name="REL_TENANTUSER_TENANT_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:26:57" from="f7ba98ff46b54ebd99e6e9d48d4aeee9" to="e50f79968a404d3fbb33f4a02fa3b572">
+              <item id="ccc94b03e9f14adf85defc647f594921" cid="REL023" type="erd-relationship" name="REL_COUNTRY_CURRENCY_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/05/2022 09:28:10" from="84a3ecb6b97b4e9cbcf5d8255039f80c" to="cb80b20360f340559de7775b16dcf14f">
                 <stereotypes>
                   <stereotype name="relation" />
                 </stereotypes>
                 <stereotype-instances>
-                  <stereotype id="06c92dd941704baf86d79ecead01e134_relation_c" type="relation" ref="" />
+                  <stereotype id="ccc94b03e9f14adf85defc647f594921_relation_c" type="relation" ref="" />
                 </stereotype-instances>
-                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="0..1">
+                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="1">
                   <attribute-pairs>
-                    <attribute-pair from-attribute="ab59b0b6bdd31441c89af642f0131a84b208" to-attribute="aeda82a68426646d3a6cfa276db9bd56f255" />
+                    <attribute-pair from-attribute="ab59af341336049cab67540f6403cce1425" to-attribute="ab12dbe3ddb0e44da817555c631a0bcdd360" />
                   </attribute-pairs>
                 </erd-relation>
               </item>
-              <item id="979e2dd2651742e08af31f818c22bf4e" cid="ENT007" type="erd-entity" name="TenantCountry" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/05/2022 09:13:26">
+              <item id="06c92dd941704baf86d79ecead01e134" cid="REL_TENANTUSER_TENANT_ID" type="erd-relationship" name="REL_TENANTUSER_TENANT_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:26:57" from="f7ba98ff46b54ebd99e6e9d48d4aeee9" to="e50f79968a404d3fbb33f4a02fa3b572">
                 <stereotypes>
-                  <stereotype name="table" />
+                  <stereotype name="relation" />
                 </stereotypes>
                 <stereotype-instances>
-                  <stereotype id="979e2dd2651742e08af31f818c22bf4e_table_c" type="table" ref="" />
+                  <stereotype id="06c92dd941704baf86d79ecead01e134_relation_c" type="relation" ref="" />
                 </stereotype-instances>
-                <entity description="" />
-                <attributes>
-                  <attribute uid="af9002db56cf14129b96aa8a533353459288" cid="EA037" name="TenantId" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="true" primary-key="false" nullable="false" description="Reference to tenant" default-value="" auto-increment="false" creation-date="11/05/2022 09:21:27" />
-                  <attribute uid="ac565ef6d613e4ce395193ba85470dd24288" cid="EA038" name="CountryId" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="true" primary-key="false" nullable="false" description="Reference to country" default-value="" auto-increment="false" creation-date="11/05/2022 09:21:27" />
-                </attributes>
-                <indexes />
+                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="0..1">
+                  <attribute-pairs>
+                    <attribute-pair from-attribute="ab59b0b6bdd31441c89af642f0131a84b208" to-attribute="aeda82a68426646d3a6cfa276db9bd56f255" />
+                  </attribute-pairs>
+                </erd-relation>
               </item>
               <item id="84a3ecb6b97b4e9cbcf5d8255039f80c" cid="ENT005" type="erd-entity" name="Country" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/05/2022 09:12:36">
                 <stereotypes>
@@ -1614,6 +1657,20 @@
                   </index>
                 </indexes>
               </item>
+              <item id="979e2dd2651742e08af31f818c22bf4e" cid="ENT007" type="erd-entity" name="TenantCountry" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/05/2022 09:13:26">
+                <stereotypes>
+                  <stereotype name="table" />
+                </stereotypes>
+                <stereotype-instances>
+                  <stereotype id="979e2dd2651742e08af31f818c22bf4e_table_c" type="table" ref="" />
+                </stereotype-instances>
+                <entity description="" />
+                <attributes>
+                  <attribute uid="af9002db56cf14129b96aa8a533353459288" cid="EA037" name="TenantId" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="true" primary-key="false" nullable="false" description="Reference to tenant" default-value="" auto-increment="false" creation-date="11/05/2022 09:21:27" />
+                  <attribute uid="ac565ef6d613e4ce395193ba85470dd24288" cid="EA038" name="CountryId" type="bigint" type-id="MsSql.bigint" type-size="" foreign-key="true" primary-key="false" nullable="false" description="Reference to country" default-value="" auto-increment="false" creation-date="11/05/2022 09:21:27" />
+                </attributes>
+                <indexes />
+              </item>
               <item id="a48a9211b03c407cbb288eded410b64a" cid="REL019" type="erd-relationship" name="REL_TENANTCOUNTRY_TENANT_ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/05/2022 09:24:18" from="979e2dd2651742e08af31f818c22bf4e" to="e50f79968a404d3fbb33f4a02fa3b572">
                 <stereotypes>
                   <stereotype name="relation" />
@@ -1668,19 +1725,6 @@
                   </index>
                 </indexes>
               </item>
-              <item id="4c112af66ef746a3897a3e2a89b04793" cid="REL022" type="erd-relationship" name="REL_TENANTCURRENCY_CURRENCY__ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/05/2022 09:26:21" from="1596d482602d4447b90d648ed5031bb4" to="cb80b20360f340559de7775b16dcf14f">
-                <stereotypes>
-                  <stereotype name="relation" />
-                </stereotypes>
-                <stereotype-instances>
-                  <stereotype id="4c112af66ef746a3897a3e2a89b04793_relation_c" type="relation" ref="" />
-                </stereotype-instances>
-                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="1">
-                  <attribute-pairs>
-                    <attribute-pair from-attribute="a743bc958b32142279f0be7a53e28a40f887" to-attribute="ab12dbe3ddb0e44da817555c631a0bcdd360" />
-                  </attribute-pairs>
-                </erd-relation>
-              </item>
               <item id="cb80b20360f340559de7775b16dcf14f" cid="ENT006" type="erd-entity" name="Currency" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/05/2022 09:12:59">
                 <stereotypes>
                   <stereotype name="table" />
@@ -1706,6 +1750,19 @@
                   </index>
                 </indexes>
               </item>
+              <item id="4c112af66ef746a3897a3e2a89b04793" cid="REL022" type="erd-relationship" name="REL_TENANTCURRENCY_CURRENCY__ID" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/05/2022 09:26:21" from="1596d482602d4447b90d648ed5031bb4" to="cb80b20360f340559de7775b16dcf14f">
+                <stereotypes>
+                  <stereotype name="relation" />
+                </stereotypes>
+                <stereotype-instances>
+                  <stereotype id="4c112af66ef746a3897a3e2a89b04793_relation_c" type="relation" ref="" />
+                </stereotype-instances>
+                <erd-relation type="Identifying" multiplicity-from="1" multiplicity-to="1">
+                  <attribute-pairs>
+                    <attribute-pair from-attribute="a743bc958b32142279f0be7a53e28a40f887" to-attribute="ab12dbe3ddb0e44da817555c631a0bcdd360" />
+                  </attribute-pairs>
+                </erd-relation>
+              </item>
               <item id="f7ba98ff46b54ebd99e6e9d48d4aeee9" cid="TBL_TENANTUSER" type="erd-entity" name="TenantUser" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/04/2022 06:22:55">
                 <stereotypes>
                   <stereotype name="table" />
@@ -2054,5 +2111,474 @@
         </model>
       </sub-models>
     </model>
+    <model id="pb4ba914fc4fe4880821bbf7c9406e98b_916368183" name="Implementation" namespace="" order-index="3">
+      <meta>
+        <authors>
+          <author> </author>
+        </authors>
+        <description />
+        <creation-date>11/06/2022 16:42:24</creation-date>
+        <change-date>01/01/0001 00:00:00</change-date>
+        <revision-count>0</revision-count>
+        <version />
+      </meta>
+      <abstract-items />
+      <sub-models>
+        <model id="p281a02d1627a44b68d7b4f5f9b9e6e6f_506610107" name="Modules" namespace="" order-index="1">
+          <meta>
+            <authors>
+              <author> </author>
+            </authors>
+            <description />
+            <creation-date>11/06/2022 16:42:57</creation-date>
+            <change-date>01/01/0001 00:00:00</change-date>
+            <revision-count>0</revision-count>
+            <version />
+          </meta>
+          <abstract-items />
+          <sub-models>
+            <model id="pe0e8f121bf7c4fd7b8ec69a3248b8637_619350725" name="Base" namespace="" order-index="1">
+              <meta>
+                <authors>
+                  <author> </author>
+                </authors>
+                <description />
+                <creation-date>11/06/2022 16:43:09</creation-date>
+                <change-date>01/01/0001 00:00:00</change-date>
+                <revision-count>0</revision-count>
+                <version />
+              </meta>
+              <abstract-items />
+              <sub-models>
+                <model id="p86104765aa514bc1a0a9d45c4b94488e_464839088" name="Services" namespace="" order-index="2">
+                  <meta>
+                    <authors>
+                      <author> </author>
+                    </authors>
+                    <description />
+                    <creation-date>11/06/2022 16:44:46</creation-date>
+                    <change-date>01/01/0001 00:00:00</change-date>
+                    <revision-count>0</revision-count>
+                    <version />
+                  </meta>
+                  <abstract-items />
+                  <sub-models />
+                  <diagram type="uml-object" id="pd1584a862d66403089ce89ee3ee4aabc_452816340" name="UserService" order-index="0" uid="" auto-routed-paths="false" default-line-style="default">
+                    <style>
+                      <background-color index="1" color="#FFFFFFFF" />
+                      <background-color index="2" color="#FFFFFFFF" />
+                      <background-type type="solid" />
+                    </style>
+                    <meta>
+                      <authors>
+                        <author> </author>
+                      </authors>
+                      <description />
+                      <creation-date>11/06/2022 16:44:31</creation-date>
+                      <change-date>11/06/2022 16:54:18</change-date>
+                      <revision-count>0</revision-count>
+                      <version />
+                    </meta>
+                    <abstract-items>
+                      <item id="7cc326573a20477690a09e1cd2066d38" cid="ELEM004" type="universal-connector" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 16:50:15" from="39eb180f4e0248729b2ed058d15c19d8" to="3ed6e80069834d258c640a4255a93735">
+                        <connector />
+                      </item>
+                      <item id="3ed6e80069834d258c640a4255a93735" cid="C001" type="class" name="UserService" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 16:45:42" visibility="undefined">
+                        <stereotypes>
+                          <stereotype name="service" />
+                        </stereotypes>
+                        <stereotype-instances>
+                          <stereotype id="3ed6e80069834d258c640a4255a93735_service_c" type="service" ref="" />
+                        </stereotype-instances>
+                        <operations>
+                          <operation id="o794835c3a4494774ac8cd47294ca67a1360" cid="OP001" name="CreateUser" creation-date="11/06/2022 16:47:42" type="" type-id="" visibility="undefined">
+                            <source-codes>
+                              <source-code language="ActionScript" />
+                            </source-codes>
+                          </operation>
+                          <operation id="oa04ea5c376ed43fbbc1ff0c041613176230" cid="OP002" name="DeleteUser" creation-date="11/06/2022 16:47:42" type="" type-id="" visibility="undefined">
+                            <source-codes>
+                              <source-code language="ActionScript" />
+                            </source-codes>
+                          </operation>
+                          <operation id="oc18ceca81a3f439baecd9631e995acc1717" cid="OP003" name="GetUser" creation-date="11/06/2022 16:47:42" type="" type-id="" visibility="undefined">
+                            <source-codes>
+                              <source-code language="ActionScript" />
+                            </source-codes>
+                          </operation>
+                          <operation id="od0d2a33d4b394457bedcbc9966d3d8f6198" cid="OP004" name="Lock" creation-date="11/06/2022 16:47:42" type="" type-id="" visibility="undefined">
+                            <source-codes>
+                              <source-code language="ActionScript" />
+                            </source-codes>
+                          </operation>
+                        </operations>
+                        <source-codes>
+                          <source-code language="ActionScript" />
+                        </source-codes>
+                      </item>
+                      <item id="39eb180f4e0248729b2ed058d15c19d8" cid="OBJ001" type="object" name="UserService" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 16:48:10" visibility="undefined">
+                        <stereotypes>
+                          <stereotype name="injection" />
+                        </stereotypes>
+                        <stereotype-instances>
+                          <stereotype id="39eb180f4e0248729b2ed058d15c19d8_injection_c" type="injection" ref="" />
+                        </stereotype-instances>
+                        <object classifier-name="">
+                          <attributes>
+                            <attribute name="repository" value="RepoUser" />
+                            <attribute name="currentContext" value="QlbrcContext" />
+                            <attribute name="loggerFactory" value="" />
+                          </attributes>
+                        </object>
+                      </item>
+                      <item id="c9b365148daa4cbdafc8000bbc9783b5" cid="GNR001" type="generalization" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 16:54:18" from="3ed6e80069834d258c640a4255a93735" to="46d6acea9ee94f478d35fd94222823d1" visibility="package" />
+                    </abstract-items>
+                    <layer id="41aff4bb8e98428d88ec62b4c7523939" name="Default" visible="true" enabled="true" locked="false">
+                      <item id="3ed6e80069834d258c640a4255a93735" iid="9af97ba125b84743a4bd87a190e410dc" show-fields="true" creation-date="11/06/2022 16:45:42" order-index="0" type="entity">
+                        <layout ax="249" ay="317" awidth="555" aheight="160" x="249" y="317" width="555" height="160" rotation-center="-207.5,0" />
+                        <classifier />
+                        <class />
+                      </item>
+                      <item id="39eb180f4e0248729b2ed058d15c19d8" iid="d4ce60313fbd41aa9ff9ad252d6758c1" creation-date="11/06/2022 16:48:10" order-index="1" type="entity">
+                        <layout ax="423" ay="65" awidth="207" aheight="160" x="423" y="65" width="207" height="160" rotation-center="-33.5,0" />
+                      </item>
+                      <item id="7cc326573a20477690a09e1cd2066d38" iid="92a4efd657404e57a9914432cd5d2cc9" creation-date="11/06/2022 16:50:15" order-index="2" type="relation">
+                        <layout line-style="oblique" lock-start-point="true" lock-end-point="true" lock-to-fields="false" auto-path="" x1="524" y1="225" x2="526" y2="317" start-border-pos="0.628019323671498" end-border-pos="0.124774774774775" start-local-pos="101" end-local-pos="277" name-position="0,20">
+                          <points>
+                            <point x="524" y="225" />
+                            <point x="526" y="317" />
+                          </points>
+                        </layout>
+                        <relation from="39eb180f4e0248729b2ed058d15c19d8" from-iid="d4ce60313fbd41aa9ff9ad252d6758c1" to="3ed6e80069834d258c640a4255a93735" to-iid="9af97ba125b84743a4bd87a190e410dc" />
+                      </item>
+                      <item id="46d6acea9ee94f478d35fd94222823d1" iid="21e3295ad1c1482b989150c2e6940d62" show-fields="true" creation-date="11/06/2022 16:53:13" order-index="0" type="entity">
+                        <layout ax="739" ay="65" awidth="140" aheight="160" x="739" y="65" width="140" height="160" />
+                        <classifier />
+                        <class />
+                      </item>
+                      <item id="c9b365148daa4cbdafc8000bbc9783b5" iid="c53cab43e82b486fad1b4162ac9976b2" creation-date="11/06/2022 16:54:18" order-index="3" type="relation">
+                        <layout line-style="oblique" lock-start-point="true" lock-end-point="true" lock-to-fields="false" auto-path="" x1="526" y1="317" x2="809" y2="225" start-border-pos="0.124774774774775" end-border-pos="0.625" start-local-pos="277" end-local-pos="70" name-position="0,20">
+                          <points>
+                            <point x="526" y="317" />
+                            <point x="809" y="225" />
+                          </points>
+                        </layout>
+                        <relation from="3ed6e80069834d258c640a4255a93735" from-iid="9af97ba125b84743a4bd87a190e410dc" to="46d6acea9ee94f478d35fd94222823d1" to-iid="21e3295ad1c1482b989150c2e6940d62" />
+                      </item>
+                    </layer>
+                  </diagram>
+                  <diagram type="uml-object" id="pac3a1f45b46c465ab97c1528578e8a81_316582569" name="TenantService" order-index="1" overview-order-index="0" uid="" auto-routed-paths="false" default-line-style="default">
+                    <style>
+                      <background-color index="1" color="#FFFFFFFF" />
+                      <background-color index="2" color="#FFFFFFFF" />
+                      <background-type type="solid" />
+                    </style>
+                    <meta>
+                      <authors>
+                        <author> </author>
+                      </authors>
+                      <description />
+                      <creation-date>11/06/2022 16:58:31</creation-date>
+                      <change-date>11/06/2022 17:03:05</change-date>
+                      <revision-count>0</revision-count>
+                      <version />
+                    </meta>
+                    <abstract-items>
+                      <item id="f3456d04aa124ec5add044c05c554261" cid="OBJ005" type="object" name="TenantService" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 17:01:11" visibility="undefined">
+                        <stereotypes>
+                          <stereotype name="injection" />
+                        </stereotypes>
+                        <stereotype-instances>
+                          <stereotype id="f3456d04aa124ec5add044c05c554261_injection_c" type="injection" ref="" />
+                        </stereotype-instances>
+                        <object classifier-name="">
+                          <attributes>
+                            <attribute name="repository" value="RepoTenant" />
+                            <attribute name="currentContext" value="QlrbcContext" />
+                            <attribute name="loggerFactory" value="" />
+                          </attributes>
+                        </object>
+                      </item>
+                      <item id="91cb612d4ae54c0aa919b7804d42921f" cid="GNR002" type="generalization" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 17:02:59" from="0faf8c3fe2b14c878fb5677b298d52cd" to="46d6acea9ee94f478d35fd94222823d1" visibility="package" />
+                      <item id="a6ed5fd7337a483dbe2066ceb2198e67" cid="ELEM005" type="universal-connector" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 17:03:05" from="0faf8c3fe2b14c878fb5677b298d52cd" to="f3456d04aa124ec5add044c05c554261">
+                        <connector />
+                      </item>
+                      <item id="0faf8c3fe2b14c878fb5677b298d52cd" cid="C004" type="class" name="TenantService" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 16:58:45" visibility="undefined">
+                        <stereotypes>
+                          <stereotype name="service" />
+                        </stereotypes>
+                        <stereotype-instances>
+                          <stereotype id="0faf8c3fe2b14c878fb5677b298d52cd_service_c" type="service" ref="" />
+                        </stereotype-instances>
+                        <operations>
+                          <operation id="o6fc19c68cf504220b7f33a92f168377d49" cid="OP005" name="ExistsTenant" creation-date="11/06/2022 17:00:33" type="" type-id="" visibility="undefined">
+                            <source-codes>
+                              <source-code language="ActionScript" />
+                            </source-codes>
+                          </operation>
+                          <operation id="ofcb769f4f2f44cf1a499d7df738e8946241" cid="OP006" name="Lock" creation-date="11/06/2022 17:00:33" type="" type-id="" visibility="undefined" />
+                          <operation id="o765b48f68f22487a9899b98f8cb3b07b449" cid="OP007" name="GetTenant" creation-date="11/06/2022 17:00:33" type="" type-id="" visibility="undefined" />
+                          <operation id="o541b93c6e78344d19f114f7d9a560b86821" cid="OP008" name="CreateTenant" creation-date="11/06/2022 17:00:33" type="" type-id="" visibility="undefined" />
+                          <operation id="o9c6fc72de6054fba9924ddcf4684b5da900" cid="OP009" name="Validate" creation-date="11/06/2022 17:00:33" type="" type-id="" visibility="undefined" />
+                          <operation id="o74aa14b24aac4aee8316e5214f83aed996" cid="OP010" name="UpdateTenant" creation-date="11/06/2022 17:00:33" type="" type-id="" visibility="undefined" />
+                          <operation id="o65fd7c2126da4b2ba9795a74c7a917e3372" cid="OP011" name="DeleteTenant" creation-date="11/06/2022 17:00:33" type="" type-id="" visibility="undefined" />
+                        </operations>
+                        <source-codes>
+                          <source-code language="ActionScript" />
+                        </source-codes>
+                      </item>
+                    </abstract-items>
+                    <layer id="ab8fcb84b3ef452a9268181e5fce0074" name="Default" visible="true" enabled="true" locked="false">
+                      <item id="0faf8c3fe2b14c878fb5677b298d52cd" iid="7272c1519d704568b6b6b91b1cb04c22" show-fields="true" creation-date="11/06/2022 16:58:45" order-index="0" type="entity">
+                        <layout ax="336" ay="296" awidth="379" aheight="232" x="336" y="296" width="379" height="232" rotation-center="-119.5,-36" />
+                        <classifier />
+                        <class />
+                      </item>
+                      <item id="f3456d04aa124ec5add044c05c554261" iid="8ecb3ea9abae4d71b27076220b2d0601" creation-date="11/06/2022 17:01:11" order-index="1" type="entity">
+                        <layout ax="443" ay="39" awidth="140" aheight="160" x="443" y="39" width="140" height="160" />
+                      </item>
+                      <item id="46d6acea9ee94f478d35fd94222823d1" iid="745ca12e37174d1796d95f6225db466a" show-fields="true" creation-date="11/06/2022 16:53:13" order-index="0" type="entity">
+                        <layout ax="799" ay="39" awidth="140" aheight="160" x="799" y="39" width="140" height="160" />
+                        <classifier />
+                        <class />
+                      </item>
+                      <item id="91cb612d4ae54c0aa919b7804d42921f" iid="cba542201cf74319806359b37fbd27a9" creation-date="11/06/2022 17:02:59" order-index="2" type="relation">
+                        <layout line-style="oblique" lock-start-point="true" lock-end-point="true" lock-to-fields="false" auto-path="" x1="526" y1="296" x2="869" y2="199" start-border-pos="0.12532981530343" end-border-pos="0.625" start-local-pos="190" end-local-pos="70" name-position="0,20">
+                          <points>
+                            <point x="526" y="296" />
+                            <point x="869" y="199" />
+                          </points>
+                        </layout>
+                        <relation from="0faf8c3fe2b14c878fb5677b298d52cd" from-iid="7272c1519d704568b6b6b91b1cb04c22" to="46d6acea9ee94f478d35fd94222823d1" to-iid="745ca12e37174d1796d95f6225db466a" />
+                      </item>
+                      <item id="a6ed5fd7337a483dbe2066ceb2198e67" iid="38f8623795fe4507b49770cb4e085331" creation-date="11/06/2022 17:03:05" order-index="3" type="relation">
+                        <layout line-style="oblique" lock-start-point="true" lock-end-point="true" lock-to-fields="false" auto-path="" x1="526" y1="296" x2="513" y2="199" start-border-pos="0.12532981530343" end-border-pos="0.625" start-local-pos="190" end-local-pos="70" name-position="0,20">
+                          <points>
+                            <point x="526" y="296" />
+                            <point x="513" y="199" />
+                          </points>
+                        </layout>
+                        <relation from="0faf8c3fe2b14c878fb5677b298d52cd" from-iid="7272c1519d704568b6b6b91b1cb04c22" to="f3456d04aa124ec5add044c05c554261" to-iid="8ecb3ea9abae4d71b27076220b2d0601" />
+                      </item>
+                    </layer>
+                  </diagram>
+                  <diagram type="uml-object" id="p047c9bd60aa843d88c1943f4c32a802b_515944221" name="SettingsService" order-index="2" overview-order-index="1" uid="" auto-routed-paths="false" default-line-style="default">
+                    <style>
+                      <background-color index="1" color="#FFFFFFFF" />
+                      <background-color index="2" color="#FFFFFFFF" />
+                      <background-type type="solid" />
+                    </style>
+                    <meta>
+                      <authors>
+                        <author> </author>
+                      </authors>
+                      <description />
+                      <creation-date>11/06/2022 17:03:29</creation-date>
+                      <change-date>11/06/2022 17:07:43</change-date>
+                      <revision-count>0</revision-count>
+                      <version />
+                    </meta>
+                    <abstract-items>
+                      <item id="96885c6e72064a9c9e9d688acff09c0d" cid="ELEM006" type="universal-connector" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 17:07:22" from="36a7d1fb19fb4d318895b30f13b1898c" to="060994f2e03b4db1a5b73126dab76749">
+                        <connector />
+                      </item>
+                      <item id="36a7d1fb19fb4d318895b30f13b1898c" cid="C005" type="class" name="SettingsService" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 17:03:54" visibility="undefined">
+                        <stereotypes>
+                          <stereotype name="service" />
+                        </stereotypes>
+                        <stereotype-instances>
+                          <stereotype id="36a7d1fb19fb4d318895b30f13b1898c_service_c" type="service" ref="" />
+                        </stereotype-instances>
+                        <operations>
+                          <operation id="ob2e214e604c749bc966b0a6f9bd9751f872" cid="OP012" name="CreateSettings" creation-date="11/06/2022 17:06:07" type="" type-id="" visibility="undefined" />
+                          <operation id="oa1bfa8e2afea4c219b301251abcc1678112" cid="OP013" name="GetSettings" creation-date="11/06/2022 17:06:07" type="" type-id="" visibility="undefined" />
+                          <operation id="o5e608d50d4d446d6bbf4c73296e8692c520" cid="OP014" name="GetSettingsValue" creation-date="11/06/2022 17:06:07" type="" type-id="" visibility="undefined" />
+                          <operation id="o4b7b8fb0a8e9463883e3b73ac602531f279" cid="OP015" name="ExistsSettings" creation-date="11/06/2022 17:06:07" type="" type-id="" visibility="undefined" />
+                          <operation id="o942f4b98249f41f8b252602930417fed231" cid="OP016" name="ExistsSettingsValue" creation-date="11/06/2022 17:06:07" type="" type-id="" visibility="undefined" />
+                          <operation id="of792b3465d6b42aa9fd4ad849119a60b479" cid="OP017" name="AddSettingsValue" creation-date="11/06/2022 17:06:07" type="" type-id="" visibility="undefined" />
+                          <operation id="o6d98f57fc01646a38094b660a302e2ed768" cid="OP018" name="UpdateSettings" creation-date="11/06/2022 17:06:07" type="" type-id="" visibility="undefined" />
+                          <operation id="o39086ca5ba634ef3806ac6e47c2ebc7e558" cid="OP019" name="UpdateSettingsValue" creation-date="11/06/2022 17:06:07" type="" type-id="" visibility="undefined" />
+                          <operation id="o609310cf80764df8aa3f6ad63f2038ab519" cid="OP020" name="AddOrUpdateSettingsValue" creation-date="11/06/2022 17:06:07" type="" type-id="" visibility="undefined" />
+                          <operation id="o1d12c2c656f743ddb16e0cd47cb72513856" cid="OP021" name="GetSettingsValues" creation-date="11/06/2022 17:06:07" type="" type-id="" visibility="undefined" />
+                        </operations>
+                        <source-codes>
+                          <source-code language="ActionScript" />
+                        </source-codes>
+                      </item>
+                      <item id="060994f2e03b4db1a5b73126dab76749" cid="OBJ006" type="object" name="SettingsService" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 17:06:21" visibility="undefined">
+                        <stereotypes>
+                          <stereotype name="injection" />
+                        </stereotypes>
+                        <stereotype-instances>
+                          <stereotype id="060994f2e03b4db1a5b73126dab76749_injection_c" type="injection" ref="" />
+                        </stereotype-instances>
+                        <object classifier-name="">
+                          <attributes>
+                            <attribute name="repository" value="RepoSetting" />
+                            <attribute name="currentContext" value="QlrbcContext" />
+                            <attribute name="loggerFactory" value="" />
+                          </attributes>
+                        </object>
+                      </item>
+                      <item id="9743a212e65545a0a23751b8c7c55dea" cid="GNR003" type="generalization" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 17:07:43" from="36a7d1fb19fb4d318895b30f13b1898c" to="46d6acea9ee94f478d35fd94222823d1" visibility="package" />
+                    </abstract-items>
+                    <layer id="23d1b8e7eb1e4973b4fac78af55a16a1" name="Default" visible="true" enabled="true" locked="false">
+                      <item id="36a7d1fb19fb4d318895b30f13b1898c" iid="5a3e38a1fcf54b4dbb9a375ba2658c25" show-fields="true" creation-date="11/06/2022 17:03:54" order-index="0" type="entity">
+                        <layout ax="340" ay="273" awidth="405" aheight="322" x="340" y="273" width="405" height="322" rotation-center="-132.5,-81" />
+                        <classifier />
+                        <class />
+                      </item>
+                      <item id="060994f2e03b4db1a5b73126dab76749" iid="1f90737a4bf84feca9cac1481bf4df72" creation-date="11/06/2022 17:06:21" order-index="1" type="entity">
+                        <layout ax="384" ay="36" awidth="207" aheight="160" x="384" y="36" width="207" height="160" rotation-center="33.5,0" />
+                      </item>
+                      <item id="96885c6e72064a9c9e9d688acff09c0d" iid="e63c7b99ca39444a881bd39609176d19" creation-date="11/06/2022 17:07:22" order-index="2" type="relation">
+                        <layout line-style="oblique" lock-start-point="true" lock-end-point="true" lock-to-fields="false" auto-path="" x1="542" y1="273" x2="488" y2="196" start-border-pos="0.124691358024691" end-border-pos="0.6243961352657" start-local-pos="202" end-local-pos="104" name-position="0,20">
+                          <points>
+                            <point x="542" y="273" />
+                            <point x="488" y="196" />
+                          </points>
+                        </layout>
+                        <relation from="36a7d1fb19fb4d318895b30f13b1898c" from-iid="5a3e38a1fcf54b4dbb9a375ba2658c25" to="060994f2e03b4db1a5b73126dab76749" to-iid="1f90737a4bf84feca9cac1481bf4df72" />
+                      </item>
+                      <item id="46d6acea9ee94f478d35fd94222823d1" iid="c96a9c0eaeb340f9ab3f2eaeaa14db40" show-fields="true" creation-date="11/06/2022 16:53:13" order-index="0" type="entity">
+                        <layout ax="837" ay="36" awidth="140" aheight="160" x="837" y="36" width="140" height="160" />
+                        <classifier />
+                        <class />
+                      </item>
+                      <item id="9743a212e65545a0a23751b8c7c55dea" iid="8d7bdada3d41485d806721e7a2bd8c65" creation-date="11/06/2022 17:07:43" order-index="3" type="relation">
+                        <layout line-style="oblique" lock-start-point="true" lock-end-point="true" lock-to-fields="false" auto-path="" x1="542" y1="273" x2="907" y2="196" start-border-pos="0.124691358024691" end-border-pos="0.625" start-local-pos="202" end-local-pos="70" name-position="0,20">
+                          <points>
+                            <point x="542" y="273" />
+                            <point x="907" y="196" />
+                          </points>
+                        </layout>
+                        <relation from="36a7d1fb19fb4d318895b30f13b1898c" from-iid="5a3e38a1fcf54b4dbb9a375ba2658c25" to="46d6acea9ee94f478d35fd94222823d1" to-iid="c96a9c0eaeb340f9ab3f2eaeaa14db40" />
+                      </item>
+                    </layer>
+                  </diagram>
+                </model>
+              </sub-models>
+            </model>
+            <model id="p223e98f24dc24b5ba97eaf31797eaf4f_349702731" name="Common" namespace="" order-index="2">
+              <meta>
+                <authors>
+                  <author> </author>
+                </authors>
+                <description />
+                <creation-date>11/06/2022 16:46:21</creation-date>
+                <change-date>01/01/0001 00:00:00</change-date>
+                <revision-count>0</revision-count>
+                <version />
+              </meta>
+              <abstract-items />
+              <sub-models>
+                <model id="p7e57d3bc587141998753a4e43ade41c2_822514128" name="Services" namespace="" order-index="1">
+                  <meta>
+                    <authors>
+                      <author> </author>
+                    </authors>
+                    <description />
+                    <creation-date>11/06/2022 16:51:07</creation-date>
+                    <change-date>01/01/0001 00:00:00</change-date>
+                    <revision-count>0</revision-count>
+                    <version />
+                  </meta>
+                  <abstract-items />
+                  <sub-models />
+                  <diagram type="uml-object" id="p035f2a2d08ba4f3dae1791f1503a9611_649752501" name="Abstracts" order-index="1" expanded="true" uid="" auto-routed-paths="false" default-line-style="default">
+                    <style>
+                      <background-color index="1" color="#FFFFFFFF" />
+                      <background-color index="2" color="#FFFFFFFF" />
+                      <background-type type="solid" />
+                    </style>
+                    <meta>
+                      <authors>
+                        <author> </author>
+                      </authors>
+                      <description />
+                      <creation-date>11/06/2022 16:51:20</creation-date>
+                      <change-date>11/06/2022 17:01:01</change-date>
+                      <revision-count>0</revision-count>
+                      <version />
+                    </meta>
+                    <abstract-items>
+                      <item id="1dccc832d02c4ce7b8aa6ed5f20e0a3e" cid="ELEM002" type="template-parameter" name="TRepository" owner="46d6acea9ee94f478d35fd94222823d1" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 16:53:43">
+                        <template-parameter />
+                      </item>
+                      <item id="7399b648d3cb40019de69d5f8ea9f2b9" cid="C002" type="class" name="AbstractRepositoryService" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 16:51:40" visibility="undefined" is-abstract="true">
+                        <stereotypes>
+                          <stereotype name="class" />
+                        </stereotypes>
+                        <stereotype-instances>
+                          <stereotype id="7399b648d3cb40019de69d5f8ea9f2b9_class_c" type="class" ref="" />
+                        </stereotype-instances>
+                        <owned-items />
+                        <template-parameters>
+                          <template-parameter id="td4e45cb8f4e5405aba338a3cd8687421126" name="TRepository" kind="" default-value="" ref="973f3350bf004251bfd79b861f6bfe4f" />
+                        </template-parameters>
+                        <source-codes>
+                          <source-code language="ActionScript" />
+                        </source-codes>
+                      </item>
+                      <item id="46d6acea9ee94f478d35fd94222823d1" cid="C003" type="class" name="AbstractRepositoryService" creator="CDoZfQE0eoPT0twKUywpA1ytAerZlrAks6wQJtSziyhd5T57" creation-date="11/06/2022 16:53:13" visibility="undefined" is-abstract="true">
+                        <stereotypes>
+                          <stereotype name="class" />
+                        </stereotypes>
+                        <stereotype-instances>
+                          <stereotype id="46d6acea9ee94f478d35fd94222823d1_class_c" type="class" ref="" />
+                        </stereotype-instances>
+                        <owned-items />
+                        <template-parameters>
+                          <template-parameter id="tdf2e616fc6ee47dd9dd448158b23b5e3373" name="TRepository" kind="" default-value="" ref="1dccc832d02c4ce7b8aa6ed5f20e0a3e" />
+                        </template-parameters>
+                        <source-codes>
+                          <source-code language="ActionScript" />
+                        </source-codes>
+                      </item>
+                    </abstract-items>
+                    <layer id="974947da2bfc444388bc6e89db6ee384" name="Default" visible="true" enabled="true" locked="false">
+                      <item id="46d6acea9ee94f478d35fd94222823d1" iid="53d0321243e44a419dacd0a0a3868405" show-fields="true" creation-date="11/06/2022 16:53:13" order-index="0" type="entity">
+                        <layout ax="428" ay="228" awidth="140" aheight="160" x="428" y="228" width="140" height="160" />
+                        <classifier />
+                        <class />
+                      </item>
+                    </layer>
+                  </diagram>
+                </model>
+              </sub-models>
+            </model>
+            <model id="p86283f6d46a746afabaffdd167058442_433835851" name="Customer" namespace="" order-index="3">
+              <meta>
+                <authors>
+                  <author> </author>
+                </authors>
+                <description />
+                <creation-date>11/06/2022 17:08:04</creation-date>
+                <change-date>01/01/0001 00:00:00</change-date>
+                <revision-count>0</revision-count>
+                <version />
+              </meta>
+              <abstract-items />
+              <sub-models>
+                <model id="pc102eb3f8c0042f0b39c1555bb31fd00_155811898" name="Services" namespace="" order-index="1">
+                  <meta>
+                    <authors>
+                      <author> </author>
+                    </authors>
+                    <description />
+                    <creation-date>11/06/2022 17:08:19</creation-date>
+                    <change-date>01/01/0001 00:00:00</change-date>
+                    <revision-count>0</revision-count>
+                    <version />
+                  </meta>
+                  <abstract-items />
+                  <sub-models />
+                </model>
+              </sub-models>
+            </model>
+          </sub-models>
+        </model>
+      </sub-models>
+    </model>
   </models>
 </sim-project>

+ 46 - 0
Common/qdr.app.qlbrc.common/Repositories/QlbrcTenantCodeTrackedRepository.cs

@@ -0,0 +1,46 @@
+using System.Diagnostics;
+using Quadarax.Application.QLiberace.Common.Domain;
+using Quadarax.Application.QLiberace.Common.Entities.Base;
+using Quadarax.Foundation.Core.Data;
+using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.Data.Extensions;
+using Quadarax.Foundation.Core.Data.Interface;
+using Quadarax.Foundation.Core.Data.Interface.Domain;
+
+namespace Quadarax.Application.QLiberace.Common.Repositories
+{
+    public abstract class QlbrcTenantCodeTrackedRepository<TEntity> : QlbrcTrackedRepository<TEntity> where TEntity : QlbrcEntityTenantCode, new()
+    {
+
+        protected string? TenantCode => OperationContext.GetContext<QlbrcContext>().TenantCode;
+        protected QlbrcTenantCodeTrackedRepository(IUnitOfWork<IDataDomain> unitOfWork, QlbrcContext operationContext) : base(unitOfWork, operationContext)
+        {
+        }
+
+        public override IQueryable<TEntity> Query(IPaging paging,bool usingUncommited=false)
+        {
+            var result = base.Query(paging, usingUncommited).Where(x => Equals(x.TenantCode ,TenantCode));
+#if DEBUG
+            Debug.WriteLine($"Repo '{GetType().Name}' Query returns {result.Count()} rows.");
+#endif
+            return result;
+        }
+
+        public override TEntity Get(long id)
+        {
+            return Query(new Paging()).MultiInclude(DefaultIncludes.ToArray()).FirstOrDefault(x => Equals(x.Id, id) && Equals(x.TenantCode,TenantCode))!;
+        }
+
+        public override IQueryable<TEntity> Get(IEnumerable<long> ids)
+        {
+            return Query(new Paging()).Where(x => ids.Contains(x.Id) && Equals(x.TenantCode,TenantCode));
+        }
+
+        public override TEntity New()
+        {
+            var entity = base.New();
+            entity.TenantCode = TenantCode!;
+            return entity;
+        }
+    }
+}

+ 0 - 0
Common/qdr.app.qlbrc.common/Repositories/QlbrcTracedTenantRepository.cs → Common/qdr.app.qlbrc.common/Repositories/QlbrcTenantTrackedRepository.cs


+ 128 - 0
Common/qdr.fnd.core/Value/Base32Encoding.cs

@@ -0,0 +1,128 @@
+using System;
+
+namespace Quadarax.Foundation.Core.Value
+{
+public class Base32Encoding
+{
+    public static byte[] ToBytes(string input)
+    {
+        if (string.IsNullOrEmpty(input))
+        {
+            throw new ArgumentNullException(nameof(input));
+        }
+
+        input = input.TrimEnd('='); //remove padding characters
+        var byteCount = input.Length * 5 / 8; //this must be TRUNCATED
+        var returnArray = new byte[byteCount];
+        
+        byte curByte = 0, bitsRemaining = 8;
+        int mask = 0, arrayIndex = 0;
+
+        foreach (var c in input)
+        {
+            var cValue = CharToValue(c);
+
+            if (bitsRemaining > 5)
+            {
+                mask = cValue << (bitsRemaining - 5);
+                curByte = (byte)(curByte | mask);
+                bitsRemaining -= 5;
+            }
+            else
+            {
+                mask = cValue >> (5 - bitsRemaining);
+                curByte = (byte)(curByte | mask);
+                returnArray[arrayIndex++] = curByte;
+                curByte = (byte)(cValue << (3 + bitsRemaining));
+                bitsRemaining += 3;
+            }
+        }
+
+        //if we didn't end with a full byte
+        if (arrayIndex != byteCount)
+        {
+            returnArray[arrayIndex] = curByte;
+        }
+
+        return returnArray;
+    }
+
+    public static string ToString(byte[] input)
+    {
+        if (input == null || input.Length == 0)
+        {
+            throw new ArgumentNullException(nameof(input));
+        }
+
+        var charCount = (int)Math.Ceiling(input.Length / 5d) * 8;
+        var returnArray = new char[charCount];
+
+        byte nextChar = 0, bitsRemaining = 5;
+        var arrayIndex = 0;
+
+        foreach (var b in input)
+        {
+            nextChar = (byte)(nextChar | (b >> (8 - bitsRemaining)));
+            returnArray[arrayIndex++] = ValueToChar(nextChar);
+            
+            if (bitsRemaining < 4)
+            {
+                nextChar = (byte)((b >> (3 - bitsRemaining)) & 31);
+                returnArray[arrayIndex++] = ValueToChar(nextChar);
+                bitsRemaining += 5;
+            }
+            
+            bitsRemaining -= 3;
+            nextChar = (byte)((b << bitsRemaining) & 31);
+        }
+
+        //if we didn't end with a full char
+        if (arrayIndex != charCount)
+        {
+            returnArray[arrayIndex++] = ValueToChar(nextChar);
+            while (arrayIndex != charCount) returnArray[arrayIndex++] = '='; //padding
+        }
+
+        return new string(returnArray);
+    }
+
+    private static int CharToValue(char c)
+    {
+        var value = (int)c;
+        
+        //65-90 == uppercase letters
+        if (value < 91 && value > 64)
+        {
+            return value - 65;
+        }
+        //50-55 == numbers 2-7
+        if (value < 56 && value > 49)
+        {
+            return value - 24;
+        }
+        //97-122 == lowercase letters
+        if (value < 123 && value > 96)
+        {
+            return value - 97;
+        }
+
+        throw new ArgumentException("Character is not a Base32 character.", "c");
+    }
+
+    private static char ValueToChar(byte b)
+    {
+        if (b < 26)
+        {
+            return (char)(b + 65);
+        }
+
+        if (b < 32)
+        {
+            return (char)(b + 24);
+        }
+
+        throw new ArgumentException("Byte is not a value Base32 value.", "b");
+    }
+
+}
+}

+ 13 - 0
Common/qdr.fnd.core/Value/Extensions/GuidExt.cs

@@ -0,0 +1,13 @@
+using System;
+
+namespace Quadarax.Foundation.Core.Value.Extensions
+{
+    public static class GuidExt
+    {
+        public static string ToBase32String(this Guid owner)
+        {
+            var array = owner.ToByteArray();
+            return Base32Encoding.ToString(array);
+        }
+    }
+}

+ 21 - 0
Modules/qdr.app.qlbrc.customer/Repositories/RepoContact.cs

@@ -0,0 +1,21 @@
+using Quadarax.Application.QLiberace.Common.Repositories;
+using Quadarax.Application.QLiberace.Common.Domain;
+using Quadarax.Application.QLiberace.Customer.Entities;
+using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.Data.Interface;
+using Quadarax.Foundation.Core.Data.Interface.Domain;
+
+namespace Quadarax.Application.QLiberace.Customer.Repositories
+{
+    public class RepoContact: QlbrcTenantCodeTrackedRepository<Contact>
+    {
+        public RepoContact(IUnitOfWork<IDataDomain> unitOfWork, QlbrcContext operationContext) : base(unitOfWork, operationContext)
+        {
+        }
+
+        public IQueryable<Contact> GetCustomerContacts(long customerId, IPaging paging)
+        {
+            return Query(paging).Where(x => x.CustomerId == customerId);
+        }
+    }
+}

+ 30 - 0
Modules/qdr.app.qlbrc.customer/Repositories/RepoCustomer.cs

@@ -0,0 +1,30 @@
+using Quadarax.Application.QLiberace.Common.Domain;
+using Quadarax.Application.QLiberace.Common.Repositories;
+using Quadarax.Foundation.Core.Data;
+using Quadarax.Foundation.Core.Data.Domain;
+using Quadarax.Foundation.Core.Data.Interface.Domain;
+using Quadarax.Foundation.Core.Value.Extensions;
+
+
+namespace Quadarax.Application.QLiberace.Customer.Repositories
+{
+    public class RepoCustomer : QlbrcTenantCodeTrackedRepository<Entities.Customer>
+    {
+        public RepoCustomer(IUnitOfWork<IDataDomain> unitOfWork, QlbrcContext operationContext) : base(unitOfWork, operationContext)
+        {
+        }
+
+        public override Entities.Customer New()
+        {
+            var entity = base.New();
+            entity.Code = Guid.NewGuid().ToBase32String();
+            return entity;
+        }
+
+        public Entities.Customer? GetByCode(string customerCode, bool useUncomitted = false)
+        {
+            if (string.IsNullOrEmpty(customerCode)) throw new ArgumentNullException(nameof(customerCode));
+            return Query(Paging.NoPaging(), useUncomitted).FirstOrDefault(x => string.Equals(x.Code, customerCode));
+        }
+    }
+}