Extend database with more tables, rewrite API doc, improve API endpoints

This commit is contained in:
2024-09-23 21:22:45 +02:00
parent 8b4db9ccc8
commit b245e3803a
41 changed files with 1345 additions and 1126 deletions

819
README.md
View File

@@ -48,678 +48,241 @@ TODO
The application host it's data in a SQLite database. The access is managed by an [ExpressJs](https://expressjs.com/) server which offers many REST-API endpoints for the frontend. The REST-API server runs on port 3000. The application host it's data in a SQLite database. The access is managed by an [ExpressJs](https://expressjs.com/) server which offers many REST-API endpoints for the frontend. The REST-API server runs on port 3000.
#### `/api` ---
<details style="border: solid; border-radius: 10px; border-color: #70AFFD; margin-bottom: 20px"> #### Validate
<summary style="background-color: #70AFFD; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Server check</summary>
<div style="padding: 0px 20px 10px">
<h4>Description</h4> <details>
Check if server is available <summary><code style="background-color:#69CA92"><b>POST</b></code> <code><b>/accounts/login</b></code> <code> (Login for user)</code></summary>
<h4>Request</h4> ##### Parameters
<code>GET /api</code> > | name | type | data type | description |
> | --- | --- | --- | --- |
> | username | required | string | Username of the account |
> | password | required | string | Password of the account |
<br> ##### Responses
> | http code | content-type | response |
> | :---: | --- | --- |
> | `200` | `application/json` | `AccountObject` + `Addresses`, `Payments`, `AccountRole` |
> | `400` | `application/json` | `{code: 400, message: "Bad Request"}` |
> | `401` | `application/json` | `{code: 401, message: "Unauthorized"}` |
</details>
<table> ---
<header>
<th>Parameter</th> #### Listing existing
<th>Required?</th>
<th>Description</th> <details>
</header> <summary><code style="background-color:#70AFFD"><b>GET</b></code> <code><b>/products/</b></code> <code> (Get all products)</code>
<tbody> </summary>
<tr>
<td>-</td> ##### Parameters
<td>-</td> > None
<td>-</td>
</tr> ##### Responses
</tbody> > | http code | content-type | response |
</table> > | :---: | --- | --- |
</div> > | `200` | `application/json` | `Array<ProductModel>` + `Category`, `Brand` |
</details>
<details>
<summary><code style="background-color:#70AFFD"><b>GET</b></code> <code><b>/products/:id</b></code> <code> (Get a product by it's id)</code>
</summary>
##### Parameters
> | name | type | data type | description |
> | :---: | --- | --- | --- |
> | `id` | required | string | ID of product in the database |
##### Responses
> | http code | content-type | response |
> | :---: | --- | --- |
> | `200` | `application/json` | `ProductModel` + `Category`, `Brand` |
</details>
<details>
<summary><code style="background-color:#70AFFD"><b>GET</b></code> <code><b>/orders/:id</b></code> <code> (Get all orders of an user)</code>
</summary>
##### Parameters
> | name | type | data type | description |
> | --- | --- | --- | --- |
> | `id` | required | string | ID of userAccount in the database |
##### Responses
> | http code | content-type | response |
> | :---: | --- | --- |
> | `200` | `application/json` | `ProductModel` + `Order`, `OrderItem`, `Product` |
</details>
<details>
<summary><code style="background-color:#70AFFD"><b>GET</b></code> <code><b>/categories/</b></code> <code> (Get all Categories)</code>
</summary>
##### Parameters
> None
##### Responses
> | http code | content-type | response |
> | :---: | --- | --- |
> | `200` | `application/json` | `Array<Categories>` |
</details>
---
#### Creating new
<details>
<summary><code style="background-color:#69CA92"><b>POST</b></code> <code><b>/accounts/</b></code> <code> (Create a new account)</code>
</summary>
##### Parameters
> | name | type | data type | description |
> | :---: | --- | --- | --- |
> | None | required | object (JSON) | Model of an Account |
##### Responses
> | http code | content-type | response |
> | :---: | --- | --- |
> | `201` | `application/json` | `AccountModel` |
> | `400` | `application/json` | `{code: 400, message: "Username too short!"}` |
> | `400` | `application/json` | `{code: 400, message: "Password too short!"}` |
> | `409` | `application/json` | `{code: 409, message: "Username already in use"}` |
</details> </details>
<details style="border: solid; border-radius: 10px; border-color: #70AFFD; margin-bottom: 20px"> <details>
<summary style="background-color: #70AFFD; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Database reset</summary> <summary><code style="background-color:#69CA92"><b>POST</b></code> <code><b>/products/</b></code> <code> (Create a new product)</code>
<div style="padding: 0px 20px 10px"> </summary>
<h4>Description</h4> ##### Parameters
Delete and refill the database with example values > | name | type | data type | description |
> | :---: | --- | --- | --- |
> | None | required | object (JSON) | Model of a Product |
<h4>Request</h4> ##### Responses
<code>GET /api/resetdatabase</code> > | http code | content-type | response |
> | :---: | --- | --- |
<br> > | `201` | `application/json` | `ProductModel` |
> | `400` | `application/json` | `{code: 400, message: "..."}` |
<table>
<header>
<th>Parameter</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
</div>
</details>
#### `/categories`
<details style="border: solid; border-radius: 10px; border-color: #70AFFD; margin-bottom: 20px">
<summary style="background-color: #70AFFD; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">All categories</summary>
<div style="padding: 0px 20px 10px">
<h4>Description</h4>
Get all categories
<h4>Request</h4>
<code>GET /categories</code>
<br>
<table>
<header>
<th>Parameter</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
<h4>Example Response</h4>
```json
[
{
"id": 0,
"name": "Electronic",
"icon": "mdi-chip",
"createdAt": "2024-09-13T07:51:40.118Z",
"updatedAt": "2024-09-13T07:51:40.118Z"
},
{
"id": 1,
"name": "Sports",
"icon": "mdi-soccer",
"createdAt": "2024-09-13T07:51:40.118Z",
"updatedAt": "2024-09-13T07:51:40.118Z"
}
]
```
</div>
</details> </details>
<details style="border: solid; border-radius: 10px; border-color: #69CA92; margin-bottom: 20px"> <details>
<summary style="background-color: #69CA92; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Add new category</summary> <summary><code style="background-color:#69CA92"><b>POST</b></code> <code><b>/orders/</b></code> <code> (Create a new order)</code>
<div style="padding: 0px 20px 10px"> </summary>
<h4>Description</h4> ##### Parameters
Add a new category > | name | type | data type | description |
> | :---: | --- | --- | --- |
> | None | required | object (JSON) | Model of an Order |
<h4>Request</h4> ##### Responses
<code>POST /categories</code> > | http code | content-type | response |
> | :---: | --- | --- |
<br> > | `201` | `application/json` | `OrderModel` |
<table>
<header>
<th>Body Parameters</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td><code>name</code></td>
<td>Yes</td>
<td>Name of the category</td>
</tr>
<tr>
<td><code>icon</code></td>
<td>Yes</td>
<td>Material Design Icon</td>
</tr>
</tbody>
</table>
</div>
</details> </details>
<details style="border: solid; border-radius: 10px; border-color: #EB5246; margin-bottom: 20px"> <details>
<summary style="background-color: #EB5246; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Delete category</summary> <summary><code style="background-color:#69CA92"><b>POST</b></code> <code><b>/categories/</b></code> <code> (Create a new category)</code>
<div style="padding: 0px 20px 10px"> </summary>
<h4>Description</h4> ##### Parameters
Delete a category by it's id > | name | type | data type | description |
> | :---: | --- | --- | --- |
> | None | required | object (JSON) | Model of a Category |
<h4>Request</h4> ##### Responses
<code>DELETE /categories/:id</code> > | http code | content-type | response |
> | :---: | --- | --- |
<br> > | `201` | `application/json` | `OrderModel` |
> | `400` | `application/json` | `{code: 400, message: "..."}` |
<table>
<header>
<th>Parameter</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td><code>id</code></td>
<td>Yes</td>
<td>Database ID of CategoryModel</td>
</tr>
</tbody>
</table>
</div>
</details> </details>
#### `/products` ---
<details style="border: solid; border-radius: 10px; border-color: #70AFFD; margin-bottom: 20px"> #### Updating existing
<summary style="background-color: #70AFFD; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">All products</summary>
<div style="padding: 0px 20px 10px">
<h4>Description</h4> <details>
Get all products <summary><code style="background-color:#F3A63D"><b>PATCH</b></code> <code><b>/accounts/</b></code> <code> (Update data of an existing account)</code>
</summary>
<h4>Request</h4> ##### Parameters
<code>GET /products</code> > | name | type | data type | description |
> | :---: | --- | --- | --- |
> | None | required | object (JSON) | Model of an Account |
<br> ##### Responses
> | http code | content-type | response |
<table> > | :---: | --- | --- |
<header> > | `200` | `application/json` | AccountModel |
<th>Parameter</th> > | `400` | `application/json` | `{code: 400, message: "..."}` |
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td>-</td>
<td>-</td>
<td>-</td>
</tr>
</tbody>
</table>
<h4>Example Response</h4>
```json
[
{
"id": 0,
"brand": "Lenovo",
"name": "Thinkpad T14",
"categoryId": 0,
"price": 799.99,
"discount": 10,
"rating": 4.6,
"imageUrl": "thinkpad-t14s.jpg",
"description": "Die stabile Arbeitsmaschine. Mit AMD Ryzen 7 89029U, 128 GB RAM und 8 TB M.2 SSD!",
"createdAt": "2024-09-13T07:51:40.119Z",
"updatedAt": "2024-09-13T07:51:40.119Z",
"category": {
"id": 0,
"name": "Electronic",
"icon": "mdi-chip",
"createdAt": "2024-09-13T07:51:40.118Z",
"updatedAt": "2024-09-13T07:51:40.118Z"
}
}
]
```
</div>
</details> </details>
---
<details style="border: solid; border-radius: 10px; border-color: #70AFFD; margin-bottom: 20px"> #### Delete existing
<summary style="background-color: #70AFFD; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Request one product</summary>
<div style="padding: 0px 20px 10px">
<h4>Description</h4> <details>
Get a specific product by it's id <summary><code style="background-color:#EB5246"><b>DELETE</b></code> <code><b>/product/:id</b></code> <code> (Delete a product)</code>
</summary>
<h4>Request</h4> ##### Parameters
<code>GET /products/:id</code> > | name | type | data type | description |
> | :---: | --- | --- | --- |
> | `id` | required | string | ID of product in the database |
<br> ##### Responses
> | http code | content-type | response |
<table> > | :---: | --- | --- |
<header> > | `200` | `application/json` | `ProductModel` |
<th>Parameter</th> > | `400` | `application/json` | `{code: 400, message: "..."}` |
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td><code>id</code></td>
<td>Yes</td>
<td>ID of the product in the database table</td>
</tr>
</tbody>
</table>
<h4>Example Response</h4>
```json
{
"id": 0,
"brand": "Lenovo",
"name": "Thinkpad T14",
"categoryId": 0,
"price": 799.99,
"discount": 10,
"rating": 4.6,
"imageUrl": "thinkpad-t14s.jpg",
"description": "Die stabile Arbeitsmaschine. Mit AMD Ryzen 7 89029U, 128 GB RAM und 8 TB M.2 SSD!",
"createdAt": "2024-09-13T07:51:40.119Z",
"updatedAt": "2024-09-13T07:51:40.119Z",
"category": {
"id": 0,
"name": "Electronic",
"icon": "mdi-chip",
"createdAt": "2024-09-13T07:51:40.118Z",
"updatedAt": "2024-09-13T07:51:40.118Z"
}
}
```
</div>
</details> </details>
<details style="border: solid; border-radius: 10px; border-color: #69CA92; margin-bottom: 20px"> <details>
<summary style="background-color: #69CA92; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Add new product</summary> <summary><code style="background-color:#EB5246"><b>DELETE</b></code> <code><b>/categories/:id</b></code> <code> (Delete a category)</code>
<div style="padding: 0px 20px 10px"> </summary>
<h4>Description</h4> ##### Parameters
Add a new product to the database > | name | type | data type | description |
> | :---: | --- | --- | --- |
> | `id` | required | string | ID of category in the database |
<h4>Request</h4> ##### Responses
<code>POST /products</code> > | http code | content-type | response |
> | :---: | --- | --- |
<br> > | `200` | `application/json` | `CategoryModel` |
> | `400` | `application/json` | `{code: 400, message: "..."}` |
<table>
<header>
<th>Body Parameters</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td><code>brand</code></td>
<td>Yes</td>
<td>Brand of the product</td>
</tr>
<tr>
<td><code>name</code></td>
<td>Yes</td>
<td>Name of the product</td>
</tr>
<tr>
<td><code>description</code></td>
<td>No</td>
<td>Description of the product</td>
</tr>
<tr>
<td><code>categoryId</code></td>
<td>Yes</td>
<td>ID of a Category from database</td>
</tr>
<tr>
<td><code>price</code></td>
<td>No</td>
<td>Name of the product</td>
</tr>
<tr>
<td><code>discount</code></td>
<td>No</td>
<td>Procentual discount, 0 to 100</td>
</tr>
<tr>
<td><code>rating</code></td>
<td>No</td>
<td>Product rating from 1 to 5</td>
</tr>
<tr>
<td><code>imageUrl</code></td>
<td>No</td>
<td>Name of the uploaded image file</td>
</tr>
</tbody>
</table>
</div>
</details> </details>
---
<details style="border: solid; border-radius: 10px; border-color: #EB5246; margin-bottom: 20px"> #### Miscs
<summary style="background-color: #EB5246; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Delete product</summary>
<div style="padding: 0px 20px 10px">
<h4>Description</h4> <details>
Delete a product by it's id <summary><code style="background-color:#70AFFD"><b>GET</b></code> <code><b>/api/</b></code> <code> (Check if server runs)</code>
</summary>
<h4>Request</h4> ##### Parameters
<code>DELETE /products/:id</code> > None
<br> ##### Responses
> | http code | content-type | response |
<table> > | :---: | --- | --- |
<header> > | `200` | None | None |
<th>Parameter</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td><code>id</code></td>
<td>Yes</td>
<td>Database ID of ProductModel</td>
</tr>
</tbody>
</table>
</div>
</details> </details>
<details>
<summary><code style="background-color:#70AFFD"><b>GET</b></code> <code><b>/resetDatabase/</b></code> <code> (Reset the database to it's default values)</code>
</summary>
#### `/orders` ##### Parameters
> None
<details style="border: solid; border-radius: 10px; border-color: #70AFFD; margin-bottom: 20px"> ##### Responses
<summary style="background-color: #70AFFD; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Request orders of user</summary> > | http code | content-type | response |
<div style="padding: 0px 20px 10px"> > | :---: | --- | --- |
> | `200` | None | None |
<h4>Description</h4>
Get all orders from a user
<h4>Request</h4>
<code>GET /orders/:id</code>
<br>
<table>
<header>
<th>Parameter</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td><code>id</code></td>
<td>Yes</td>
<td>ID of the user in the database table</td>
</tr>
</tbody>
</table>
<h4>Example Response</h4>
```json
[
{
"id": 1,
"accountId": 3,
"totalPrice": 7.99,
"shippingProgress": 5,
"createdAt": "2024-09-09T12:24:24.225Z",
"updatedAt": "2024-09-13T07:51:40.120Z",
"orderItem": [
{
"id": 1,
"orderId": 1,
"quantity": 1,
"productId": 6,
"createdAt": "2024-09-13T07:51:40.120Z",
"updatedAt": "2024-09-13T07:51:40.120Z",
"product": {
"id": 6,
"brand": "Aldous Huxley",
"name": "Brave New World",
"categoryId": 3,
"price": 7.99,
"discount": 0,
"rating": 4.4,
"imageUrl": "brave-new-world.jpg",
"description": "Brave New World beschreibt eine genormte Gesellschaft, in der Föten genetisch manipuliert und Menschen konditioniert werden. Ziel des Staates ist Zufriedenheit und Stabilität, und dies wird durch Gleichheit, Drogen und Propaganda erreicht. Gott und Religion...",
"createdAt": "2024-09-13T07:51:40.119Z",
"updatedAt": "2024-09-13T07:51:40.119Z"
}
}
]
}
]
```
</div>
</details> </details>
<details style="border: solid; border-radius: 10px; border-color: #69CA92; margin-bottom: 20px">
<summary style="background-color: #69CA92; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Place a new order</summary>
<div style="padding: 0px 20px 10px">
<h4>Description</h4>
Place a new order to the database
<h4>Request</h4>
<code>POST /orders</code>
<br>
<table>
<header>
<th>Query Parameters</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td><code>accountId</code></td>
<td>Yes</td>
<td>ID of account who created this order</td>
</tr>
<tr>
<td><code>shippingProgress</code></td>
<td>No</td>
<td>Progress of shipping, 1 to 5</td>
</tr>
<tr>
<td><code>orderItem</code></td>
<td>Yes</td>
<td>List of ordered items (objects). Needs parameter <code>quantity</code> and <code>productId</code></td>
</tr>
</tbody>
</table>
</div>
</details>
#### `/accounts`
<details style="border: solid; border-radius: 10px; border-color: #70AFFD; margin-bottom: 20px">
<summary style="background-color: #70AFFD; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Login user</summary>
<div style="padding: 0px 20px 10px">
<h4>Description</h4>
Login process for user
<h4>Request</h4>
<code>GET /accounts</code>
<br>
<table>
<header>
<th>Query Parameters</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td><code>username</code></td>
<td>Yes</td>
<td>Name of user account</td>
</tr>
<tr>
<td><code>password</code></td>
<td>Yes</td>
<td>Password of user account</td>
</tr>
</tbody>
</table>
<h4>Example Response</h4>
```json
{
"loginSuccessful": true,
"userId": 3,
"message": ""
}
```
</div>
</details>
<details style="border: solid; border-radius: 10px; border-color: #69CA92; margin-bottom: 20px">
<summary style="background-color: #69CA92; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Add an user</summary>
<div style="padding: 0px 20px 10px">
<h4>Description</h4>
Place a new account to the database
<h4>Request</h4>
<code>POST /accounts</code>
<br>
<table>
<header>
<th>Body Parameters</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td><code>username</code></td>
<td>Yes</td>
<td>Login username</td>
</tr>
<tr>
<td><code>password</code></td>
<td>Yes</td>
<td>Login password</td>
</tr>
<tr>
<td><code>firstName</code></td>
<td>No</td>
<td>First name of user</td>
</tr>
<tr>
<td><code>lastName</code></td>
<td>No</td>
<td>Last name of user</td>
</tr>
<tr>
<td><code>street</code></td>
<td>No</td>
<td>Street where the user lives</td>
</tr>
<tr>
<td><code>houseNumber</code></td>
<td>No</td>
<td>House number of user</td>
</tr>
<tr>
<td><code>postalCode</code></td>
<td>No</td>
<td>Postal code of users home</td>
</tr>
<tr>
<td><code>city</code></td>
<td>No</td>
<td>Name of users city</td>
</tr>
</tbody>
</table>
</div>
</details>
<details style="border: solid; border-radius: 10px; border-color: #F3A63D; margin-bottom: 20px">
<summary style="background-color: #F3A63D; color: #FFFFFF; border: none; padding: 10px 20px; border-radius: 6px 6px 0px 0px; font-weight: bold">Update account</summary>
<div style="padding: 0px 20px 10px">
<h4>Description</h4>
Updating values of an existing account
<h4>Request</h4>
<code>PATCH /account</code>
<br>
<table>
<header>
<th>Body Parameters</th>
<th>Required?</th>
<th>Description</th>
</header>
<tbody>
<tr>
<td><code>id</code></td>
<td>Yes</td>
<td>Identifier of dataset</td>
</tr>
<tr>
<td><code>username</code></td>
<td>No</td>
<td>Login username</td>
</tr>
<tr>
<td><code>password</code></td>
<td>No</td>
<td>Login password</td>
</tr>
<tr>
<td><code>firstName</code></td>
<td>No</td>
<td>First name of user</td>
</tr>
<tr>
<td><code>lastName</code></td>
<td>No</td>
<td>Last name of user</td>
</tr>
<tr>
<td><code>street</code></td>
<td>No</td>
<td>Street where the user lives</td>
</tr>
<tr>
<td><code>houseNumber</code></td>
<td>No</td>
<td>House number of user</td>
</tr>
<tr>
<td><code>postalCode</code></td>
<td>No</td>
<td>Postal code of users home</td>
</tr>
<tr>
<td><code>city</code></td>
<td>No</td>
<td>Name of users city</td>
</tr>
</tbody>
</table>
</div>
</details>

View File

@@ -1,232 +1,376 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.8 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.8"> <mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.8 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.8">
<diagram name="Page-1" id="WevClHWmhzPAQ7FDN5po"> <diagram name="Page-1" id="WevClHWmhzPAQ7FDN5po">
<mxGraphModel dx="819" dy="473" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <mxGraphModel dx="1988" dy="473" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root> <root>
<mxCell id="0" /> <mxCell id="0" />
<mxCell id="1" parent="0" /> <mxCell id="1" parent="0" />
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="330" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="310" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-5" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Products&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#cce5ff;strokeColor=#36393d;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-5" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Products&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="300" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="280" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-21" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-21" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="420" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="399" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-22" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;price: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-22" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;price: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="540" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="460" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-23" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;categoryId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-23" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;categoryId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="510" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="340" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-24" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;discount: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-24" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;discount: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="570" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="490" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-2" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Accounts&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#cce5ff;strokeColor=#36393d;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-2" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Accounts&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#1ba1e2;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="300" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="320" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-3" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-3" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="330" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="350" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;username: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;username: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="360" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="380" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-5" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;password: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-5" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;password: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="390" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="410" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-6" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;OrderItems&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#cce5ff;strokeColor=#36393d;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-6" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;OrderItems&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#a20025;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="419.91" y="240" width="160" height="30" as="geometry" /> <mxGeometry x="-439.99999999999994" y="360" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-7" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-7" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="419.91" y="270" width="160" height="30" as="geometry" /> <mxGeometry x="-439.99999999999994" y="390" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-8" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;usernameId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-8" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;accountId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="689.9100000000001" y="330" width="160" height="30" as="geometry" /> <mxGeometry x="-680" y="420" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-9" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;totalPrice: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-17" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Categories&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="689.9100000000001" y="360" width="160" height="30" as="geometry" /> <mxGeometry x="39.960000000000036" y="310" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-17" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Categories&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#cce5ff;strokeColor=#36393d;" parent="1" vertex="1">
<mxGeometry x="419.91" y="480" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-18" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-18" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="419.91" y="510" width="160" height="30" as="geometry" /> <mxGeometry x="39.960000000000036" y="340" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-19" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-19" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="419.91" y="540" width="160" height="30" as="geometry" /> <mxGeometry x="39.960000000000036" y="370" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-20" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="-XxvrMC6G6SQ8Xm1xsTM-23" target="xvubMpEdOjOFzFZ-NZdf-18" edge="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-20" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=-0.019;entryY=0.493;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryPerimeter=0;" parent="1" source="-XxvrMC6G6SQ8Xm1xsTM-23" target="xvubMpEdOjOFzFZ-NZdf-18" edge="1">
<mxGeometry x="389.35999999999996" y="350" as="geometry"> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="450.04" y="519.9999999999998" as="sourcePoint" /> <mxPoint x="120" y="469.9999999999998" as="sourcePoint" />
<mxPoint x="330.04" y="639.9999999999998" as="targetPoint" /> <mxPoint y="589.9999999999998" as="targetPoint" />
<Array as="points" /> <Array as="points" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-21" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-20" connectable="0" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-21" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-20" connectable="0" vertex="1">
<mxGeometry x="-1" relative="1" as="geometry"> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="-30" y="-35" as="offset" /> <mxPoint x="4" y="-29" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-22" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-20" connectable="0" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-22" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-20" connectable="0" vertex="1">
<mxGeometry x="1" relative="1" as="geometry"> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-10" y="-25" as="offset" /> <mxPoint x="-7" y="-31" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-23" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;productId:&amp;nbsp;&lt;/i&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-23" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;productId:&amp;nbsp;&lt;/i&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="419.91" y="330" width="160" height="30" as="geometry" /> <mxGeometry x="-439.99999999999994" y="450" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-24" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="xvubMpEdOjOFzFZ-NZdf-8" target="xvubMpEdOjOFzFZ-NZdf-3" edge="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-24" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="xvubMpEdOjOFzFZ-NZdf-23" target="-XxvrMC6G6SQ8Xm1xsTM-4" edge="1">
<mxGeometry x="389.35999999999996" y="350" as="geometry"> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="828.9100000000001" y="489.9999999999998" as="sourcePoint" /> <mxPoint x="-240" y="290" as="sourcePoint" />
<mxPoint x="708.9100000000001" y="609.9999999999998" as="targetPoint" /> <mxPoint x="-280.0000000000001" y="605" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-25" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-24" connectable="0" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-25" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-24" connectable="0" vertex="1">
<mxGeometry x="-1" relative="1" as="geometry"> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint y="-25" as="offset" /> <mxPoint x="10" y="-25" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-26" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-24" connectable="0" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-26" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-24" connectable="0" vertex="1">
<mxGeometry x="1" relative="1" as="geometry"> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-9" y="-35" as="offset" /> <mxPoint x="-9" y="-25" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-27" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="xvubMpEdOjOFzFZ-NZdf-23" target="-XxvrMC6G6SQ8Xm1xsTM-4" edge="1">
<mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="309.91" y="414.44" as="sourcePoint" />
<mxPoint x="438.91" y="414.44" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-28" value="1" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-27" connectable="0" vertex="1">
<mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="-20" y="-25" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-29" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-27" connectable="0" vertex="1">
<mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="20" y="-25" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-36" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;street: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="480" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-37" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;firstName: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-37" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;firstName: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="420" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="440" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-38" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;lastName: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-38" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;lastName: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="450" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="470" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-40" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Orders&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#cce5ff;strokeColor=#36393d;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-40" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Orders&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#a20025;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="689.9100000000001" y="270" width="160" height="30" as="geometry" /> <mxGeometry x="-680" y="360" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-41" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;orderId: Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-41" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;orderId: Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="689.9100000000001" y="300" width="160" height="30" as="geometry" /> <mxGeometry x="-680" y="390" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-42" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;orderId:&amp;nbsp;&lt;/i&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-42" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;orderId:&amp;nbsp;&lt;/i&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="419.91" y="300" width="160" height="30" as="geometry" /> <mxGeometry x="-439.99999999999994" y="420" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-43" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="xvubMpEdOjOFzFZ-NZdf-42" target="xvubMpEdOjOFzFZ-NZdf-41" edge="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-47" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;quantity: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="-439.99999999999994" y="480" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-1" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;icon: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="39.960000000000036" y="400" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-2" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;brandId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="-200" y="370" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;rating: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="-200" y="520" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-6" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;description: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="-200.00000000000003" y="430" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-7" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;shippingProgress: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="-680" y="480" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-11" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="-779.9100000000001" y="355" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-12" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="-539.9100000000001" y="395" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-13" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="-299.90999999999997" y="395" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-14" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="-60.04000000000002" y="315" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-15" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="179.92000000000002" y="345" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-16" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-785.2" y="385" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-17" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="174.63000000000005" y="375" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-18" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="-674.71" y="565" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-19" value="Primary Key" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-654.8" y="560" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-20" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-680" y="635" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-21" value="Unique" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-654.8000000000001" y="630" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-24" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="-299.90999999999997" y="425" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-25" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="-299.90999999999997" y="455" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-26" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="-539.9100000000001" y="425" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-27" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="-60.04000000000002" y="375" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-28" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="-674.71" y="600" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-29" value="Foreign Key" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-654.8" y="595" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-1" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;bankName: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="540" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-2" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;iban: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="570" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-3" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;orderedAt: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-680" y="450" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-4" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Brands&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="39.960000000000036" y="470" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-5" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="39.960000000000036" y="500" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-6" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="39.960000000000036" y="530" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-7" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" vertex="1" parent="1">
<mxGeometry x="180.24999999999994" y="505" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-8" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" vertex="1" parent="1">
<mxGeometry x="174.95999999999998" y="535" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-9" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="Mm1_BtgNgvV1z5cDQ8i7-2" target="_UF3kFiP3G3Olu9frHUj-5">
<mxGeometry x="389.35999999999996" y="350" as="geometry"> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="629.9100000000001" y="390" as="sourcePoint" /> <mxPoint x="-445.04" y="510" as="sourcePoint" />
<mxPoint x="729.9100000000001" y="390" as="targetPoint" /> <mxPoint x="-315.04" y="510" as="targetPoint" />
<Array as="points" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-44" value="1..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-43" connectable="0" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-10" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-9">
<mxGeometry x="-1" relative="1" as="geometry"> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="5" y="-25" as="offset" /> <mxPoint x="3" y="-28" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-45" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-43" connectable="0" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-11" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-9">
<mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-4" y="-30" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-12" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;images: Array&amp;lt;String&amp;gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-200" y="610" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-13" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;specs: Array&amp;lt;String&amp;gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-200" y="580" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-14" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;inStock: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-200" y="550" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-16" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Addresses&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#1ba1e2;strokeColor=default;fontColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="-1160" y="200" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-17" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;street: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="290" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-18" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;houseNumber: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="320" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-19" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;postalCode: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="350" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-20" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;city: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="380" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-21" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="230" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-25" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;accountId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="260" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-26" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" vertex="1" parent="1">
<mxGeometry x="-1017" y="234" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-27" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Payments&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#1ba1e2;strokeColor=default;fontColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="-1160" y="450" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-28" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="480" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-29" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;accountId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="510" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-33" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" vertex="1" parent="1">
<mxGeometry x="-1017" y="485" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-36" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" vertex="1" parent="1">
<mxGeometry x="-1017" y="265" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-37" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" vertex="1" parent="1">
<mxGeometry x="-1017" y="515" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-38" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;accountRoleId: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-920" y="500" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-39" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;AccountRoles&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#1ba1e2;strokeColor=default;fontColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="-1160" y="640" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-40" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="700" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-41" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="670" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-44" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" vertex="1" parent="1">
<mxGeometry x="-779.9100000000001" y="505" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-49" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;orderPrice: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-439.99999999999994" y="510" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-52" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="_UF3kFiP3G3Olu9frHUj-25" target="xvubMpEdOjOFzFZ-NZdf-3">
<mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="-890.0000000000001" y="179.99999999999994" as="sourcePoint" />
<mxPoint x="-790.0000000000001" y="179.99999999999994" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-53" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-52">
<mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="10" y="-25" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-54" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-52">
<mxGeometry x="1" relative="1" as="geometry"> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-9" y="-25" as="offset" /> <mxPoint x="-9" y="-25" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-47" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;quantity: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-55" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="_UF3kFiP3G3Olu9frHUj-29" target="xvubMpEdOjOFzFZ-NZdf-3">
<mxGeometry x="419.91" y="360" width="160" height="30" as="geometry" /> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="-950.0000000000001" y="674.55" as="sourcePoint" />
<mxPoint x="-850.0000000000001" y="674.55" as="targetPoint" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-1" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;icon: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-56" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-55">
<mxGeometry x="419.91" y="570" width="160" height="30" as="geometry" /> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="10" y="-25" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-2" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;creator: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-57" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-55">
<mxGeometry x="130.04000000000002" y="360" width="160" height="30" as="geometry" /> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-9" y="-25" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-3" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;distributor: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-58" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" vertex="1" parent="1">
<mxGeometry x="130.04" y="390" width="160" height="30" as="geometry" /> <mxGeometry x="-1017" y="675" width="9.43" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;rating: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-59" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="_UF3kFiP3G3Olu9frHUj-38" target="_UF3kFiP3G3Olu9frHUj-41">
<mxGeometry x="130.04000000000002" y="600" width="160" height="30" as="geometry" /> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="-940.0000000000001" y="650" as="sourcePoint" />
<mxPoint x="-840.0000000000001" y="650" as="targetPoint" />
<Array as="points">
<mxPoint x="-950" y="515" />
<mxPoint x="-950" y="685" />
</Array>
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-5" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;imageUrl: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-60" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-59">
<mxGeometry x="130.04" y="480" width="160" height="30" as="geometry" /> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="-24" y="-28" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-6" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;description: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-61" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-59">
<mxGeometry x="130.04" y="450" width="160" height="30" as="geometry" /> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="15" y="-29" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-7" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;shippingProgress: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-62" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xvubMpEdOjOFzFZ-NZdf-8" target="xvubMpEdOjOFzFZ-NZdf-3">
<mxGeometry x="689.9100000000001" y="390" width="160" height="30" as="geometry" /> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="-779.9100000000001" y="604.4399999999999" as="sourcePoint" />
<mxPoint x="-679.9100000000001" y="604.4399999999999" as="targetPoint" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-8" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;houseNumber: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-63" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-62">
<mxGeometry x="949.91" y="510" width="160" height="30" as="geometry" /> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="-22" y="-27" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-9" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;postalCode: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-64" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-62">
<mxGeometry x="949.91" y="540" width="160" height="30" as="geometry" /> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="13" y="-32" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-10" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;city: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-65" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xvubMpEdOjOFzFZ-NZdf-42" target="xvubMpEdOjOFzFZ-NZdf-41">
<mxGeometry x="949.9100000000001" y="570" width="160" height="30" as="geometry" /> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="-620.0000000000001" y="594.64" as="sourcePoint" />
<mxPoint x="-520.0000000000001" y="594.64" as="targetPoint" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-11" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-66" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-65">
<mxGeometry x="1090" y="335" width="9.43" height="20" as="geometry" /> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="-22" y="-28" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-12" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-67" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-65">
<mxGeometry x="830" y="305" width="9.43" height="20" as="geometry" /> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="14" y="-29" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-13" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-68" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" vertex="1" parent="1">
<mxGeometry x="560" y="275" width="9.43" height="20" as="geometry" /> <mxGeometry x="-60.04000000000002" y="345" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-14" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="270" y="335" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-15" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="559.87" y="515" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-16" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="1084.71" y="365" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-17" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="554.58" y="545" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-18" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="720" y="475" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-19" value="Primary Key" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="739.9100000000001" y="470" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-20" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="714.71" y="545" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-21" value="Unique" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="739.91" y="540" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-24" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="560" y="305" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-25" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="560" y="335" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-26" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="830" y="335" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-27" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="270" y="515" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-28" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="720" y="510" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-29" value="Foreign Key" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="739.9100000000001" y="505" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="sa5D8W8LL20ZiN9_dg2E-1" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="1">
<mxGeometry x="309.99999999999994" y="500" as="geometry" />
</mxCell> </mxCell>
</root> </root>
</mxGraphModel> </mxGraphModel>

View File

@@ -1,84 +1,81 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.8 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.8"> <mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.8 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.8">
<diagram name="Page-1" id="WevClHWmhzPAQ7FDN5po"> <diagram name="Page-1" id="WevClHWmhzPAQ7FDN5po">
<mxGraphModel dx="819" dy="473" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <mxGraphModel dx="1988" dy="473" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root> <root>
<mxCell id="0" /> <mxCell id="0" />
<mxCell id="1" parent="0" /> <mxCell id="1" parent="0" />
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="330" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="310" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-5" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Products&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#cce5ff;strokeColor=#36393d;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-5" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Products&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="300" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="280" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-21" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-21" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="420" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="399" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-22" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;price: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-22" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;price: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="540" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="460" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-23" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;categoryId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-23" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;categoryId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="510" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="340" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="-XxvrMC6G6SQ8Xm1xsTM-24" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;discount: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="-XxvrMC6G6SQ8Xm1xsTM-24" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;discount: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="130.04000000000002" y="570" width="160" height="30" as="geometry" /> <mxGeometry x="-200" y="490" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-2" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Accounts&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#cce5ff;strokeColor=#36393d;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-2" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Accounts&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#1ba1e2;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="300" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="320" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-3" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-3" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="330" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="350" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;username: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;username: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="360" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="380" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-5" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;password: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-5" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;password: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="390" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="410" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-6" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;OrderItems&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#cce5ff;strokeColor=#36393d;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-6" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;OrderItems&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#a20025;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="419.91" y="240" width="160" height="30" as="geometry" /> <mxGeometry x="-439.99999999999994" y="360" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-7" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-7" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="419.91" y="270" width="160" height="30" as="geometry" /> <mxGeometry x="-439.99999999999994" y="390" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-8" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;usernameId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-8" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;accountId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="689.9100000000001" y="330" width="160" height="30" as="geometry" /> <mxGeometry x="-680" y="420" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-9" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;totalPrice: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-17" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Categories&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="689.9100000000001" y="360" width="160" height="30" as="geometry" /> <mxGeometry x="39.960000000000036" y="310" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-17" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Categories&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#cce5ff;strokeColor=#36393d;" parent="1" vertex="1">
<mxGeometry x="419.91" y="480" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-18" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-18" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="419.91" y="510" width="160" height="30" as="geometry" /> <mxGeometry x="39.960000000000036" y="340" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-19" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-19" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="419.91" y="540" width="160" height="30" as="geometry" /> <mxGeometry x="39.960000000000036" y="370" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-20" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="-XxvrMC6G6SQ8Xm1xsTM-23" target="xvubMpEdOjOFzFZ-NZdf-18" edge="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-20" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=-0.019;entryY=0.493;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryPerimeter=0;" parent="1" source="-XxvrMC6G6SQ8Xm1xsTM-23" target="xvubMpEdOjOFzFZ-NZdf-18" edge="1">
<mxGeometry x="389.35999999999996" y="350" as="geometry"> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="450.04" y="519.9999999999998" as="sourcePoint" /> <mxPoint x="120" y="469.9999999999998" as="sourcePoint" />
<mxPoint x="330.04" y="639.9999999999998" as="targetPoint" /> <mxPoint y="589.9999999999998" as="targetPoint" />
<Array as="points" /> <Array as="points" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-21" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-20" connectable="0" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-21" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-20" connectable="0" vertex="1">
<mxGeometry x="-1" relative="1" as="geometry"> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="-30" y="-35" as="offset" /> <mxPoint x="4" y="-29" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-22" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-20" connectable="0" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-22" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-20" connectable="0" vertex="1">
<mxGeometry x="1" relative="1" as="geometry"> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-10" y="-25" as="offset" /> <mxPoint x="-7" y="-31" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-23" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;productId:&amp;nbsp;&lt;/i&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-23" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;productId:&amp;nbsp;&lt;/i&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="419.91" y="330" width="160" height="30" as="geometry" /> <mxGeometry x="-439.99999999999994" y="450" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-24" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="xvubMpEdOjOFzFZ-NZdf-8" target="xvubMpEdOjOFzFZ-NZdf-3" edge="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-24" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="xvubMpEdOjOFzFZ-NZdf-23" target="-XxvrMC6G6SQ8Xm1xsTM-4" edge="1">
<mxGeometry x="389.35999999999996" y="350" as="geometry"> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="828.9100000000001" y="489.9999999999998" as="sourcePoint" /> <mxPoint x="-240" y="290" as="sourcePoint" />
<mxPoint x="708.9100000000001" y="609.9999999999998" as="targetPoint" /> <mxPoint x="-280.0000000000001" y="605" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-25" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-24" connectable="0" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-25" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-24" connectable="0" vertex="1">
@@ -91,142 +88,289 @@
<mxPoint x="-9" y="-25" as="offset" /> <mxPoint x="-9" y="-25" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-27" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="xvubMpEdOjOFzFZ-NZdf-23" target="-XxvrMC6G6SQ8Xm1xsTM-4" edge="1">
<mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="309.91" y="414.44" as="sourcePoint" />
<mxPoint x="438.91" y="414.44" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-28" value="1" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-27" connectable="0" vertex="1">
<mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="-20" y="-25" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-29" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-27" connectable="0" vertex="1">
<mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="20" y="-25" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-36" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;street: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="480" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-37" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;firstName: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-37" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;firstName: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="420" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="440" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-38" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;lastName: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-38" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;lastName: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="949.9100000000001" y="450" width="160" height="30" as="geometry" /> <mxGeometry x="-920" y="470" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-40" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Orders&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#cce5ff;strokeColor=#36393d;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-40" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Orders&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#a20025;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
<mxGeometry x="689.9100000000001" y="270" width="160" height="30" as="geometry" /> <mxGeometry x="-680" y="360" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-41" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;orderId: Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-41" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id: Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="689.9100000000001" y="300" width="160" height="30" as="geometry" /> <mxGeometry x="-680" y="390" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-42" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;orderId:&amp;nbsp;&lt;/i&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-42" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;orderId:&amp;nbsp;&lt;/i&gt;&lt;i style=&quot;background-color: initial;&quot;&gt;Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="419.91" y="300" width="160" height="30" as="geometry" /> <mxGeometry x="-439.99999999999994" y="420" width="160" height="30" as="geometry" />
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-43" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="xvubMpEdOjOFzFZ-NZdf-42" target="xvubMpEdOjOFzFZ-NZdf-41" edge="1"> <mxCell id="xvubMpEdOjOFzFZ-NZdf-47" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;quantity: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="-439.99999999999994" y="480" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-1" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;icon: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="39.960000000000036" y="400" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-2" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;brandId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="-200" y="370" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;rating: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="-200" y="520" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-6" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;description: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="-200.00000000000003" y="430" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-7" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;shippingProgress: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
<mxGeometry x="-680" y="480" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-11" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="-779.9100000000001" y="355" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-12" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="-539.9100000000001" y="395" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-13" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="-299.90999999999997" y="395" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-14" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="-60.04000000000002" y="315" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-15" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="179.92000000000002" y="345" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-16" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-785.2" y="385" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-17" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="174.63000000000005" y="375" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-18" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="-674.71" y="565" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-19" value="Primary Key" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-654.8" y="560" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-20" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-680" y="635" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-21" value="Unique" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-654.8000000000001" y="630" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-24" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="-299.90999999999997" y="425" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-25" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="-299.90999999999997" y="455" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-26" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="-539.9100000000001" y="425" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-27" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="-60.04000000000002" y="375" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-28" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="-674.71" y="600" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-29" value="Foreign Key" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-654.8" y="595" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-1" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;bankName: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="540" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-2" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;iban: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="570" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-3" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;orderedAt: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-680" y="450" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-4" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Brands&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="39.960000000000036" y="470" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-5" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="39.960000000000036" y="500" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-6" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="39.960000000000036" y="530" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-7" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" vertex="1" parent="1">
<mxGeometry x="180.24999999999994" y="505" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-8" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" vertex="1" parent="1">
<mxGeometry x="174.95999999999998" y="535" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-9" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="Mm1_BtgNgvV1z5cDQ8i7-2" target="_UF3kFiP3G3Olu9frHUj-5">
<mxGeometry x="389.35999999999996" y="350" as="geometry"> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="629.9100000000001" y="390" as="sourcePoint" /> <mxPoint x="-445.04" y="510" as="sourcePoint" />
<mxPoint x="729.9100000000001" y="390" as="targetPoint" /> <mxPoint x="-315.04" y="510" as="targetPoint" />
<Array as="points" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-44" value="1..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-43" connectable="0" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-10" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-9">
<mxGeometry x="-1" relative="1" as="geometry"> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="5" y="-25" as="offset" /> <mxPoint x="3" y="-28" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-45" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="xvubMpEdOjOFzFZ-NZdf-43" connectable="0" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-11" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-9">
<mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-4" y="-30" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-12" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;images: Array&amp;lt;String&amp;gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-200" y="610" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-13" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;specs: Array&amp;lt;String&amp;gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-200" y="580" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-14" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;inStock: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-200" y="550" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-16" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Addresses&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#1ba1e2;strokeColor=default;fontColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="-1160" y="200" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-17" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;street: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="290" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-18" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;houseNumber: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="320" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-19" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;postalCode: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="350" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-20" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;city: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="380" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-21" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="230" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-25" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;accountId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="260" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-26" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" vertex="1" parent="1">
<mxGeometry x="-1017" y="234" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-27" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;Payments&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#1ba1e2;strokeColor=default;fontColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="-1160" y="450" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-28" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="480" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-29" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;i&gt;accountId: Number&lt;/i&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="510" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-33" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" vertex="1" parent="1">
<mxGeometry x="-1017" y="485" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-36" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" vertex="1" parent="1">
<mxGeometry x="-1017" y="265" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-37" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" vertex="1" parent="1">
<mxGeometry x="-1017" y="515" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-38" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;accountRoleId: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-920" y="500" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-39" value="&lt;blockquote style=&quot;margin: 0px; border: none; padding: 0px;&quot;&gt;&lt;b&gt;&lt;u&gt;AccountRoles&lt;/u&gt;&lt;/b&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#1ba1e2;strokeColor=default;fontColor=#ffffff;" vertex="1" parent="1">
<mxGeometry x="-1160" y="640" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-40" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;name: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="700" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-41" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;&lt;u&gt;id:&amp;nbsp;&lt;/u&gt;&lt;u style=&quot;background-color: initial;&quot;&gt;Number&lt;/u&gt;&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-1160" y="670" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-44" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" vertex="1" parent="1">
<mxGeometry x="-779.9100000000001" y="505" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-49" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;orderPrice: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
<mxGeometry x="-439.99999999999994" y="510" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-52" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="_UF3kFiP3G3Olu9frHUj-25" target="xvubMpEdOjOFzFZ-NZdf-3">
<mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="-890.0000000000001" y="179.99999999999994" as="sourcePoint" />
<mxPoint x="-790.0000000000001" y="179.99999999999994" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-53" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-52">
<mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="10" y="-25" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="_UF3kFiP3G3Olu9frHUj-54" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-52">
<mxGeometry x="1" relative="1" as="geometry"> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-9" y="-25" as="offset" /> <mxPoint x="-9" y="-25" as="offset" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="xvubMpEdOjOFzFZ-NZdf-47" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;quantity: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-55" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="_UF3kFiP3G3Olu9frHUj-29" target="xvubMpEdOjOFzFZ-NZdf-3">
<mxGeometry x="419.91" y="360" width="160" height="30" as="geometry" /> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="-950.0000000000001" y="674.55" as="sourcePoint" />
<mxPoint x="-850.0000000000001" y="674.55" as="targetPoint" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-1" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;icon: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-56" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-55">
<mxGeometry x="419.91" y="570" width="160" height="30" as="geometry" /> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="10" y="-25" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-2" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;creator: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-57" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-55">
<mxGeometry x="130.04000000000002" y="360" width="160" height="30" as="geometry" /> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="-9" y="-25" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-3" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;distributor: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-58" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" vertex="1" parent="1">
<mxGeometry x="130.04" y="390" width="160" height="30" as="geometry" /> <mxGeometry x="-1017" y="675" width="9.43" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-4" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;rating: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-59" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="_UF3kFiP3G3Olu9frHUj-38" target="_UF3kFiP3G3Olu9frHUj-41">
<mxGeometry x="130.04000000000002" y="600" width="160" height="30" as="geometry" /> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="-940.0000000000001" y="650" as="sourcePoint" />
<mxPoint x="-840.0000000000001" y="650" as="targetPoint" />
<Array as="points">
<mxPoint x="-950" y="515" />
<mxPoint x="-950" y="685" />
</Array>
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-5" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;imageUrl: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-60" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-59">
<mxGeometry x="130.04" y="480" width="160" height="30" as="geometry" /> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="-24" y="-28" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-6" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;description: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-61" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-59">
<mxGeometry x="130.04" y="450" width="160" height="30" as="geometry" /> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="15" y="-29" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-7" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;shippingProgress: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-62" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xvubMpEdOjOFzFZ-NZdf-8" target="xvubMpEdOjOFzFZ-NZdf-3">
<mxGeometry x="689.9100000000001" y="390" width="160" height="30" as="geometry" /> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="-779.9100000000001" y="604.4399999999999" as="sourcePoint" />
<mxPoint x="-679.9100000000001" y="604.4399999999999" as="targetPoint" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-8" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;houseNumber: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-63" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-62">
<mxGeometry x="949.91" y="510" width="160" height="30" as="geometry" /> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="-22" y="-27" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-9" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;postalCode: Number&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-64" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-62">
<mxGeometry x="949.91" y="540" width="160" height="30" as="geometry" /> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="13" y="-32" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-10" value="&lt;blockquote style=&quot;margin: 0px 0px 0px 8px; border: none; padding: 0px;&quot;&gt;city: String&lt;/blockquote&gt;" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-65" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="xvubMpEdOjOFzFZ-NZdf-42" target="xvubMpEdOjOFzFZ-NZdf-41">
<mxGeometry x="949.9100000000001" y="570" width="160" height="30" as="geometry" /> <mxGeometry x="389.35999999999996" y="350" as="geometry">
<mxPoint x="-620.0000000000001" y="594.64" as="sourcePoint" />
<mxPoint x="-520.0000000000001" y="594.64" as="targetPoint" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-11" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-66" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-65">
<mxGeometry x="1090" y="335" width="9.43" height="20" as="geometry" /> <mxGeometry x="-1" relative="1" as="geometry">
<mxPoint x="-22" y="-28" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-12" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-67" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="_UF3kFiP3G3Olu9frHUj-65">
<mxGeometry x="830" y="305" width="9.43" height="20" as="geometry" /> <mxGeometry x="1" relative="1" as="geometry">
<mxPoint x="14" y="-29" as="offset" />
</mxGeometry>
</mxCell> </mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-13" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1"> <mxCell id="_UF3kFiP3G3Olu9frHUj-68" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" vertex="1" parent="1">
<mxGeometry x="560" y="275" width="9.43" height="20" as="geometry" /> <mxGeometry x="-60.04000000000002" y="345" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-14" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="270" y="335" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-15" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="559.87" y="515" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-16" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="1084.71" y="365" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-17" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="554.58" y="545" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-18" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#2072B8;" parent="1" vertex="1">
<mxGeometry x="720" y="475" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-19" value="Primary Key" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="739.9100000000001" y="470" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-20" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;rotation=0;gradientColor=#223548;strokeColor=none;gradientDirection=east;fillColor=#5b738b;rounded=0;pointerEvents=0;fontFamily=Helvetica;fontSize=16;fontColor=#FFFFFF;spacingTop=4;spacingBottom=4;spacingLeft=4;spacingRight=4;points=[];fontStyle=1" parent="1" vertex="1">
<mxGeometry x="714.71" y="545" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-21" value="Unique" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="739.91" y="540" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-24" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="560" y="305" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-25" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="560" y="335" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-26" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="830" y="335" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-27" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="270" y="515" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-28" value="" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.security.key_permissions;fillColor=#CCCCCC;" parent="1" vertex="1">
<mxGeometry x="720" y="510" width="9.43" height="20" as="geometry" />
</mxCell>
<mxCell id="Mm1_BtgNgvV1z5cDQ8i7-29" value="Foreign Key" style="text;strokeColor=none;align=left;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="739.9100000000001" y="505" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="sa5D8W8LL20ZiN9_dg2E-1" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" connectable="0" vertex="1" parent="1">
<mxGeometry x="309.99999999999994" y="500" as="geometry" />
</mxCell> </mxCell>
</root> </root>
</mxGraphModel> </mxGraphModel>

View File

@@ -0,0 +1,16 @@
{
"data": [
{
"id": 0,
"name": "User",
"privilegeBuy": true,
"privilegeAdminPanel": false
},
{
"id": 1,
"name": "Admin",
"privilegeBuy": true,
"privilegeAdminPanel": true
}
]
}

View File

@@ -4,92 +4,183 @@
"id": 0, "id": 0,
"username": "hagemeister93", "username": "hagemeister93",
"password": "Xjt3qb5t", "password": "Xjt3qb5t",
"firstName": "Laurin",
"lastName": "Hagemeister",
"addresses": [
{
"accountId": 0,
"street": "Laportestraße", "street": "Laportestraße",
"houseNumber": 22, "houseNumber": 22,
"postalCode": 30449, "postalCode": 30449,
"city": "Hannover", "city": "Hannover"
"firstName": "Laurin", }
"lastName": "Hagemeister", ],
"payments": [
{
"accountId": 0,
"bankName": "Deutsche Bank", "bankName": "Deutsche Bank",
"iban": "DE92500105175721645777" "iban": "DE92500105175721645777"
}
],
"accountRoleId": 1
}, },
{ {
"id": 1, "id": 1,
"username": "katjaStoiber", "username": "katjaStoiber",
"password": "target123", "password": "target123",
"firstName": "Katja",
"lastName": "Stoiber",
"addresses": [
{
"accountId": 1,
"street": "Gustav-Adolf-Straße", "street": "Gustav-Adolf-Straße",
"houseNumber": 30, "houseNumber": 30,
"postalCode": 30167, "postalCode": 30167,
"city": "Hannover", "city": "Hannover"
"firstName": "Katja", }
"lastName": "Stoiber", ],
"payments": [
{
"accountId": 1,
"bankName": "DZ Bank", "bankName": "DZ Bank",
"iban": "DE12500105179557939114" "iban": "DE12500105179557939114"
}
],
"accountRoleId": 0
}, },
{ {
"id": 2, "id": 2,
"username": "oetkerohnek", "username": "oetkerohnek",
"password": "iloveyou", "password": "iloveyou",
"firstName": "Luna",
"lastName": "Oeter",
"addresses": [
{
"accountId": 2,
"street": "Eckermannstraße", "street": "Eckermannstraße",
"houseNumber": 1, "houseNumber": 1,
"postalCode": 30625, "postalCode": 30625,
"city": "Hannover", "city": "Hannover"
"firstName": "Luna", },
"lastName": "Oeter", {
"accountId": 2,
"street": "Gehrdener Straße",
"houseNumber": 14,
"postalCode": 30459,
"city": "Hannover"
}
],
"payments": [
{
"accountId": 2,
"bankName": "Commerzbank", "bankName": "Commerzbank",
"iban": "DE31500105175417833272" "iban": "DE31500105175417833272"
}
],
"accountRoleId": 0
}, },
{ {
"id": 3, "id": 3,
"username": "duranduran", "username": "duranduran",
"password": "H4nn0ver", "password": "H4nn0ver",
"firstName": "Jürgen",
"lastName": "Durand",
"addresses": [
{
"accountId": 3,
"street": "Schlägerstraße", "street": "Schlägerstraße",
"houseNumber": 36, "houseNumber": 36,
"postalCode": 30171, "postalCode": 30171,
"city": "Hannover", "city": "Hannover"
"firstName": "Jürgen", }
"lastName": "Durand", ],
"payments": [
{
"accountId": 3,
"bankName": "ING", "bankName": "ING",
"iban": "DE41500105172184936679" "iban": "DE41500105172184936679"
}
],
"accountRoleId": 0
}, },
{ {
"id": 4, "id": 4,
"username": "guitarhero", "username": "guitarhero",
"password": "gwerty123", "password": "gwerty123",
"firstName": "Frederik",
"lastName": "Furtwängler",
"addresses": [
{
"accountId": 4,
"street": "Steinmetzstraße", "street": "Steinmetzstraße",
"houseNumber": 12, "houseNumber": 12,
"postalCode": 30163, "postalCode": 30163,
"city": "Hannover", "city": "Hannover"
"firstName": "Frederik", }
"lastName": "Furtwängler", ],
"payments": [
{
"accountId": 4,
"bankName": "Sparkasse Hannover", "bankName": "Sparkasse Hannover",
"iban": "DE85500105172283979774" "iban": "DE85500105172283979774"
}
],
"accountRoleId": 0
}, },
{ {
"id": 5, "id": 5,
"username": "herbstMareike", "username": "herbstMareike",
"password": "qhsrbpgrs", "password": "qhsrbpgrs",
"firstName": "Mareike",
"lastName": "Herbst",
"addresses": [
{
"accountId": 5,
"street": "Allerweg", "street": "Allerweg",
"houseNumber": 33, "houseNumber": 33,
"postalCode": 30851, "postalCode": 30851,
"city": "Langenhagen", "city": "Langenhagen"
"firstName": "Mareike", }
"lastName": "Herbst", ],
"payments": [
{
"accountId": 5,
"bankName": "Postbank", "bankName": "Postbank",
"iban": "DE45500105178862417577" "iban": "DE45500105178862417577"
}
],
"accountRoleId": 0
}, },
{ {
"id": 6, "id": 6,
"username": "seibertmitb", "username": "seibertmitb",
"password": "{jkz+WvQe", "password": "{jkz+WvQe",
"firstName": "Janna",
"lastName": "Seibert",
"addresses": [
{
"accountId": 6,
"street": "Marktstraße", "street": "Marktstraße",
"houseNumber": 26, "houseNumber": 26,
"postalCode": 30880, "postalCode": 30880,
"city": "Laatzen", "city": "Laatzen"
"firstName": "Janna", },
"lastName": "Seibert", {
"accountId": 6,
"street": "Kleiner Hillen",
"houseNumber": 24,
"postalCode": 30559,
"city": "Hannover"
}
],
"payments": [
{
"accountId": 6,
"bankName": "Sparkasse Hannover", "bankName": "Sparkasse Hannover",
"iban": "DE51500105177526222196" "iban": "DE51500105177526222196"
} }
],
"accountRoleId": 0
}
] ]
} }

View File

@@ -0,0 +1,40 @@
{
"data": [
{
"id": 0,
"name": "Lenovo"
},
{
"id": 1,
"name": "Puma"
},
{
"id": 2,
"name": "George Orwell"
},
{
"id": 3,
"name": "Aldous Huxley"
},
{
"id": 4,
"name": "Dell"
},
{
"id": 5,
"name": "Fender"
},
{
"id": 6,
"name": "ESP"
},
{
"id": 7,
"name": "Pearl"
},
{
"id": 8,
"name": "Apple"
}
]
}

View File

@@ -4,25 +4,29 @@
"id": 0, "id": 0,
"orderId": 0, "orderId": 0,
"productId": 0, "productId": 0,
"quantity": 2 "quantity": 2,
"orderPrice": 1769.99
}, },
{ {
"id": 1, "id": 1,
"orderId": 1, "orderId": 1,
"productId": 6, "productId": 6,
"quantity": 1 "quantity": 1,
"orderPrice": 899.99
}, },
{ {
"id": 2, "id": 2,
"orderId": 2, "orderId": 2,
"productId": 3, "productId": 3,
"quantity": 3 "quantity": 3,
"orderPrice": 9.99
}, },
{ {
"id": 3, "id": 3,
"orderId": 2, "orderId": 2,
"productId": 2, "productId": 2,
"quantity": 1 "quantity": 1,
"orderPrice": 14.99
} }
] ]
} }

View File

@@ -3,22 +3,17 @@
{ {
"id": 0, "id": 0,
"accountId": 0, "accountId": 0,
"totalPrice": 0,
"shippingProgress": 4 "shippingProgress": 4
}, },
{ {
"id": 1, "id": 1,
"accountId": 3, "accountId": 3,
"totalPrice": 7.99, "shippingProgress": 5
"shippingProgress": 5,
"createdAt": "2024-09-09 12:24:24.225 +00:00"
}, },
{ {
"id": 2, "id": 2,
"accountId": 3, "accountId": 3,
"totalPrice": 44.96, "shippingProgress": 2
"shippingProgress": 2,
"createdAt": "2024-09-12 09:57:24.225 +00:00"
} }
] ]
} }

View File

@@ -2,7 +2,7 @@
"data": [ "data": [
{ {
"id": 0, "id": 0,
"brand": "Lenovo", "brandId": 0,
"name": "Thinkpad T14s Gen 4", "name": "Thinkpad T14s Gen 4",
"price": 1769.99, "price": 1769.99,
"categoryId": 1, "categoryId": 1,
@@ -27,11 +27,11 @@
"thinkpad-t14s-6.avif", "thinkpad-t14s-6.avif",
"thinkpad-t14s-7.avif" "thinkpad-t14s-7.avif"
], ],
"storedItems": 5 "inStock": 5
}, },
{ {
"id": 1, "id": 1,
"brand": "Puma", "brandId": 1,
"name": "Men's T-Shirt Black", "name": "Men's T-Shirt Black",
"price": 14.99, "price": 14.99,
"categoryId": 3, "categoryId": 3,
@@ -52,11 +52,11 @@
"puma-t-shirt-men-4.jpg", "puma-t-shirt-men-4.jpg",
"puma-t-shirt-men-5.jpg" "puma-t-shirt-men-5.jpg"
], ],
"storedItems": 30 "inStock": 30
}, },
{ {
"id": 2, "id": 2,
"brand": "Puma", "brandId": 1,
"name": "Woman's Shirt", "name": "Woman's Shirt",
"price": 14.99, "price": 14.99,
"categoryId": 3, "categoryId": 3,
@@ -78,11 +78,11 @@
"puma-t-shirt-woman-5.jpg", "puma-t-shirt-woman-5.jpg",
"puma-t-shirt-woman-6.jpg" "puma-t-shirt-woman-6.jpg"
], ],
"storedItems": 30 "inStock": 30
}, },
{ {
"id": 3, "id": 3,
"brand": "George Orwell", "brandId": 2,
"name": "1984", "name": "1984",
"price": 9.99, "price": 9.99,
"categoryId": 4, "categoryId": 4,
@@ -108,11 +108,11 @@
"1984-2.webp", "1984-2.webp",
"1984-3.webp" "1984-3.webp"
], ],
"storedItems": 30 "inStock": 30
}, },
{ {
"id": 4, "id": 4,
"brand": "Aldous Huxley", "brandId": 3,
"name": "Brave New World", "name": "Brave New World",
"price": 10.49, "price": 10.49,
"categoryId": 4, "categoryId": 4,
@@ -135,11 +135,11 @@
"brave-new-world-1.jpg", "brave-new-world-1.jpg",
"brave-new-world-2.jpg" "brave-new-world-2.jpg"
], ],
"storedItems": 30 "inStock": 30
}, },
{ {
"id": 5, "id": 5,
"brand": "Dell", "brandId": 4,
"name": "XPS 8960 Desktop", "name": "XPS 8960 Desktop",
"price": 1640.26, "price": 1640.26,
"categoryId": 1, "categoryId": 1,
@@ -160,11 +160,11 @@
"dell-xps-desktop-5.jpg", "dell-xps-desktop-5.jpg",
"dell-xps-desktop-6.jpg" "dell-xps-desktop-6.jpg"
], ],
"storedItems": 10 "inStock": 10
}, },
{ {
"id": 6, "id": 6,
"brand": "Fender", "brandId": 5,
"name": "Player II Jazz Bass RW 3TS", "name": "Player II Jazz Bass RW 3TS",
"price": 899.99, "price": 899.99,
"categoryId": 5, "categoryId": 5,
@@ -198,11 +198,11 @@
"fender-player-ii-jazz-bass-rw-3ts-4.jpg", "fender-player-ii-jazz-bass-rw-3ts-4.jpg",
"fender-player-ii-jazz-bass-rw-3ts-5.jpg" "fender-player-ii-jazz-bass-rw-3ts-5.jpg"
], ],
"storedItems": 15 "inStock": 15
}, },
{ {
"id": 7, "id": 7,
"brand": "ESP", "brandId": 6,
"name": "LTD Iron Cross SW", "name": "LTD Iron Cross SW",
"price": 2999.00, "price": 2999.00,
"categoryId": 5, "categoryId": 5,
@@ -239,11 +239,11 @@
"esp-lts-iron-cross-sw-5.jpg", "esp-lts-iron-cross-sw-5.jpg",
"esp-lts-iron-cross-sw-6.jpg" "esp-lts-iron-cross-sw-6.jpg"
], ],
"storedItems": 0 "inStock": 0
}, },
{ {
"id": 8, "id": 8,
"brand": "Pearl", "brandId": 7,
"name": "Decade Maple Standard D. Black", "name": "Decade Maple Standard D. Black",
"price": 1444.00, "price": 1444.00,
"categoryId": 5, "categoryId": 5,
@@ -273,11 +273,11 @@
"pearl-decade-maple-standard-black-5.jpg", "pearl-decade-maple-standard-black-5.jpg",
"pearl-decade-maple-standard-black-6.jpg" "pearl-decade-maple-standard-black-6.jpg"
], ],
"storedItems": 4 "inStock": 4
}, },
{ {
"id": 9, "id": 9,
"brand": "Apple", "brandId": 8,
"name": "MacBook Air 13.6 Zoll M3", "name": "MacBook Air 13.6 Zoll M3",
"price": 1759.00, "price": 1759.00,
"categoryId": 1, "categoryId": 1,
@@ -299,7 +299,7 @@
"macbook-air-4.avif", "macbook-air-4.avif",
"macbook-air-5.avif" "macbook-air-5.avif"
], ],
"storedItems": 18 "inStock": 18
} }
] ]
} }

View File

@@ -6,6 +6,11 @@ import { Order } from "./models/order.model"
import { OrderItem } from "./models/orderItem.model" import { OrderItem } from "./models/orderItem.model"
import { Product } from "./models/product.model" import { Product } from "./models/product.model"
import { Account } from "./models/account.model" import { Account } from "./models/account.model"
import { prepopulateDatabase } from "./scripts/databaseHelper"
import { Address } from "./models/address.model"
import { Payment } from "./models/payment.model"
import { AccountRole } from "./models/accountRole.model"
import { Brand } from "./models/brand.model"
const dbName = "database" const dbName = "database"
const dbUser = "root" const dbUser = "root"
@@ -18,13 +23,16 @@ export const sequelize = new Sequelize({
username: dbUser, username: dbUser,
password: dbPassword, password: dbPassword,
storage: "database.sqlite", storage: "database.sqlite",
models: [ Category, Product, Account, Order, OrderItem ] models: [ Address, Payment, AccountRole, Account, Category, Brand, Product, Order, OrderItem ]
}) })
export function startDatabase() { export function startDatabase() {
// Create database and tables // Create database and tables
sequelize.sync({ force: false }) sequelize.sync({ force: false })
.then(() => { .then(() => {
console.log(`Database & tables created!`) console.log("Database & tables created!")
//prepopulateDatabase()
console.log("Database prepopulated!")
}) })
} }

View File

@@ -1,7 +1,10 @@
import { Table, Column, Model, HasMany, Unique } from 'sequelize-typescript'; import { Table, Column, Model, HasMany, Unique, BelongsTo, ForeignKey } from 'sequelize-typescript';
import { Order } from './order.model'; import { Order } from './order.model';
import { Address } from './address.model';
import { Payment } from './payment.model';
import { AccountRole } from './accountRole.model';
@Table @Table({ timestamps: false })
export class Account extends Model { export class Account extends Model {
@Unique @Unique
@Column @Column
@@ -16,25 +19,21 @@ export class Account extends Model {
@Column @Column
lastName: string = "" lastName: string = ""
@ForeignKey(() => AccountRole)
@Column @Column
street: string = "" accountRoleId: number
@Column
houseNumber: number = 0
@Column
postalCode: number = 0
@Column
city: string
@Column
bankName: string
@Column
iban: string
// Relations // Relations
@HasMany(() => Address)
addresses: Address[]
@HasMany(() => Payment)
payments: Payment[]
@HasMany(() => Order) @HasMany(() => Order)
orders: Order[] orders: Order[]
@BelongsTo(() => AccountRole)
accountRole: AccountRole
} }

View File

@@ -0,0 +1,19 @@
import { Column, HasMany, Model, Table } from "sequelize-typescript";
import { Account } from "./account.model";
@Table({ timestamps: false })
export class AccountRole extends Model {
@Column
name: string
@Column
privilegeBuy: boolean
@Column
privilegeAdminPanel: boolean
// Relations
@HasMany(() => Account)
accounts: Account[]
}

View File

@@ -0,0 +1,27 @@
import { BelongsTo, Column, ForeignKey, Model, Table } from "sequelize-typescript";
import { Account } from "./account.model";
@Table({ timestamps: false })
export class Address extends Model {
@ForeignKey(() => Account)
@Column
accountId: number
@Column
street: string
@Column
houseNumber: number
@Column
postalCode: number
@Column
city: string
// Relations
@BelongsTo(() => Account)
account: Account
}

View File

@@ -0,0 +1,14 @@
import { Column, HasMany, Model, Table } from "sequelize-typescript";
import { Product } from "./product.model";
@Table({ timestamps: false })
export class Brand extends Model {
@Column
name: string
// Relations
@HasMany(() => Product)
products: Product[]
}

View File

@@ -1,7 +1,7 @@
import { Table, Column, Model, BelongsTo, ForeignKey, HasMany, Unique } from 'sequelize-typescript'; import { Table, Column, Model, BelongsTo, ForeignKey, HasMany, Unique } from 'sequelize-typescript';
import { Product } from './product.model'; import { Product } from './product.model';
@Table @Table({ timestamps: false })
export class Category extends Model { export class Category extends Model {
@Unique @Unique
@Column @Column

View File

@@ -1,18 +1,22 @@
import { Table, Column, Model, BelongsTo, ForeignKey, HasMany, BelongsToMany } from 'sequelize-typescript'; import { Table, Column, Model, BelongsTo, ForeignKey, HasMany, BelongsToMany, Default } from 'sequelize-typescript';
import { Account } from './account.model'; import { Account } from './account.model';
import { OrderItem } from './orderItem.model'; import { OrderItem } from './orderItem.model';
@Table @Table({
updatedAt: false,
createdAt: 'orderedAt'
})
export class Order extends Model { export class Order extends Model {
@Column @Column
@ForeignKey(() => Account) @ForeignKey(() => Account)
accountId: number accountId: number
@Column @Column
totalPrice: number orderedAt: Date
@Default(1)
@Column @Column
shippingProgress: number = 1 shippingProgress: number
// Relations // Relations
@@ -20,5 +24,5 @@ export class Order extends Model {
account: Account account: Account
@HasMany(() => OrderItem) @HasMany(() => OrderItem)
orderItem: OrderItem[] orderItems: OrderItem[]
} }

View File

@@ -2,7 +2,7 @@ import { Model, BelongsTo, Column, ForeignKey, HasMany, HasOne, Table } from "se
import { Product } from "./product.model"; import { Product } from "./product.model";
import { Order } from "./order.model"; import { Order } from "./order.model";
@Table @Table({ timestamps: false })
export class OrderItem extends Model { export class OrderItem extends Model {
@Column @Column
@ForeignKey(() => Order) @ForeignKey(() => Order)
@@ -11,6 +11,9 @@ export class OrderItem extends Model {
@Column @Column
quantity: number quantity: number
@Column
orderPrice: number
@Column @Column
@ForeignKey(() => Product) @ForeignKey(() => Product)
productId: number productId: number

View File

@@ -0,0 +1,20 @@
import { BelongsTo, Column, ForeignKey, Model, Table } from "sequelize-typescript";
import { Account } from "./account.model";
@Table({ timestamps: false })
export class Payment extends Model {
@ForeignKey(() => Account)
@Column
accountId: number
@Column
bankName: string
@Column
iban: string
// Relations
@BelongsTo(() => Account)
account: Account
}

View File

@@ -1,18 +1,23 @@
import { Table, Column, Model, ForeignKey, BelongsTo, BelongsToMany, HasMany, DataType } from 'sequelize-typescript'; import { Table, Column, Model, ForeignKey, BelongsTo, BelongsToMany, HasMany, DataType } from 'sequelize-typescript';
import { Category } from './category.model'; import { Category } from './category.model';
import { OrderItem } from './orderItem.model'; import { OrderItem } from './orderItem.model';
import { Brand } from './brand.model';
@Table @Table({ timestamps: false })
export class Product extends Model { export class Product extends Model {
@Column @Column
brand: string @ForeignKey(() => Category)
categoryId: number
@ForeignKey(() => Brand)
@Column
brandId: number
@Column @Column
name: string name: string
@Column @Column
@ForeignKey(() => Category) description: string
categoryId: number
@Column @Column
price: number price: number
@@ -23,19 +28,8 @@ export class Product extends Model {
@Column @Column
rating: number rating: number
@Column({
type: DataType.STRING,
get(): Array<string> {
return this.getDataValue('images').split(';')
},
set(value: Array<string>) {
this.setDataValue('images', value.join(';'))
}
})
images: Array<string>
@Column @Column
description: string inStock: number
@Column({ @Column({
type: DataType.STRING, type: DataType.STRING,
@@ -48,13 +42,26 @@ export class Product extends Model {
}) })
specs: Array<string> specs: Array<string>
@Column @Column({
storedItems: number type: DataType.STRING,
get(): Array<string> {
return this.getDataValue('images').split(';')
},
set(value: Array<string>) {
this.setDataValue('images', value.join(';'))
}
})
images: Array<string>
// Relations // Relations
@BelongsTo(() => Category) @BelongsTo(() => Category)
category: Category category: Category
@BelongsTo(() => Brand)
brand: Brand
@HasMany(() => OrderItem) @HasMany(() => OrderItem)
order: OrderItem orders: OrderItem[]
} }

View File

@@ -1,27 +1,41 @@
import { Router, Request, Response, NextFunction } from "express"; import { Router, Request, Response } from "express";
import { Account } from "../models/account.model"; import { Account } from "../models/account.model";
import { validateString } from "../scripts/validateHelper"; import { validateString } from "../scripts/validateHelper";
import { Address } from "../models/address.model";
import { Payment } from "../models/payment.model";
import { AccountRole } from "../models/accountRole.model";
export const account = Router() export const account = Router()
// Login user // Login user
account.post("/login", (req: Request, res: Response) => { account.post("/login", (req: Request, res: Response) => {
Account.findOne({ Account.findOne({
raw: true, where: { username: req.body.username },
where: { username: req.body.username } include: [ Address, Payment, AccountRole ],
attributes: {
exclude: [
"accountRoleId"
]
}
}) })
.then(account => { .then(account => {
if (account != null) { if (account != null) {
if (account.password == req.body.password) { if (account.dataValues.password == req.body.password) {
// Status: 200 OK // Status: 200 OK
res.status(200).json(account).send() res.status(200).json(account).send()
} else { } else {
// Status: 401 Unauthorized // Status: 401 Unauthorized
res.status(401).send() res.status(401).json({
code: 401,
message: "Unauthorized"
}).send()
} }
} else { } else {
// Status: 400 Bad request // Status: 400 Bad request
res.status(400).send() res.status(400).json({
code: 400,
message: "Bad Request"
}).send()
} }
} }
) )
@@ -34,6 +48,7 @@ account.post("/", (req: Request, res: Response) => {
{ {
// Status: 400 Bad request // Status: 400 Bad request
res.status(400).json({ res.status(400).json({
code: 400,
message: "Username too short!" message: "Username too short!"
}).send() }).send()
} }
@@ -43,6 +58,7 @@ account.post("/", (req: Request, res: Response) => {
{ {
// Status: 400 Bad request // Status: 400 Bad request
res.status(400).json({ res.status(400).json({
code: 400,
message: "Password too short!" message: "Password too short!"
}).send() }).send()
} }
@@ -54,7 +70,10 @@ account.post("/", (req: Request, res: Response) => {
res.status(201).json(account).send() res.status(201).json(account).send()
}).catch(reason => { }).catch(reason => {
// Status: 409 Conflict // Status: 409 Conflict
res.status(409).send() res.status(409).json({
code: 409,
message: "Username already in use"
}).send()
}) })
}) })
@@ -70,6 +89,7 @@ account.patch("/", (req: Request, res: Response) => {
.catch(error => { .catch(error => {
// Status: 400 Bad request // Status: 400 Bad request
res.status(400).json({ res.status(400).json({
code: 400,
message: error message: error
}).send() }).send()
}) })

View File

@@ -9,19 +9,17 @@ category.get("/", (req: Request, res: Response, next: NextFunction) => {
.then(categories => { .then(categories => {
res.status(200).json(categories).send() res.status(200).json(categories).send()
}) })
.catch(error => {
res.status(400)
})
}) })
// Add new category // Add new category
category.post("/", (req: Request, res: Response, next: NextFunction) => { category.post("/", (req: Request, res: Response, next: NextFunction) => {
Category.create(req.body) Category.create(req.body)
.then(category => { .then(category => {
res.status(201).send() res.status(201).json(category).send()
}) })
.catch(error => { .catch(error => {
res.status(400).json({ res.status(400).json({
code: 400,
message: error message: error
}).send() }).send()
}) })
@@ -33,10 +31,11 @@ category.delete("/:id", (req: Request, res: Response, next: NextFunction) => {
where: { id: req.params.id } where: { id: req.params.id }
}) })
.then(category => { .then(category => {
res.status(200).send() res.status(200).json(category).send()
}) })
.catch(error => { .catch(error => {
res.status(400).json({ res.status(400).json({
code: 400,
message: error message: error
}).send() }).send()
}) })

View File

@@ -23,31 +23,25 @@ order.post("/", (req: Request, res: Response) => {
let totalPrice = 0 let totalPrice = 0
Order.create(req.body) Order.create(req.body)
.then(order => { .then(async order => {
for (let orderItem of req.body.orderItems) {
for (let orderItem of req.body.orderItem) {
OrderItem.create({ OrderItem.create({
"orderId": order.id, "orderId": order.id,
"quantity": orderItem.quantity, "quantity": orderItem.quantity,
"orderPrice": orderItem.orderPrice,
"productId": orderItem.productId "productId": orderItem.productId
}) })
Product.findOne({ totalPrice += orderItem.quantity * orderItem.orderPrice
raw: true,
where: { id: orderItem.productId }
})
.then(product => {
totalPrice += product.price * orderItem.quantity
Order.update({ Order.update({
totalPrice: totalPrice totalPrice: totalPrice
}, { }, {
where: { id: order.id }, where: { id: order.id }
})
}) })
} }
})
// Created // Created
res.status(201).send() res.status(201).json(order).send()
})
}) })

View File

@@ -1,13 +1,20 @@
import { Router, Request, Response, NextFunction } from "express"; import { Router, Request, Response, NextFunction } from "express";
import { Product } from "../models/product.model"; import { Product } from "../models/product.model";
import { Category } from "../models/category.model"; import { Category } from "../models/category.model";
import { Brand } from "../models/brand.model";
export const product = Router() export const product = Router()
// Get all products // Get all products
product.get("/", (req: Request, res: Response) => { product.get("/", (req: Request, res: Response) => {
Product.findAll({ Product.findAll({
include: [ Category ] include: [ Category, Brand ],
attributes: {
exclude: [
"categoryId",
"brandId"
]
}
}) })
.then(products => { .then(products => {
res.status(200).json(products) res.status(200).json(products)
@@ -16,7 +23,18 @@ product.get("/", (req: Request, res: Response) => {
// Get a product by id // Get a product by id
product.get("/:productId", (req: Request, res: Response) => { product.get("/:productId", (req: Request, res: Response) => {
Product.findByPk(req.params.productId) Product.findByPk(
req.params.productId,
{
include: [ Category, Brand ],
attributes: {
exclude: [
"categoryId",
"brandId"
]
}
}
)
.then(product => { .then(product => {
res.status(200).json(product).send() res.status(200).json(product).send()
}) })
@@ -30,6 +48,7 @@ product.post("/", (req: Request, res: Response) => {
}) })
.catch(error => { .catch(error => {
res.status(400).json({ res.status(400).json({
code: 400,
message: error message: error
}).send() }).send()
}) })
@@ -45,6 +64,7 @@ product.delete("/:id", (req: Request, res: Response) => {
}) })
.catch(error => { .catch(error => {
res.status(400).json({ res.status(400).json({
code: 400,
message: error message: error
}).send() }).send()
}) })

View File

@@ -3,12 +3,18 @@ import { Order } from '../models/order.model'
import { OrderItem } from '../models/orderItem.model' import { OrderItem } from '../models/orderItem.model'
import { Product } from '../models/product.model' import { Product } from '../models/product.model'
import { Account } from '../models/account.model' import { Account } from '../models/account.model'
import { Address } from '../models/address.model'
import { Payment } from '../models/payment.model'
import { AccountRole } from '../models/accountRole.model'
import { Brand } from '../models/brand.model'
import categories from "./../data/categories.json" import categories from "./../data/categories.json"
import products from "./../data/products.json" import products from "./../data/products.json"
import accounts from "./../data/accounts.json" import accounts from "./../data/accounts.json"
import orders from "./../data/orders.json" import orders from "./../data/orders.json"
import orderItems from "./../data/orderItems.json" import orderItems from "./../data/orderItems.json"
import accountRoles from "./../data/accountRoles.json"
import brands from "./../data/brands.json"
/** /**
* Delete all datasets in every database table * Delete all datasets in every database table
@@ -24,10 +30,22 @@ export function deleteAllTables() {
/** /**
* Insert default datasets in the database tables * Insert default datasets in the database tables
*/ */
export function prepopulateDatabase() { export async function prepopulateDatabase() {
AccountRole.bulkCreate(accountRoles.data)
// Account & Sub tables
for (let account of accounts.data) {
await Account.create(account)
.then(dataset => {
Address.bulkCreate(account.addresses)
Payment.bulkCreate(account.payments)
})
}
Category.bulkCreate(categories.data) Category.bulkCreate(categories.data)
Brand.bulkCreate(brands.data)
Product.bulkCreate(products.data) Product.bulkCreate(products.data)
Account.bulkCreate(accounts.data)
Order.bulkCreate(orders.data) Order.bulkCreate(orders.data)
OrderItem.bulkCreate(orderItems.data) OrderItem.bulkCreate(orderItems.data)
} }

View File

@@ -10,8 +10,7 @@ defineProps({
type: String type: String
}, },
subtitle: { subtitle: {
type: String, type: String
default: ""
} }
}) })
</script> </script>

View File

@@ -1,6 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ModelRef } from 'vue'; import { ModelRef } from 'vue';
import actionDialog from './actionDialog.vue'; import actionDialog from './actionDialog.vue';
import outlinedButton from './outlinedButton.vue';
const showDialog: ModelRef<boolean> = defineModel() const showDialog: ModelRef<boolean> = defineModel()
@@ -31,21 +32,19 @@ function confirmPressed() {
</v-container> </v-container>
<template #actions> <template #actions>
<v-btn <outlined-button
@click="showDialog = false" @click="showDialog = false"
color="green" color="green"
variant="outlined"
> >
{{ $t("dialog.cancel") }} {{ $t("dialog.cancel") }}
</v-btn> </outlined-button>
<v-btn <outlined-button
@click="confirmPressed" @click="confirmPressed"
color="red" color="red"
variant="outlined"
> >
{{ $t("dialog.confirm") }} {{ $t("dialog.confirm") }}
</v-btn> </outlined-button>
</template> </template>
</action-dialog> </action-dialog>
</template> </template>

View File

@@ -0,0 +1,19 @@
<script setup lang="ts">
defineProps({
prependIcon: String,
color: {
type: String,
default: "primary"
}
})
</script>
<template>
<v-btn
:prepend-icon="prependIcon"
variant="outlined"
:color="color"
>
<slot></slot>
</v-btn>
</template>

View File

@@ -1,7 +1,16 @@
import axios from "axios" import axios from "axios"
import { OrderModel } from "../models/orderModel"
import { BasketItemModel } from "../models/basketItemModel"
const BASE_URL = "http://localhost:3000/orders" const BASE_URL = "http://localhost:3000/orders"
export async function getUserOrders(userId: number) { export async function getUserOrders(userId: number) {
return axios.get(BASE_URL + "/" + userId) return axios.get(BASE_URL + "/" + userId)
} }
export async function addOrder(accountId: number, basketItems: Array<BasketItemModel>) {
return axios.post(BASE_URL, {
"accountId": accountId,
"orderItem": basketItems
})
}

View File

@@ -1,5 +1,5 @@
export class BasketItemModel { export class BasketItemModel {
productId: number = -1 id: number = -1
brand: string = "" brand: string = ""
name: string = "" name: string = ""
categoryName: string = "" categoryName: string = ""

View File

@@ -4,6 +4,9 @@ import { calcProductPrice } from "@/scripts/productScripts";
import { BasketItemModel } from "../models/basketItemModel"; import { BasketItemModel } from "../models/basketItemModel";
import { useFeedbackStore } from "./feedbackStore"; import { useFeedbackStore } from "./feedbackStore";
import { BannerStateEnum } from "../enums/bannerStateEnum"; import { BannerStateEnum } from "../enums/bannerStateEnum";
import { OrderModel } from "../models/orderModel";
import { useUserStore } from "./userStore";
import { addOrder } from "../api/orderApi";
export const useBasketStore = defineStore('basket', { export const useBasketStore = defineStore('basket', {
state: () => ({ state: () => ({
@@ -42,6 +45,18 @@ export const useBasketStore = defineStore('basket', {
} else { } else {
this.itemsInBasket.push(item) this.itemsInBasket.push(item)
} }
},
takeOrder() {
const userStore = useUserStore()
//
// const order = new OrderModel()
// order.accountId = userStore.userAccount.id
// order.orderItem = this.itemsInBasket
//
// console.log(order)
addOrder(userStore.userAccount.id, this.itemsInBasket)
} }
} }
}) })

View File

@@ -46,7 +46,8 @@
"ordered": "Bestellt", "ordered": "Bestellt",
"preparingForShipping": "Versandvorbereitung", "preparingForShipping": "Versandvorbereitung",
"shipped": "Versendet", "shipped": "Versendet",
"delivered": "Geliefert" "delivered": "Geliefert",
"inDelivery": "In Zustellung"
}, },
"userInfo": { "userInfo": {
"firstName": "Vorname", "firstName": "Vorname",
@@ -90,7 +91,8 @@
}, },
"oclock": "Uhr", "oclock": "Uhr",
"ordering": { "ordering": {
"ordering": "Bestellabschluss" "ordering": "Bestellabschluss",
"takeOrder": "Bestellung ausführen"
}, },
"dialog": { "dialog": {
"cancel": "Abbrechen", "cancel": "Abbrechen",

View File

@@ -46,7 +46,8 @@
"ordered": "Ordered", "ordered": "Ordered",
"preparingForShipping": "Preparing for shipping", "preparingForShipping": "Preparing for shipping",
"shipped": "Shipped", "shipped": "Shipped",
"delivered": "Delivered" "delivered": "Delivered",
"inDelivery": "In Delivery"
}, },
"userInfo": { "userInfo": {
"firstName": "First Name", "firstName": "First Name",
@@ -90,7 +91,8 @@
}, },
"oclock": "o'clock", "oclock": "o'clock",
"ordering": { "ordering": {
"ordering": "Finish order" "ordering": "Finish order",
"takeOrder": "Do order now"
}, },
"dialog": { "dialog": {
"cancel": "Cancel", "cancel": "Cancel",

View File

@@ -1,6 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { useUserStore } from '@/data/stores/userStore'; import { useUserStore } from '@/data/stores/userStore';
import cardView from '@/components/cardView.vue'; import cardView from '@/components/cardView.vue';
import outlinedButton from '@/components/outlinedButton.vue';
const userStore = useUserStore() const userStore = useUserStore()
</script> </script>
@@ -87,14 +88,13 @@ const userStore = useUserStore()
</v-container> </v-container>
<template #actions> <template #actions>
<v-btn <outlined-button
@click="userStore.updateAccount()" @click="userStore.updateAccount()"
variant="outlined"
prepend-icon="mdi-content-save" prepend-icon="mdi-content-save"
color="green" color="green"
> >
Save Save
</v-btn> </outlined-button>
</template> </template>
</card-view> </card-view>
</template> </template>

View File

@@ -1,6 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import cardView from '@/components/cardView.vue'; import cardView from '@/components/cardView.vue';
import confirmDialog from '@/components/confirmDialog.vue'; import confirmDialog from '@/components/confirmDialog.vue';
import outlinedButton from '@/components/outlinedButton.vue';
import { ref } from 'vue'; import { ref } from 'vue';
const showConfirmDialog = ref(false) const showConfirmDialog = ref(false)
@@ -15,14 +16,13 @@ function deleteAccount() {
<v-container> <v-container>
<v-row> <v-row>
<v-col class="d-flex justify-center align-center"> <v-col class="d-flex justify-center align-center">
<v-btn <outlined-button
prepend-icon="mdi-delete" prepend-icon="mdi-delete"
variant="outlined"
color="red" color="red"
@click="showConfirmDialog = true" @click="showConfirmDialog = true"
> >
{{ $t("account.delete") }} {{ $t("account.delete") }}
</v-btn> </outlined-button>
</v-col> </v-col>
</v-row> </v-row>
</v-container> </v-container>

View File

@@ -5,6 +5,7 @@ import alertBanner from '@/components/alertBanner.vue';
import cardView from '@/components/cardView.vue'; import cardView from '@/components/cardView.vue';
import { useUserStore } from '@/data/stores/userStore'; import { useUserStore } from '@/data/stores/userStore';
import orderingDialog from './orderingDialog.vue'; import orderingDialog from './orderingDialog.vue';
import outlinedButton from '@/components/outlinedButton.vue';
import { ref } from 'vue'; import { ref } from 'vue';
const basketStore = useBasketStore() const basketStore = useBasketStore()
@@ -44,7 +45,7 @@ const showOrderingDialog = ref()
</v-card-text> </v-card-text>
<template #actions> <template #actions>
<v-btn <outlined-button
prepend-icon="mdi-basket-check" prepend-icon="mdi-basket-check"
:disabled="basketStore.itemsInBasket.length == 0 || userStore.userAccount.id == null" :disabled="basketStore.itemsInBasket.length == 0 || userStore.userAccount.id == null"
variant="outlined" variant="outlined"
@@ -52,7 +53,7 @@ const showOrderingDialog = ref()
@click="showOrderingDialog = true" @click="showOrderingDialog = true"
> >
{{ $t('orderNow') }} {{ $t('orderNow') }}
</v-btn> </outlined-button>
</template> </template>
</card-view> </card-view>
</v-col> </v-col>

View File

@@ -1,9 +1,25 @@
<script setup lang="ts"> <script setup lang="ts">
import actionDialog from '@/components/actionDialog.vue'; import actionDialog from '@/components/actionDialog.vue';
import { useBasketStore } from '@/data/stores/basketStore';
import outlinedButton from '@/components/outlinedButton.vue';
const basketStore = useBasketStore()
function doOrder() {
basketStore.takeOrder()
}
</script> </script>
<template> <template>
<action-dialog <action-dialog
:title="$t('ordering.ordering')" :title="$t('ordering.ordering')"
/> >
<template #actions>
<outlined-button
@click="doOrder"
>
{{ $t('ordering.takeOrder') }}
</outlined-button>
</template>
</action-dialog>
</template> </template>

View File

@@ -2,6 +2,7 @@
import { useUserStore } from '@/data/stores/userStore'; import { useUserStore } from '@/data/stores/userStore';
import { ref } from 'vue'; import { ref } from 'vue';
import cardView from '@/components/cardView.vue'; import cardView from '@/components/cardView.vue';
import outlinedButton from '@/components/outlinedButton.vue';
const userStore = useUserStore() const userStore = useUserStore()
const showRegisterCard = defineModel("showRegisterCard", { type: Boolean, default: false }) const showRegisterCard = defineModel("showRegisterCard", { type: Boolean, default: false })
@@ -31,13 +32,19 @@ function startLogin() {
</v-container> </v-container>
<template #actions> <template #actions>
<v-btn variant="outlined" @click="showRegisterCard = true" color="primary" prepend-icon="mdi-plus"> <outlined-button
@click="showRegisterCard = true"
prepend-icon="mdi-plus"
>
{{ $t('account.noAccountRegister') }} {{ $t('account.noAccountRegister') }}
</v-btn> </outlined-button>
<v-spacer />
<v-btn variant="outlined" append-icon="mdi-arrow-right" color="primary"
@click="startLogin">{{ $t('menu.login') }}</v-btn>
</template>
<outlined-button
append-icon="mdi-arrow-right"
@click="startLogin"
>
{{ $t('menu.login') }}
</outlined-button>
</template>
</card-view> </card-view>
</template> </template>

View File

@@ -3,6 +3,7 @@ import { AccountModel } from '@/data/models/accountModel';
import { useUserStore } from '@/data/stores/userStore'; import { useUserStore } from '@/data/stores/userStore';
import { ref } from 'vue'; import { ref } from 'vue';
import cardView from '@/components/cardView.vue'; import cardView from '@/components/cardView.vue';
import outlinedButton from '@/components/outlinedButton.vue';
const newUser = ref(new AccountModel()) const newUser = ref(new AccountModel())
const showRegisterCard = defineModel("showRegisterCard", { type: Boolean, default: false }) const showRegisterCard = defineModel("showRegisterCard", { type: Boolean, default: false })
@@ -78,15 +79,19 @@ const userStore = useUserStore()
</v-container> </v-container>
<template #actions> <template #actions>
<v-btn prepend-icon="mdi-arrow-left" color="primary" variant="outlined" <outlined-button
@click="showRegisterCard = false"> prepend-icon="mdi-arrow-left"
@click="showRegisterCard = false"
>
{{ $t('account.backToLogin') }} {{ $t('account.backToLogin') }}
</v-btn> </outlined-button>
<v-spacer />
<v-btn prepend-icon="mdi-account-plus" color="primary" variant="outlined" <outlined-button
@click="userStore.registerAccount(newUser)"> prepend-icon="mdi-account-plus"
@click="userStore.registerAccount(newUser)"
>
{{ $t('account.register') }} {{ $t('account.register') }}
</v-btn> </outlined-button>
</template> </template>
</card-view> </card-view>
</template> </template>

View File

@@ -6,13 +6,13 @@ defineProps({
order: OrderModel order: OrderModel
}) })
function getDotColor(order, step: number) { function getDotColor(order: OrderModel, step: number) {
if (order.shippingProgress == step) if (order.shippingProgress >= step)
{
return "orange"
} else if (order.shippingProgress >= step)
{ {
return "green" return "green"
} else if (order.shippingProgress + 1 == step)
{
return "blue"
} else } else
{ {
return "grey" return "grey"
@@ -32,7 +32,7 @@ function formatDateTimeString(string: string) {
:title="$t('orders.orderFrom') + ' ' + formatDateTimeString(order.createdAt) + ' ' + $t('oclock')" :title="$t('orders.orderFrom') + ' ' + formatDateTimeString(order.createdAt) + ' ' + $t('oclock')"
:subtitle="$t('totalPrice') + ': ' + order.totalPrice + ' €'" :subtitle="$t('totalPrice') + ': ' + order.totalPrice + ' €'"
> >
<v-timeline direction="horizontal" side="start"> <v-timeline direction="horizontal" side="start" size="x-large">
<v-timeline-item :dot-color="getDotColor(order, 1)" icon="mdi-basket-check"> <v-timeline-item :dot-color="getDotColor(order, 1)" icon="mdi-basket-check">
{{ $t('orders.ordered') }} {{ $t('orders.ordered') }}
</v-timeline-item> </v-timeline-item>
@@ -41,11 +41,15 @@ function formatDateTimeString(string: string) {
{{ $t('orders.preparingForShipping') }} {{ $t('orders.preparingForShipping') }}
</v-timeline-item> </v-timeline-item>
<v-timeline-item :dot-color="getDotColor(order, 3)" icon="mdi-truck-fast"> <v-timeline-item :dot-color="getDotColor(order, 3)" icon="mdi-send">
{{ $t('orders.shipped') }} {{ $t('orders.shipped') }}
</v-timeline-item> </v-timeline-item>
<v-timeline-item :dot-color="getDotColor(order, 4)" icon="mdi-package-check"> <v-timeline-item :dot-color="getDotColor(order, 4)" icon="mdi-truck-fast">
{{ $t('orders.inDelivery') }}
</v-timeline-item>
<v-timeline-item :dot-color="getDotColor(order, 5)" icon="mdi-package-check">
{{ $t('orders.delivered') }} {{ $t('orders.delivered') }}
</v-timeline-item> </v-timeline-item>
</v-timeline> </v-timeline>

View File

@@ -3,7 +3,7 @@ import { BannerStateEnum } from '@/data/enums/bannerStateEnum';
import { useFeedbackStore } from '@/data/stores/feedbackStore'; import { useFeedbackStore } from '@/data/stores/feedbackStore';
import axios from 'axios'; import axios from 'axios';
import cardView from '@/components/cardView.vue'; import cardView from '@/components/cardView.vue';
import actionDialog from '@/components/actionDialog.vue'; import outlinedButton from '@/components/outlinedButton.vue';
import { ref } from 'vue'; import { ref } from 'vue';
import confirmDialog from '@/components/confirmDialog.vue'; import confirmDialog from '@/components/confirmDialog.vue';
@@ -18,7 +18,7 @@ function resetDb() {
} }
}) })
confirmDialog.value = false showConfirmDialog.value = false
// todo: Request all data // todo: Request all data
} }
@@ -32,24 +32,21 @@ function resetSettings() {
<v-container> <v-container>
<v-row> <v-row>
<v-col class="d-flex justify-center align-center"> <v-col class="d-flex justify-center align-center">
<v-btn <outlined-button
@click="showConfirmDialog = true" @click="showConfirmDialog = true"
prepend-icon="mdi-database-refresh" prepend-icon="mdi-database-refresh"
color="red" color="red"
variant="outlined"
> >
{{ $t('preferences.resetDatabase') }} {{ $t('preferences.resetDatabase') }}
</v-btn> </outlined-button>
</v-col> </v-col>
<v-col class="d-flex justify-center align-center"> <v-col class="d-flex justify-center align-center">
<v-btn <outlined-button
@click="resetDb" @click="resetSettings"
prepend-icon="mdi-cog-counterclockwise" prepend-icon="mdi-cog-counterclockwise"
color="primary"
variant="outlined"
> >
{{ $t('preferences.resetPreferences') }} {{ $t('preferences.resetPreferences') }}
</v-btn> </outlined-button>
</v-col> </v-col>
</v-row> </v-row>
</v-container> </v-container>
@@ -59,5 +56,6 @@ function resetSettings() {
:title="$t('dialog.resetConfirm.title')" :title="$t('dialog.resetConfirm.title')"
:description="$t('dialog.resetConfirm.description')" :description="$t('dialog.resetConfirm.description')"
v-model="showConfirmDialog" v-model="showConfirmDialog"
:onConfirm="resetDb"
/> />
</template> </template>

View File

@@ -5,7 +5,7 @@ import { useBasketStore } from '@/data/stores/basketStore';
import { calcProductPrice, productToBasketItem } from '@/scripts/productScripts'; import { calcProductPrice, productToBasketItem } from '@/scripts/productScripts';
import ActionDialog from '@/components/actionDialog.vue' import ActionDialog from '@/components/actionDialog.vue'
import { ProductWithCategoryModel } from '@/data/models/productWithCategoryModel'; import { ProductWithCategoryModel } from '@/data/models/productWithCategoryModel';
import { BasketItemModel } from '@/data/models/basketItemModel'; import outlinedButton from '@/components/outlinedButton.vue';
const props = defineProps({ const props = defineProps({
product: { product: {
@@ -20,9 +20,6 @@ const basketStore = useBasketStore()
const selectedImage = ref("") const selectedImage = ref("")
function addProductToBasket() { function addProductToBasket() {
basketStore.addItemToBasket(
new BasketItemModel()
)
basketStore.addItemToBasket(productToBasketItem(props.product, nrOfArticles.value)) basketStore.addItemToBasket(productToBasketItem(props.product, nrOfArticles.value))
nrOfArticles.value = 1 nrOfArticles.value = 1
showDialog.value = false showDialog.value = false
@@ -67,7 +64,6 @@ watch(() => props.product.images, () => {
<v-spacer /> <v-spacer />
</v-row> </v-row>
</v-col> </v-col>
@@ -154,16 +150,14 @@ watch(() => props.product.images, () => {
:disabled="product.storedItems == 0" :disabled="product.storedItems == 0"
/> />
<v-btn <outlined-button
prepend-icon="mdi-cart-plus" prepend-icon="mdi-cart-plus"
@click="addProductToBasket" @click="addProductToBasket"
color="primary"
variant="outlined"
height="50" height="50"
:disabled="product.storedItems == 0" :disabled="product.storedItems == 0"
> >
{{ $t('addToBasket') }} {{ $t('addToBasket') }}
</v-btn> </outlined-button>
</template> </template>
</action-dialog> </action-dialog>
</template> </template>