mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-10-14 17:54:42 +00:00
* Remove restating comments in backend * Remove restating comments in frontend stories * Remove restating comments in pipeline * Remove restating comments in pipeline scripts * Restore location-clear comment in BreweryRepository * Remove stale/restating comments found in second pass * Restore mock curated-data branch comment in main.cc * Remove more restating/filler comments in backend * Document account-management endpoints, compose files, and env generator * Squashed commit of the following: commit a8a5b8abd9969859c695092fae6990d03b2135ed Author: Aaron Po <aaron.po97@gmail.com> Date: Sun Aug 23 23:53:56 2026 -0400 Add reverse geocoding for brewery street addresses (#245) * Add geocoding to seed application, remove postal codes from generator Update comments * Update pipeline class diagram for OpenAI generator * Update pipeline activity diagram for brewery coordinates and OpenAI backend * Add mailpit, production, db-only, and minimal environments to deployment diagram * Fix authentication flow diagram for Identity migration * Add account-management flows to authentication diagram * Fix database schema diagram note referencing removed AuthRepository
1 line
71 KiB
XML
1 line
71 KiB
XML
<?plantuml 1.2026.2?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="CLASS" height="1329px" preserveAspectRatio="none" style="width:4429px;height:1329px;background:#FFFFFF;" version="1.1" viewBox="0 0 4429 1329" width="4429px" zoomAndPan="magnify"><title>Database Schema</title><defs/><g><g class="title" data-source-line="7"><text fill="#000000" font-family="Arial" font-size="22" font-weight="bold" lengthAdjust="spacing" textLength="194.4036" x="2112.7982" y="38.5181">Database Schema</text></g><!--cluster User & Auth--><g class="cluster" data-qualified-name="User . Auth" data-source-line="10" id="ent0002"><rect fill="#FFFFFF" height="671.49" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="1486" x="2219" y="62.9641"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="83.3872" x="2920.3064" y="79.93">User & Auth</text></g><!--cluster Location--><g class="cluster" data-qualified-name="Location" data-source-line="65" id="ent0009"><rect fill="#FFFFFF" height="614.29" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="332" x="4091" y="110.6341"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="59.6678" x="4227.1661" y="127.6">Location</text></g><!--cluster Brewery--><g class="cluster" data-qualified-name="Brewery" data-source-line="89" id="ent0013"><rect fill="#FFFFFF" height="382.17" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="1099" x="1088" y="627.4241"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="57.6623" x="1608.6689" y="644.39">Brewery</text></g><!--cluster Beer (*)--><g class="cluster" data-qualified-name="Beer ..." data-source-line="120" id="ent0017"><rect fill="#FFFFFF" height="700.1" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="710" x="12" y="568.6441"/><text fill="#000000" font-family="Arial" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="53.4903" x="340.2549" y="585.61">Beer (*)</text></g><!--class User--><g class="entity" data-qualified-name="User . Auth.User" data-source-line="11" id="ent0003"><rect fill="#FFFFFF" height="197.6113" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="294.213" x="2803.89" y="100.9641"/><ellipse cx="2905.3306" cy="115.4981" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M2908.2994,121.9981 L2900.9869,121.9981 L2900.9869,109.3262 L2908.2994,109.3262 L2908.2994,111.2012 L2903.0338,111.2012 L2903.0338,114.4668 L2907.9869,114.4668 L2907.9869,116.3262 L2903.0338,116.3262 L2903.0338,120.1231 L2908.2994,120.1231 L2908.2994,121.9981 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="83.8317" x="2922.8306" y="120.93">UserAccount</text><line style="stroke:#000000;stroke-width:1;" x1="2804.89" x2="3097.103" y1="130.032" y2="130.032"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2814.89" cy="145.066" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="270.213" x="2821.89" y="148.998">UserAccountID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="2804.89" x2="3097.103" y1="157.0999" y2="157.0999"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2814.89" cy="172.1339" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="235.3111" x="2821.89" y="176.0659">Username: VARCHAR(64) «UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2814.89" cy="191.2018" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="181.2853" x="2821.89" y="195.1338">FirstName: NVARCHAR(128)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2814.89" cy="210.2697" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="179.8153" x="2821.89" y="214.2017">LastName: NVARCHAR(128)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2814.89" cy="229.3376" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="211.1612" x="2821.89" y="233.2696">Email: VARCHAR(128) «UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2814.89" cy="248.4056" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.0775" x="2821.89" y="252.3375">CreatedAt: DATETIME</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="146.0054" x="2821.89" y="271.4055">UpdatedAt: DATETIME</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2814.89" cy="286.5414" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="121.0995" x="2821.89" y="290.4734">DateOfBirth: DATE</text></g><!--class Cred--><g class="entity" data-qualified-name="User . Auth.Cred" data-source-line="23" id="ent0004"><rect fill="#FFFFFF" height="178.5433" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="308.8149" x="2234.59" y="358.5741"/><ellipse cx="2336.0306" cy="373.1081" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M2338.9994,379.6081 L2331.6869,379.6081 L2331.6869,366.9362 L2338.9994,366.9362 L2338.9994,368.8112 L2333.7338,368.8112 L2333.7338,372.0768 L2338.6869,372.0768 L2338.6869,373.9362 L2333.7338,373.9362 L2333.7338,377.7331 L2338.9994,377.7331 L2338.9994,379.6081 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="98.4336" x="2353.5306" y="378.54">UserCredential</text><line style="stroke:#000000;stroke-width:1;" x1="2235.59" x2="2542.4049" y1="387.642" y2="387.642"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2245.59" cy="402.676" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="284.8149" x="2252.59" y="406.608">UserCredentialID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="2235.59" x2="2542.4049" y1="414.7099" y2="414.7099"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2245.59" cy="429.7439" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="269.009" x="2252.59" y="433.6759">UserAccountID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2245.59" cy="448.8118" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.0775" x="2252.59" y="452.7438">CreatedAt: DATETIME</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2245.59" cy="467.8797" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="115.4715" x="2252.59" y="471.8117">Expiry: DATETIME</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2245.59" cy="486.9476" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="146.9714" x="2252.59" y="490.8796">Hash: NVARCHAR(256)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2245.59" cy="506.0156" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="96.6416" x="2252.59" y="509.9475">IsRevoked: BIT</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="145.3054" x="2252.59" y="529.0155">RevokedAt: DATETIME</text></g><!--class Verify--><g class="entity" data-qualified-name="User . Auth.Verify" data-source-line="34" id="ent0005"><rect fill="#FFFFFF" height="102.2717" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="354.9727" x="2578.51" y="396.7041"/><ellipse cx="2699.6975" cy="411.2381" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M2702.6663,417.7381 L2695.3538,417.7381 L2695.3538,405.0662 L2702.6663,405.0662 L2702.6663,406.9412 L2697.4007,406.9412 L2697.4007,410.2068 L2702.3538,410.2068 L2702.3538,412.0662 L2697.4007,412.0662 L2697.4007,415.8631 L2702.6663,415.8631 L2702.6663,417.7381 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="105.0976" x="2717.1975" y="416.67">UserVerification</text><line style="stroke:#000000;stroke-width:1;" x1="2579.51" x2="2932.4827" y1="425.772" y2="425.772"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2589.51" cy="440.806" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="291.4789" x="2596.51" y="444.738">UserVerificationID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="2579.51" x2="2932.4827" y1="452.8399" y2="452.8399"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2589.51" cy="467.8739" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="330.9727" x="2596.51" y="471.8059">UserAccountID: UNIQUEIDENTIFIER «FK, UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2589.51" cy="486.9418" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="213.0231" x="2596.51" y="490.8738">VerificationDateTime: DATETIME</text></g><!--class Avatar--><g class="entity" data-qualified-name="User . Auth.Avatar" data-source-line="41" id="ent0006"><rect fill="#FFFFFF" height="102.2717" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="354.9727" x="2968.51" y="396.7041"/><ellipse cx="3095.7595" cy="411.2381" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M3098.7283,417.7381 L3091.4158,417.7381 L3091.4158,405.0662 L3098.7283,405.0662 L3098.7283,406.9412 L3093.4626,406.9412 L3093.4626,410.2068 L3098.4158,410.2068 L3098.4158,412.0662 L3093.4626,412.0662 L3093.4626,415.8631 L3098.7283,415.8631 L3098.7283,417.7381 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="92.9737" x="3113.2595" y="416.67">UserAvatar (*)</text><line style="stroke:#000000;stroke-width:1;" x1="2969.51" x2="3322.4827" y1="425.772" y2="425.772"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2979.51" cy="440.806" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="259.601" x="2986.51" y="444.738">UserAvatarID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="2969.51" x2="3322.4827" y1="452.8399" y2="452.8399"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2979.51" cy="467.8739" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="330.9727" x="2986.51" y="471.8059">UserAccountID: UNIQUEIDENTIFIER «FK, UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2979.51" cy="486.9418" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="224.2932" x="2986.51" y="490.8738">PhotoID: UNIQUEIDENTIFIER «FK»</text></g><!--class Follow--><g class="entity" data-qualified-name="User . Auth.Follow" data-source-line="48" id="ent0007"><rect fill="#FFFFFF" height="121.3396" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="293.009" x="3358.5" y="387.1741"/><ellipse cx="3454.8517" cy="401.7081" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M3457.8204,408.2081 L3450.5079,408.2081 L3450.5079,395.5362 L3457.8204,395.5362 L3457.8204,397.4112 L3452.5548,397.4112 L3452.5548,400.6768 L3457.5079,400.6768 L3457.5079,402.5362 L3452.5548,402.5362 L3452.5548,406.3331 L3457.8204,406.3331 L3457.8204,408.2081 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="92.8056" x="3472.3517" y="407.14">UserFollow (*)</text><line style="stroke:#000000;stroke-width:1;" x1="3359.5" x2="3650.509" y1="416.242" y2="416.242"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="3369.5" cy="431.276" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="259.433" x="3376.5" y="435.208">UserFollowID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="3359.5" x2="3650.509" y1="443.3099" y2="443.3099"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="3369.5" cy="458.3439" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="269.009" x="3376.5" y="462.2759">UserAccountID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="3369.5" cy="477.4118" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="248.485" x="3376.5" y="481.3438">FollowingID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="3369.5" cy="496.4797" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.0775" x="3376.5" y="500.4117">CreatedAt: DATETIME</text></g><!--class Photo--><g class="entity" data-qualified-name="User . Auth.Photo" data-source-line="56" id="ent0008"><rect fill="#FFFFFF" height="121.3396" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="289.313" x="2618.34" y="597.1141"/><ellipse cx="2729.8116" cy="611.6481" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M2732.7804,618.1481 L2725.4679,618.1481 L2725.4679,605.4762 L2732.7804,605.4762 L2732.7804,607.3512 L2727.5147,607.3512 L2727.5147,610.6168 L2732.4679,610.6168 L2732.4679,612.4762 L2727.5147,612.4762 L2727.5147,616.2731 L2732.7804,616.2731 L2732.7804,618.1481 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="58.8698" x="2747.3116" y="617.08">Photo (*)</text><line style="stroke:#000000;stroke-width:1;" x1="2619.34" x2="2906.653" y1="626.182" y2="626.182"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2629.34" cy="641.216" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="225.4971" x="2636.34" y="645.148">PhotoID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="2619.34" x2="2906.653" y1="653.2499" y2="653.2499"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="176.5393" x="2636.34" y="672.2159">Hyperlink: NVARCHAR(256)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2629.34" cy="687.3518" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="265.313" x="2636.34" y="691.2838">UploadedByID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="2629.34" cy="706.4197" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="153.0334" x="2636.34" y="710.3517">UploadedAt: DATETIME</text></g><!--class Country--><g class="entity" data-qualified-name="Location.Country" data-source-line="66" id="ent0010"><rect fill="#FFFFFF" height="102.2717" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="262.9791" x="4125.51" y="148.6341"/><ellipse cx="4226.9506" cy="163.1681" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M4229.9194,169.6681 L4222.6069,169.6681 L4222.6069,156.9962 L4229.9194,156.9962 L4229.9194,158.8712 L4224.6538,158.8712 L4224.6538,162.1368 L4229.6069,162.1368 L4229.6069,163.9962 L4224.6538,163.9962 L4224.6538,167.7931 L4229.9194,167.7931 L4229.9194,169.6681 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="52.5978" x="4244.4506" y="168.6">Country</text><line style="stroke:#000000;stroke-width:1;" x1="4126.51" x2="4387.4891" y1="177.702" y2="177.702"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4136.51" cy="192.736" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="238.9791" x="4143.51" y="196.668">CountryID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="4126.51" x2="4387.4891" y1="204.7699" y2="204.7699"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4136.51" cy="219.8039" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="205.4632" x="4143.51" y="223.7359">CountryName: NVARCHAR(100)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4136.51" cy="238.8718" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="202.7612" x="4143.51" y="242.8038">ISO3166_1: CHAR(2) «UNIQUE»</text></g><!--class StateProvince--><g class="entity" data-qualified-name="Location.StateProvince" data-source-line="73" id="ent0011"><rect fill="#FFFFFF" height="121.3396" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="300.6389" x="4106.68" y="387.1741"/><ellipse cx="4208.1206" cy="401.7081" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M4211.0894,408.2081 L4203.7769,408.2081 L4203.7769,395.5362 L4211.0894,395.5362 L4211.0894,397.4112 L4205.8238,397.4112 L4205.8238,400.6768 L4210.7769,400.6768 L4210.7769,402.5362 L4205.8238,402.5362 L4205.8238,406.3331 L4211.0894,406.3331 L4211.0894,408.2081 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="90.2577" x="4225.6206" y="407.14">StateProvince</text><line style="stroke:#000000;stroke-width:1;" x1="4107.68" x2="4406.3189" y1="416.242" y2="416.242"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4117.68" cy="431.276" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="276.6389" x="4124.68" y="435.208">StateProvinceID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="4107.68" x2="4406.3189" y1="443.3099" y2="443.3099"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4117.68" cy="458.3439" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="243.123" x="4124.68" y="462.2759">StateProvinceName: NVARCHAR(100)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4117.68" cy="477.4118" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="202.7612" x="4124.68" y="481.3438">ISO3166_2: CHAR(6) «UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4117.68" cy="496.4797" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="237.7751" x="4124.68" y="500.4117">CountryID: UNIQUEIDENTIFIER «FK»</text></g><!--class City--><g class="entity" data-qualified-name="Location.City" data-source-line="81" id="ent0012"><rect fill="#FFFFFF" height="102.2717" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="299.4349" x="4107.28" y="606.6441"/><ellipse cx="4240.9205" cy="621.1781" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M4243.8893,627.6781 L4236.5768,627.6781 L4236.5768,615.0062 L4243.8893,615.0062 L4243.8893,616.8812 L4238.6236,616.8812 L4238.6236,620.1468 L4243.5768,620.1468 L4243.5768,622.0062 L4238.6236,622.0062 L4238.6236,625.8031 L4243.8893,625.8031 L4243.8893,627.6781 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="24.6539" x="4258.4205" y="626.61">City</text><line style="stroke:#000000;stroke-width:1;" x1="4108.28" x2="4405.7149" y1="635.712" y2="635.712"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4118.28" cy="650.746" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="211.0352" x="4125.28" y="654.678">CityID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="4108.28" x2="4405.7149" y1="662.7799" y2="662.7799"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4118.28" cy="677.8139" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="177.5193" x="4125.28" y="681.7459">CityName: NVARCHAR(100)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="4118.28" cy="696.8818" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="275.4349" x="4125.28" y="700.8138">StateProvinceID: UNIQUEIDENTIFIER «FK»</text></g><!--class Brewery--><g class="entity" data-qualified-name="Brewery.Brewery" data-source-line="90" id="ent0014"><rect fill="#FFFFFF" height="159.4754" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="293.681" x="1112.16" y="816.5941"/><ellipse cx="1213.6006" cy="831.1281" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M1216.5694,837.6281 L1209.2569,837.6281 L1209.2569,824.9562 L1216.5694,824.9562 L1216.5694,826.8312 L1211.3038,826.8312 L1211.3038,830.0968 L1216.2569,830.0968 L1216.2569,831.9562 L1211.3038,831.9562 L1211.3038,835.7531 L1216.5694,835.7531 L1216.5694,837.6281 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="83.2997" x="1231.1006" y="836.56">BreweryPost</text><line style="stroke:#000000;stroke-width:1;" x1="1113.16" x2="1404.841" y1="845.662" y2="845.662"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1123.16" cy="860.696" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="269.681" x="1130.16" y="864.628">BreweryPostID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="1113.16" x2="1404.841" y1="872.7299" y2="872.7299"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1123.16" cy="887.7639" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="207.4651" x="1130.16" y="891.6959">BreweryName: NVARCHAR(256)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1123.16" cy="906.8318" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="246.6231" x="1130.16" y="910.7638">PostedByID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1123.16" cy="925.8997" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="188.7192" x="1130.16" y="929.8317">Description: NVARCHAR(512)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1123.16" cy="944.9676" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.0775" x="1130.16" y="948.8996">CreatedAt: DATETIME</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="146.0054" x="1130.16" y="967.9675">UpdatedAt: DATETIME</text></g><!--class BreweryLoc--><g class="entity" data-qualified-name="Brewery.BreweryLoc" data-source-line="100" id="ent0015"><rect fill="#FFFFFF" height="178.5433" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="354.4407" x="1808.78" y="807.0541"/><ellipse cx="1912.5166" cy="821.5881" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M1915.4854,828.0881 L1908.1729,828.0881 L1908.1729,815.4162 L1915.4854,815.4162 L1915.4854,817.2912 L1910.2197,817.2912 L1910.2197,820.5568 L1915.1729,820.5568 L1915.1729,822.4162 L1910.2197,822.4162 L1910.2197,826.2131 L1915.4854,826.2131 L1915.4854,828.0881 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="139.4675" x="1930.0166" y="827.02">BreweryPostLocation</text><line style="stroke:#000000;stroke-width:1;" x1="1809.78" x2="2162.2207" y1="836.122" y2="836.122"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1819.78" cy="851.156" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="325.8488" x="1826.78" y="855.088">BreweryPostLocationID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="1809.78" x2="2162.2207" y1="863.1899" y2="863.1899"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1819.78" cy="878.2239" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="330.4407" x="1826.78" y="882.1559">BreweryPostID: UNIQUEIDENTIFIER «FK, UNIQUE»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1819.78" cy="897.2918" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="202.1452" x="1826.78" y="901.2238">AddressLine1: NVARCHAR(256)</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="202.1452" x="1826.78" y="920.2917">AddressLine2: NVARCHAR(256)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1819.78" cy="935.4276" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="179.3673" x="1826.78" y="939.3596">PostalCode: NVARCHAR(20)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1819.78" cy="954.4956" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="209.8312" x="1826.78" y="958.4275">CityID: UNIQUEIDENTIFIER «FK»</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="170.8693" x="1826.78" y="977.4955">Coordinates: GEOGRAPHY</text></g><!--class BreweryPhoto--><g class="entity" data-qualified-name="Brewery.BreweryPhoto" data-source-line="111" id="ent0016"><rect fill="#FFFFFF" height="121.3396" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="332.7969" x="1440.6" y="835.6541"/><ellipse cx="1532.1637" cy="850.1881" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M1535.1325,856.6881 L1527.82,856.6881 L1527.82,844.0162 L1535.1325,844.0162 L1535.1325,845.8912 L1529.8668,845.8912 L1529.8668,849.1568 L1534.82,849.1568 L1534.82,851.0162 L1529.8668,851.0162 L1529.8668,854.8131 L1535.1325,854.8131 L1535.1325,856.6881 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="142.1695" x="1549.6637" y="855.62">BreweryPostPhoto (*)</text><line style="stroke:#000000;stroke-width:1;" x1="1441.6" x2="1772.3969" y1="864.722" y2="864.722"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1451.6" cy="879.756" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="308.7969" x="1458.6" y="883.688">BreweryPostPhotoID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="1441.6" x2="1772.3969" y1="891.7899" y2="891.7899"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1451.6" cy="906.8239" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="268.477" x="1458.6" y="910.7559">BreweryPostID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1451.6" cy="925.8918" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="224.2932" x="1458.6" y="929.8238">PhotoID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="1451.6" cy="944.9597" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="132.7195" x="1458.6" y="948.8917">LinkedAt: DATETIME</text></g><!--class BeerStyle--><g class="entity" data-qualified-name="Beer ....BeerStyle" data-source-line="121" id="ent0018"><rect fill="#FFFFFF" height="102.2717" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="280.717" x="351.64" y="606.6441"/><ellipse cx="447.3407" cy="621.1781" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M450.3094,627.6781 L442.9969,627.6781 L442.9969,615.0062 L450.3094,615.0062 L450.3094,616.8812 L445.0438,616.8812 L445.0438,620.1468 L449.9969,620.1468 L449.9969,622.0062 L445.0438,622.0062 L445.0438,625.8031 L450.3094,625.8031 L450.3094,627.6781 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="81.8157" x="464.8407" y="626.61">BeerStyle (*)</text><line style="stroke:#000000;stroke-width:1;" x1="352.64" x2="631.357" y1="635.712" y2="635.712"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="362.64" cy="650.746" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="248.443" x="369.64" y="654.678">BeerStyleID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="352.64" x2="631.357" y1="662.7799" y2="662.7799"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="362.64" cy="677.8139" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="256.717" x="369.64" y="681.7459">StyleName: NVARCHAR(100) «UNIQUE»</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="194.5432" x="369.64" y="700.8138">Description: NVARCHAR(MAX)</text></g><!--class Beer--><g class="entity" data-qualified-name="Beer ....Beer" data-source-line="128" id="ent0019"><rect fill="#FFFFFF" height="235.7471" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="275.705" x="354.15" y="778.4541"/><ellipse cx="448.6887" cy="792.9881" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M451.6574,799.4881 L444.3449,799.4881 L444.3449,786.8162 L451.6574,786.8162 L451.6574,788.6912 L446.3918,788.6912 L446.3918,791.9568 L451.3449,791.9568 L451.3449,793.8162 L446.3918,793.8162 L446.3918,797.6131 L451.6574,797.6131 L451.6574,799.4881 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="79.1277" x="466.1887" y="798.42">BeerPost (*)</text><line style="stroke:#000000;stroke-width:1;" x1="355.15" x2="628.855" y1="807.522" y2="807.522"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="365.15" cy="822.556" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="245.7551" x="372.15" y="826.488">BeerPostID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="355.15" x2="628.855" y1="834.5899" y2="834.5899"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="365.15" cy="849.6239" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="152.8654" x="372.15" y="853.5559">Name: NVARCHAR(100)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="365.15" cy="868.6918" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="194.5432" x="372.15" y="872.6238">Description: NVARCHAR(MAX)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="365.15" cy="887.7597" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="122.5835" x="372.15" y="891.6917">ABV: DECIMAL(4,2)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="365.15" cy="906.8276" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="54.6418" x="372.15" y="910.7596">IBU: INT</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="365.15" cy="925.8956" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="246.6231" x="372.15" y="929.8275">PostedByID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="365.15" cy="944.9635" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="247.239" x="372.15" y="948.8955">BeerStyleID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="365.15" cy="964.0314" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="251.705" x="372.15" y="967.9634">BrewedByID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="365.15" cy="983.0993" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.0775" x="372.15" y="987.0313">CreatedAt: DATETIME</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="146.0054" x="372.15" y="1006.0992">UpdatedAt: DATETIME</text></g><!--class BeerPhoto--><g class="entity" data-qualified-name="Beer ....BeerPhoto" data-source-line="142" id="ent0020"><rect fill="#FFFFFF" height="121.3396" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="308.8709" x="397.56" y="1102.8041"/><ellipse cx="489.1237" cy="1117.3381" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M492.0924,1123.8381 L484.7799,1123.8381 L484.7799,1111.1662 L492.0924,1111.1662 L492.0924,1113.0412 L486.8268,1113.0412 L486.8268,1116.3068 L491.7799,1116.3068 L491.7799,1118.1662 L486.8268,1118.1662 L486.8268,1121.9631 L492.0924,1121.9631 L492.0924,1123.8381 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="118.2436" x="506.6237" y="1122.77">BeerPostPhoto (*)</text><line style="stroke:#000000;stroke-width:1;" x1="398.56" x2="705.4309" y1="1131.872" y2="1131.872"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="408.56" cy="1146.906" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="284.8709" x="415.56" y="1150.838">BeerPostPhotoID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="398.56" x2="705.4309" y1="1158.9399" y2="1158.9399"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="408.56" cy="1173.9739" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="244.5511" x="415.56" y="1177.9059">BeerPostID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="408.56" cy="1193.0418" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="224.2932" x="415.56" y="1196.9738">PhotoID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="408.56" cy="1212.1097" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="132.7195" x="415.56" y="1216.0417">LinkedAt: DATETIME</text></g><!--class BeerComment--><g class="entity" data-qualified-name="Beer ....BeerComment" data-source-line="150" id="ent0021"><rect fill="#FFFFFF" height="178.5433" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="334.8549" x="27.57" y="1074.2041"/><ellipse cx="119.1337" cy="1088.7381" fill="#FFFFFF" rx="9" ry="9" style="stroke:#000000;stroke-width:1;"/><path d="M122.1025,1095.2381 L114.79,1095.2381 L114.79,1082.5662 L122.1025,1082.5662 L122.1025,1084.4412 L116.8368,1084.4412 L116.8368,1087.7068 L121.79,1087.7068 L121.79,1089.5662 L116.8368,1089.5662 L116.8368,1093.3631 L122.1025,1093.3631 L122.1025,1095.2381 Z " fill="#000000"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="144.2274" x="136.6337" y="1094.17">BeerPostComment (*)</text><line style="stroke:#000000;stroke-width:1;" x1="28.57" x2="361.4249" y1="1103.272" y2="1103.272"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.57" cy="1118.306" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="310.8549" x="45.57" y="1122.238">BeerPostCommentID: UNIQUEIDENTIFIER «PK»</text><line style="stroke:#000000;stroke-width:1;" x1="28.57" x2="361.4249" y1="1130.3399" y2="1130.3399"/><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.57" cy="1145.3739" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="178.4853" x="45.57" y="1149.3059">Comment: NVARCHAR(250)</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.57" cy="1164.4418" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="244.5511" x="45.57" y="1168.3738">BeerPostID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.57" cy="1183.5097" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="283.0229" x="45.57" y="1187.4417">CommentedByID: UNIQUEIDENTIFIER «FK»</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.57" cy="1202.5776" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="73.0517" x="45.57" y="1206.5096">Rating: INT</text><g data-visibility-modifier="IE_MANDATORY"><ellipse cx="38.57" cy="1221.6456" fill="#FFFFFF" rx="3" ry="3" style="stroke:#000000;stroke-width:1;"/></g><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="141.0775" x="45.57" y="1225.5775">CreatedAt: DATETIME</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="146.0054" x="45.57" y="1244.6455">UpdatedAt: DATETIME</text></g><g class="entity" data-qualified-name="GMN43" data-source-line="192" id="ent0044"><path d="M3724.41,389.7241 L3724.41,505.9602 L4071.5802,505.9602 L4071.5802,399.7241 L4061.5802,389.7241 L3724.41,389.7241" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M4061.5802,389.7241 L4061.5802,399.7241 L4071.5802,399.7241 L4061.5802,389.7241" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="292.8773" x="3730.41" y="408.6211">Auth reads/writes (registration, login, credential</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="287.2093" x="3730.41" y="426.3271">rotation, verification) go through ASP.NET Core</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="323.6613" x="3730.41" y="444.0331">Identity's UserManager<ApplicationUser>, backed by</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="299.0652" x="3730.41" y="461.7392">Features.Auth's DapperUserStore - inline SQL, no</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="300.3132" x="3730.41" y="479.4452">stored procedures. Profile data still goes through</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="326.1702" x="3730.41" y="497.1512">Features.UserManagement's UserAccountRepository.</text></g><g class="entity" data-qualified-name="GMN46" data-source-line="201" id="ent0047"><path d="M737.72,855.9141 L737.72,936.7382 L1064.2722,936.7382 L1064.2722,865.9141 L1054.2722,855.9141 L737.72,855.9141" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1054.2722,855.9141 L1054.2722,865.9141 L1064.2722,865.9141 L1054.2722,855.9141" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="305.5522" x="743.72" y="874.8111">Backed by Features.Breweries' BreweryRepository</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="278.5903" x="743.72" y="892.5171">(Dapper); create/update/delete run inline SQL</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="294.6843" x="743.72" y="910.2231">inside a transaction, with optimistic concurrency</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="92.7811" x="743.72" y="927.9292">via RowVersion</text></g><!--link User to Cred--><g class="link" data-entity-1="ent0003" data-entity-2="ent0004" data-link-type="crowfoot" data-source-line="163" id="lnk22"><path codeLine="163" d="M2847.09,306.8841 C2847.09,345.5341 2847.09,372.7441 2847.09,372.7441 C2847.09,372.7441 2694.71,372.7441 2561.77,372.7441" fill="none" id="User-Cred" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2843.09" x2="2851.09" y1="302.8841" y2="302.8841"/><line style="stroke:#000000;stroke-width:1;" x1="2843.09" x2="2851.09" y1="305.8841" y2="305.8841"/><line style="stroke:#000000;stroke-width:1;" x1="2847.09" x2="2847.09" y1="306.8841" y2="298.8841"/><line style="stroke:#000000;stroke-width:1;" x1="2551.77" x2="2543.77" y1="372.7441" y2="378.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2551.77" x2="2543.77" y1="372.7441" y2="366.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2551.77" x2="2543.77" y1="372.7441" y2="372.7441"/><ellipse cx="2557.77" cy="372.7441" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.554" x="2710.36" y="368.6411">has</text></g><!--link User to Verify--><g class="link" data-entity-1="ent0003" data-entity-2="ent0005" data-link-type="association" data-source-line="164" id="lnk23"><path codeLine="164" d="M2890.29,306.8841 C2890.29,340.2141 2890.29,353.0541 2890.29,381.2241" fill="none" id="User-Verify" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2886.29" x2="2894.29" y1="302.8841" y2="302.8841"/><line style="stroke:#000000;stroke-width:1;" x1="2886.29" x2="2894.29" y1="305.8841" y2="305.8841"/><line style="stroke:#000000;stroke-width:1;" x1="2890.29" x2="2890.29" y1="306.8841" y2="298.8841"/><line style="stroke:#000000;stroke-width:1;" x1="2890.29" x2="2890.29" y1="385.2241" y2="396.2241"/><ellipse cx="2890.29" cy="385.2241" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2894.29" x2="2886.29" y1="392.2241" y2="392.2241"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.554" x="2868.29" y="343.4511">has</text></g><!--link User to Avatar--><g class="link" data-entity-1="ent0003" data-entity-2="ent0006" data-link-type="association" data-source-line="165" id="lnk24"><path codeLine="165" d="M3000.91,306.8841 C3000.91,340.2141 3000.91,353.0541 3000.91,381.2241" fill="none" id="User-Avatar" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2996.91" x2="3004.91" y1="302.8841" y2="302.8841"/><line style="stroke:#000000;stroke-width:1;" x1="2996.91" x2="3004.91" y1="305.8841" y2="305.8841"/><line style="stroke:#000000;stroke-width:1;" x1="3000.91" x2="3000.91" y1="306.8841" y2="298.8841"/><line style="stroke:#000000;stroke-width:1;" x1="3000.91" x2="3000.91" y1="385.2241" y2="396.2241"/><ellipse cx="3000.91" cy="385.2241" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="3004.91" x2="2996.91" y1="392.2241" y2="392.2241"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.554" x="2978.91" y="343.4511">has</text></g><!--link Avatar to Photo--><g class="link" data-entity-1="ent0006" data-entity-2="ent0008" data-link-type="crowfoot" data-source-line="166" id="lnk25"><path codeLine="166" d="M3146,517.3241 C3146,562.7341 3146,603.7441 3146,603.7441 C3146,603.7441 3024.47,603.7441 2916.07,603.7441" fill="none" id="Avatar-Photo" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="3146" x2="3140" y1="507.3241" y2="499.3241"/><line style="stroke:#000000;stroke-width:1;" x1="3146" x2="3152" y1="507.3241" y2="499.3241"/><line style="stroke:#000000;stroke-width:1;" x1="3146" x2="3146" y1="507.3241" y2="499.3241"/><ellipse cx="3146" cy="513.3241" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2912.07" x2="2912.07" y1="607.7441" y2="599.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2915.07" x2="2915.07" y1="607.7441" y2="599.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2916.07" x2="2908.07" y1="603.7441" y2="603.7441"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="52.039" x="3026.25" y="599.6411">refers to</text></g><!--link User to Follow--><g class="link" data-entity-1="ent0003" data-entity-2="ent0007" data-link-type="crowfoot" data-source-line="167" id="lnk26"><path codeLine="167" d="M3065.71,306.8941 C3065.71,353.3941 3065.71,390.7441 3065.71,390.7441 C3065.71,390.7441 3212.41,390.7441 3340.11,390.7441" fill="none" id="User-Follow" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="3061.71" x2="3069.71" y1="302.8941" y2="302.8941"/><line style="stroke:#000000;stroke-width:1;" x1="3061.71" x2="3069.71" y1="305.8941" y2="305.8941"/><line style="stroke:#000000;stroke-width:1;" x1="3065.71" x2="3065.71" y1="306.8941" y2="298.8941"/><line style="stroke:#000000;stroke-width:1;" x1="3350.11" x2="3358.11" y1="390.7441" y2="384.7441"/><line style="stroke:#000000;stroke-width:1;" x1="3350.11" x2="3358.11" y1="390.7441" y2="396.7441"/><line style="stroke:#000000;stroke-width:1;" x1="3350.11" x2="3358.11" y1="390.7441" y2="390.7441"/><ellipse cx="3344.11" cy="390.7441" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="146.2761" x="3018.98" y="386.6411">follows (UserAccountID)</text></g><!--link User to Follow--><g class="link" data-entity-1="ent0003" data-entity-2="ent0007" data-link-type="crowfoot" data-source-line="168" id="lnk27"><path codeLine="168" d="M3033.31,307.0241 C3033.31,354.7541 3033.31,393.7441 3033.31,393.7441 C3033.31,393.7441 3201.58,393.7441 3340.02,393.7441" fill="none" id="User-Follow-1" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="3029.31" x2="3037.31" y1="303.0241" y2="303.0241"/><line style="stroke:#000000;stroke-width:1;" x1="3029.31" x2="3037.31" y1="306.0241" y2="306.0241"/><line style="stroke:#000000;stroke-width:1;" x1="3033.31" x2="3033.31" y1="307.0241" y2="299.0241"/><line style="stroke:#000000;stroke-width:1;" x1="3350.02" x2="3358.02" y1="393.7441" y2="387.7441"/><line style="stroke:#000000;stroke-width:1;" x1="3350.02" x2="3358.02" y1="393.7441" y2="399.7441"/><line style="stroke:#000000;stroke-width:1;" x1="3350.02" x2="3358.02" y1="393.7441" y2="393.7441"/><ellipse cx="3344.02" cy="393.7441" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="154.3231" x="3149.31" y="389.6411">followed by (FollowingID)</text></g><!--link User to Photo--><g class="link" data-entity-1="ent0003" data-entity-2="ent0008" data-link-type="crowfoot" data-source-line="169" id="lnk28"><path codeLine="169" d="M2942.24,306.8841 C2942.24,425.6241 2942.24,600.7441 2942.24,600.7441 C2942.24,600.7441 2946.26,600.7441 2926.11,600.7441" fill="none" id="User-Photo" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2938.24" x2="2946.24" y1="302.8841" y2="302.8841"/><line style="stroke:#000000;stroke-width:1;" x1="2938.24" x2="2946.24" y1="305.8841" y2="305.8841"/><line style="stroke:#000000;stroke-width:1;" x1="2942.24" x2="2942.24" y1="306.8841" y2="298.8841"/><line style="stroke:#000000;stroke-width:1;" x1="2916.11" x2="2908.11" y1="600.7441" y2="606.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2916.11" x2="2908.11" y1="600.7441" y2="594.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2916.11" x2="2908.11" y1="600.7441" y2="600.7441"/><ellipse cx="2922.11" cy="600.7441" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="57.8631" x="2913.74" y="481.7811">uploaded</text></g><!--link Country to StateProvince--><g class="link" data-entity-1="ent0010" data-entity-2="ent0011" data-link-type="crowfoot" data-source-line="172" id="lnk29"><path codeLine="172" d="M4257,259.1641 C4257,298.6241 4257,327.2141 4257,368.8741" fill="none" id="Country-StateProvince" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="4253" x2="4261" y1="255.1641" y2="255.1641"/><line style="stroke:#000000;stroke-width:1;" x1="4253" x2="4261" y1="258.1641" y2="258.1641"/><line style="stroke:#000000;stroke-width:1;" x1="4257" x2="4257" y1="259.1641" y2="251.1641"/><line style="stroke:#000000;stroke-width:1;" x1="4257" x2="4263" y1="378.8741" y2="386.8741"/><line style="stroke:#000000;stroke-width:1;" x1="4257" x2="4251" y1="378.8741" y2="386.8741"/><line style="stroke:#000000;stroke-width:1;" x1="4257" x2="4257" y1="378.8741" y2="386.8741"/><ellipse cx="4257" cy="372.8741" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.554" x="4235" y="314.9211">has</text></g><!--link StateProvince to City--><g class="link" data-entity-1="ent0011" data-entity-2="ent0012" data-link-type="crowfoot" data-source-line="173" id="lnk30"><path codeLine="173" d="M4257,516.8441 C4257,547.7241 4257,558.7841 4257,588.2141" fill="none" id="StateProvince-City" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="4253" x2="4261" y1="512.8441" y2="512.8441"/><line style="stroke:#000000;stroke-width:1;" x1="4253" x2="4261" y1="515.8441" y2="515.8441"/><line style="stroke:#000000;stroke-width:1;" x1="4257" x2="4257" y1="516.8441" y2="508.8441"/><line style="stroke:#000000;stroke-width:1;" x1="4257" x2="4263" y1="598.2141" y2="606.2141"/><line style="stroke:#000000;stroke-width:1;" x1="4257" x2="4251" y1="598.2141" y2="606.2141"/><line style="stroke:#000000;stroke-width:1;" x1="4257" x2="4257" y1="598.2141" y2="606.2141"/><ellipse cx="4257" cy="592.2141" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.554" x="4235" y="553.4311">has</text></g><!--link User to Brewery--><g class="link" data-entity-1="ent0003" data-entity-2="ent0013" data-link-type="crowfoot" data-source-line="176" id="lnk31"><path codeLine="176" d="M2795.68,199.7441 C2446.83,199.7441 1607.33,199.7441 1607.33,199.7441 C1607.33,199.7441 1607.33,308.9491 1607.33,420.7141 C1607.33,476.5966 1607.33,533.1191 1607.33,576.951 C1607.33,587.9089 1607.33,598.0738 1607.33,607.2371 C1607.33,611.8188 1607.33,616.1501 1607.33,620.205 C1607.33,622.2325 1607.33,606.1908 1607.33,608.0768" fill="none" id="User-Brewery" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2799.68" x2="2799.68" y1="195.7441" y2="203.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2796.68" x2="2796.68" y1="195.7441" y2="203.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2795.68" x2="2803.68" y1="199.7441" y2="199.7441"/><line style="stroke:#000000;stroke-width:1;" x1="1607.33" x2="1613.33" y1="618.0768" y2="626.0768"/><line style="stroke:#000000;stroke-width:1;" x1="1607.33" x2="1601.33" y1="618.0768" y2="626.0768"/><line style="stroke:#000000;stroke-width:1;" x1="1607.33" x2="1607.33" y1="618.0768" y2="626.0768"/><ellipse cx="1607.33" cy="612.0768" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="42.107" x="1933.86" y="195.6411">posted</text></g><!--link Brewery to BreweryLoc--><g class="link" data-entity-1="ent0013" data-entity-2="ent0015" data-link-type="association" data-source-line="177" id="lnk32"><path codeLine="177" d="M1615.61,657.7441 C1632.56,657.7441 1986,657.7441 1986,657.7441 C1986,657.7441 1986,724.1141 1986,791.8041" fill="none" id="Brewery-BreweryLoc" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1611.61" x2="1611.61" y1="661.7441" y2="653.7441"/><line style="stroke:#000000;stroke-width:1;" x1="1614.61" x2="1614.61" y1="661.7441" y2="653.7441"/><line style="stroke:#000000;stroke-width:1;" x1="1615.61" x2="1607.61" y1="657.7441" y2="657.7441"/><line style="stroke:#000000;stroke-width:1;" x1="1986" x2="1986" y1="795.8041" y2="806.8041"/><ellipse cx="1986" cy="795.8041" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1990" x2="1982" y1="802.8041" y2="802.8041"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.554" x="1849.34" y="653.6411">has</text></g><!--link City to BreweryLoc--><g class="link" data-entity-1="ent0012" data-entity-2="ent0015" data-link-type="crowfoot" data-source-line="178" id="lnk33"><path codeLine="178" d="M4257,717.3441 C4257,787.5841 4257,896.7441 4257,896.7441 C4257,896.7441 2715.73,896.7441 2181.26,896.7441" fill="none" id="City-BreweryLoc" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="4253" x2="4261" y1="713.3441" y2="713.3441"/><line style="stroke:#000000;stroke-width:1;" x1="4253" x2="4261" y1="716.3441" y2="716.3441"/><line style="stroke:#000000;stroke-width:1;" x1="4257" x2="4257" y1="717.3441" y2="709.3441"/><line style="stroke:#000000;stroke-width:1;" x1="2171.26" x2="2163.26" y1="896.7441" y2="902.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2171.26" x2="2163.26" y1="896.7441" y2="890.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2171.26" x2="2163.26" y1="896.7441" y2="896.7441"/><ellipse cx="2177.26" cy="896.7441" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="59.5401" x="3243.83" y="892.6411">located in</text></g><!--link Brewery to BreweryPhoto--><g class="link" data-entity-1="ent0013" data-entity-2="ent0016" data-link-type="crowfoot" data-source-line="179" id="lnk34"><path codeLine="179" d="M1607,666.4641 C1607,675.6741 1607,749.8141 1607,817.1841" fill="none" id="Brewery-BreweryPhoto" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1603" x2="1611" y1="662.4641" y2="662.4641"/><line style="stroke:#000000;stroke-width:1;" x1="1603" x2="1611" y1="665.4641" y2="665.4641"/><line style="stroke:#000000;stroke-width:1;" x1="1607" x2="1607" y1="666.4641" y2="658.4641"/><line style="stroke:#000000;stroke-width:1;" x1="1607" x2="1613" y1="827.1841" y2="835.1841"/><line style="stroke:#000000;stroke-width:1;" x1="1607" x2="1601" y1="827.1841" y2="835.1841"/><line style="stroke:#000000;stroke-width:1;" x1="1607" x2="1607" y1="827.1841" y2="835.1841"/><ellipse cx="1607" cy="821.1841" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.554" x="1585" y="742.7211">has</text></g><!--link Photo to BreweryPhoto--><g class="link" data-entity-1="ent0008" data-entity-2="ent0016" data-link-type="crowfoot" data-source-line="180" id="lnk35"><path codeLine="180" d="M2610.11,715.7441 C2317.29,715.7441 1690.7,715.7441 1690.7,715.7441 C1690.7,715.7441 1690.7,764.8041 1690.7,817.1941" fill="none" id="Photo-BreweryPhoto" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2614.11" x2="2614.11" y1="711.7441" y2="719.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2611.11" x2="2611.11" y1="711.7441" y2="719.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2610.11" x2="2618.11" y1="715.7441" y2="715.7441"/><line style="stroke:#000000;stroke-width:1;" x1="1690.7" x2="1696.7" y1="827.1941" y2="835.1941"/><line style="stroke:#000000;stroke-width:1;" x1="1690.7" x2="1684.7" y1="827.1941" y2="835.1941"/><line style="stroke:#000000;stroke-width:1;" x1="1690.7" x2="1690.7" y1="827.1941" y2="835.1941"/><ellipse cx="1690.7" cy="821.1941" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="52.9491" x="2041.68" y="711.6411">linked to</text></g><!--link User to Beer--><g class="link" data-entity-1="ent0003" data-entity-2="ent0019" data-link-type="crowfoot" data-source-line="183" id="lnk36"><path codeLine="183" d="M2951,306.8441 C2951,476.7841 2951,797.7441 2951,797.7441 C2951,797.7441 1166.36,797.7441 647.92,797.7441" fill="none" id="User-Beer" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2947" x2="2955" y1="302.8441" y2="302.8441"/><line style="stroke:#000000;stroke-width:1;" x1="2947" x2="2955" y1="305.8441" y2="305.8441"/><line style="stroke:#000000;stroke-width:1;" x1="2951" x2="2951" y1="306.8441" y2="298.8441"/><line style="stroke:#000000;stroke-width:1;" x1="637.92" x2="629.92" y1="797.7441" y2="803.7441"/><line style="stroke:#000000;stroke-width:1;" x1="637.92" x2="629.92" y1="797.7441" y2="791.7441"/><line style="stroke:#000000;stroke-width:1;" x1="637.92" x2="629.92" y1="797.7441" y2="797.7441"/><ellipse cx="643.92" cy="797.7441" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="42.107" x="1996.91" y="793.6411">posted</text></g><!--link BeerStyle to Beer--><g class="link" data-entity-1="ent0018" data-entity-2="ent0019" data-link-type="crowfoot" data-source-line="184" id="lnk37"><path codeLine="184" d="M492,717.2541 C492,737.6541 492,736.0341 492,760.3341" fill="none" id="BeerStyle-Beer" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="488" x2="496" y1="713.2541" y2="713.2541"/><line style="stroke:#000000;stroke-width:1;" x1="488" x2="496" y1="716.2541" y2="716.2541"/><line style="stroke:#000000;stroke-width:1;" x1="492" x2="492" y1="717.2541" y2="709.2541"/><line style="stroke:#000000;stroke-width:1;" x1="492" x2="498" y1="770.3341" y2="778.3341"/><line style="stroke:#000000;stroke-width:1;" x1="492" x2="486" y1="770.3341" y2="778.3341"/><line style="stroke:#000000;stroke-width:1;" x1="492" x2="492" y1="770.3341" y2="778.3341"/><ellipse cx="492" cy="764.3341" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="69.81" x="422" y="739.6911">categorizes</text></g><!--link Brewery to Beer--><g class="link" data-entity-1="ent0013" data-entity-2="ent0019" data-link-type="crowfoot" data-source-line="185" id="lnk38"><path codeLine="185" d="M1078.9837,631.7441 C1051.7722,631.7441 1027.8855,631.7441 1001.9698,631.7441 C950.1384,631.7441 901.7623,631.7441 860.2972,631.7441 C777.3669,631.7441 722.08,631.7441 722.08,631.7441 C722.08,631.7441 722.08,787.7441 722.08,787.7441 C722.08,787.7441 697.02,787.7441 648.15,787.7441" fill="none" id="Brewery-Beer" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1082.9837" x2="1082.9837" y1="627.7441" y2="635.7441"/><line style="stroke:#000000;stroke-width:1;" x1="1079.9837" x2="1079.9837" y1="627.7441" y2="635.7441"/><line style="stroke:#000000;stroke-width:1;" x1="1078.9837" x2="1086.9837" y1="631.7441" y2="631.7441"/><line style="stroke:#000000;stroke-width:1;" x1="638.15" x2="630.15" y1="787.7441" y2="793.7441"/><line style="stroke:#000000;stroke-width:1;" x1="638.15" x2="630.15" y1="787.7441" y2="781.7441"/><line style="stroke:#000000;stroke-width:1;" x1="638.15" x2="630.15" y1="787.7441" y2="787.7441"/><ellipse cx="644.15" cy="787.7441" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="46.241" x="1006.11" y="627.6411">brewed</text></g><!--link Beer to BeerPhoto--><g class="link" data-entity-1="ent0019" data-entity-2="ent0020" data-link-type="crowfoot" data-source-line="186" id="lnk39"><path codeLine="186" d="M513.71,1022.6641 C513.71,1052.9541 513.71,1058.2941 513.71,1084.3641" fill="none" id="Beer-BeerPhoto" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="509.71" x2="517.71" y1="1018.6641" y2="1018.6641"/><line style="stroke:#000000;stroke-width:1;" x1="509.71" x2="517.71" y1="1021.6641" y2="1021.6641"/><line style="stroke:#000000;stroke-width:1;" x1="513.71" x2="513.71" y1="1022.6641" y2="1014.6641"/><line style="stroke:#000000;stroke-width:1;" x1="513.71" x2="519.71" y1="1094.3641" y2="1102.3641"/><line style="stroke:#000000;stroke-width:1;" x1="513.71" x2="507.71" y1="1094.3641" y2="1102.3641"/><line style="stroke:#000000;stroke-width:1;" x1="513.71" x2="513.71" y1="1094.3641" y2="1102.3641"/><ellipse cx="513.71" cy="1088.3641" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.554" x="491.71" y="1054.4111">has</text></g><!--link Photo to BeerPhoto--><g class="link" data-entity-1="ent0008" data-entity-2="ent0020" data-link-type="crowfoot" data-source-line="187" id="lnk40"><path codeLine="187" d="M2609.86,711.7441 C2135.52,711.7441 669.4,711.7441 669.4,711.7441 C669.4,711.7441 669.4,961.2441 669.4,1084.5541" fill="none" id="Photo-BeerPhoto" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2613.86" x2="2613.86" y1="707.7441" y2="715.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2610.86" x2="2610.86" y1="707.7441" y2="715.7441"/><line style="stroke:#000000;stroke-width:1;" x1="2609.86" x2="2617.86" y1="711.7441" y2="711.7441"/><line style="stroke:#000000;stroke-width:1;" x1="669.4" x2="675.4" y1="1094.5541" y2="1102.5541"/><line style="stroke:#000000;stroke-width:1;" x1="669.4" x2="663.4" y1="1094.5541" y2="1102.5541"/><line style="stroke:#000000;stroke-width:1;" x1="669.4" x2="669.4" y1="1094.5541" y2="1102.5541"/><ellipse cx="669.4" cy="1088.5541" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="52.9491" x="1395.22" y="707.6411">linked to</text></g><!--link Beer to BeerComment--><g class="link" data-entity-1="ent0019" data-entity-2="ent0021" data-link-type="crowfoot" data-source-line="188" id="lnk41"><path codeLine="188" d="M358.29,1022.6641 C358.29,1042.4841 358.29,1036.7541 358.29,1055.7041" fill="none" id="Beer-BeerComment" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="354.29" x2="362.29" y1="1018.6641" y2="1018.6641"/><line style="stroke:#000000;stroke-width:1;" x1="354.29" x2="362.29" y1="1021.6641" y2="1021.6641"/><line style="stroke:#000000;stroke-width:1;" x1="358.29" x2="358.29" y1="1022.6641" y2="1014.6641"/><line style="stroke:#000000;stroke-width:1;" x1="358.29" x2="364.29" y1="1065.7041" y2="1073.7041"/><line style="stroke:#000000;stroke-width:1;" x1="358.29" x2="352.29" y1="1065.7041" y2="1073.7041"/><line style="stroke:#000000;stroke-width:1;" x1="358.29" x2="358.29" y1="1065.7041" y2="1073.7041"/><ellipse cx="358.29" cy="1059.7041" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.554" x="336.29" y="1040.0811">has</text></g><!--link User to BeerComment--><g class="link" data-entity-1="ent0003" data-entity-2="ent0021" data-link-type="crowfoot" data-source-line="189" id="lnk42"><path codeLine="189" d="M2959.76,306.7241 C2959.76,538.4441 2959.76,1088.7441 2959.76,1088.7441 C2959.76,1088.7441 979.76,1088.7441 380.75,1088.7441" fill="none" id="User-BeerComment" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="2955.76" x2="2963.76" y1="302.7241" y2="302.7241"/><line style="stroke:#000000;stroke-width:1;" x1="2955.76" x2="2963.76" y1="305.7241" y2="305.7241"/><line style="stroke:#000000;stroke-width:1;" x1="2959.76" x2="2959.76" y1="306.7241" y2="298.7241"/><line style="stroke:#000000;stroke-width:1;" x1="370.75" x2="362.75" y1="1088.7441" y2="1094.7441"/><line style="stroke:#000000;stroke-width:1;" x1="370.75" x2="362.75" y1="1088.7441" y2="1082.7441"/><line style="stroke:#000000;stroke-width:1;" x1="370.75" x2="362.75" y1="1088.7441" y2="1088.7441"/><ellipse cx="376.75" cy="1088.7441" fill="none" rx="4" ry="4" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="73.8011" x="1982.26" y="1084.6411">commented</text></g><!--link User to GMN43--><g class="link" data-entity-1="ent0003" data-entity-2="ent0044" data-link-type="association" data-source-line="192" id="lnk45"><path d="M3098.45,274.7441 C3364.62,274.7441 3898,274.7441 3898,274.7441 C3898,274.7441 3898,339.0241 3898,389.2441" fill="none" id="User-GMN43" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/></g><!--link Brewery to GMN46--><g class="link" data-entity-1="ent0013" data-entity-2="ent0047" data-link-type="association" data-source-line="201" id="lnk48"><path d="M1087.5318,657.7441 C1077.865,657.7441 1068.4142,657.7441 1059.22,657.7441 C1040.8317,657.7441 1023.4699,657.7441 1007.4595,657.7441 C943.4181,657.7441 901,657.7441 901,657.7441 C901,657.7441 901,787.4441 901,855.5841" fill="none" id="Brewery-GMN46" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/></g><g class="caption" data-source-line="8"><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="709.5035" x="1855.2482" y="1293.71">Every table also has a RowVersion ROWVERSION column (optimistic concurrency), omitted below for brevity.</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="356.4666" x="2031.7667" y="1312.778">Tables marked (*) have no repository/feature slice yet.</text></g><?plantuml-src jLXjRzis4FxkNt7pWDKEucJ9sc3mYWAoOpT64oUrdMm31WoCHDj4P54WQMTQql--8qN9bAmuTjVsGshU6--UUo6f7zISBYZ48M5HJJwmA2Q2BE2U-0ypmPTHqEKX5_1Zt_np908w9SjGzNcaXWGjU8AHqE67BA8gYIbmeURSOSHecipeM2KX1K5zHQ9PI6irnHGIpeaYzqHI6Fle6Adv95QCHz1RKP40yb26X9B3d4WWCEAFTrH8BJ6w_lskDneFheVWyt2vYA31KNV1f68-aY9_AGID_AHv27p1bA81tDEGFy8K0xmNTCLKSlHNDD5xI5WGyO0IZOCcRhMY475qDkQIAIwIuoabQYaeo93v51AgZcer6nZKRoKLy1DuIpMlmrCDW4OON98oFDz7M5KTq7yZg0K03i1X3ixRS3iSVBxj3SvxmycWF-YDuFtxcqyVFXZXLilHYH3zDjnve-w5DsgSlMsYPAfifG-WpuGqMMh3C1CyEVsrQTcNP1ktjo0iN6-WEPixT0K2GWDFjU7Sc_GcWwkUuTp6GINzG2UQNayx3AiZvI7zIwq45feDz9g41Y-zBE2rvky5sNQO-vzU3GjH-ITc8jaWNn0vTs0yVNUMmJYG8xhYM59jw0mcXcW99UiR8621iodpYUu30uCX90KWN9bl2iKXb3BjxgHpE66wSBRvxwsmfuNk9EEzNHRAtf2-hzytSwxuzenlUDxdePuFcUTswNgUahvFyQMsMJJxsZejn6FYpqD9LqyxO5CEuW9dki3X_b1TvhTno4b0WqxokjUPx8RRNvnXUicpodSdQLT3A99qAgI_ysZiUkUaMFdo1FpvvxnrnzU_d9oT_NtIXZJSqW0iu3nMc8aRmLSiygdnhq39lInGT_QreFMwnwVMuxEgaRqLfggMwEBV576zpE76nUvOe_3BRk-2IUwOMoGTGH-fBWUtHYpnXilqjBNht767lxF_LgSKWbF_sjfkrNzEfI-OkTqufjwTd3Q_wamjPCe9RTq_QmYGLeL29hel6biGh1Z4NX08AkKbtWzFgZ1q-ASlOqp2BWyAESYhQ4j1vl1tEHS1Yn17sOQFlUkF8-_cuiyjC1R7PyOeJD6oz3U5SPzppDpfS4A_CbaxbDfJkT0rI4tlvdcmEIMFDAFiCRTGkgBnosEfkYckl3-Q6xb17pHY1JSB7kxLs2yFfQqkcOBkt27AlUxWohjil3tC-tVGkMt3O3ZPUpAy1gyhgajd9wF_PvfOC4izeAd51d3bTg_-xQdwPgLV4L2NBnP8AuIKqSf1MVeUjmeZNvXWUKtj7hCrirkEHpY-evbRTFjc7M5wW--Iq9m3SivY78_ESxPcVZy_jrhyANsDjQ6EB_6wmtZEtYTLB7lvprXs-OMtMi_FzbAAF46d-AW7nUk53Utz6mMcvfU4Hk52tTmkhj_x2JISQtL98Tz_QI-czGeqiaEobbqxhNBnbfS5MAHcmEaYp2GsTx37GS6rxEw2Mh6P8_LQHhB8EaTxPjhiKpHWsQ4E0l5WKSdEK_5eooobgnSaGjDl9biLmM2b5oFHOzeD8pzTIWBQmnaNx5ygDvsqClTc_AL6NDusxrssuthPH3O7DgjuW-zdFOe0H5nHkETAyGNmgUaTR2pTEu2j6CZZHy7mqW4DGMTCAc6mEeIGpnZ-v-VVCr19S6MvA-VDtOGP1pKNV3cRWpU-EHhs9ZWb14MDGP1Ek3VffwKh4k51BzvxSHnQRKt-S6W-xvbsGAL--YbB7cadKVESnFZ2qu9ZXMQXXLMYF-R1-FFb8KGSLQHc110BxjF0w0BM-9HX4d6i4EIpC4G_CKxhgRlFsZMDclNLDl4e_yHsLADH01hE3L2p1W7eP76ihQTCHkMRJ6vj4pKQQNZDtpJMM677IpC9ZmCQKjn4B2CdN9HdaMG11GAOgaWIFqt88yDyLdzTH9qLSpzChkFu3m00?></g></svg> |