Start moving data server handling from pinia store to server
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -34,3 +34,4 @@ build
|
|||||||
out/
|
out/
|
||||||
database.svg
|
database.svg
|
||||||
*.bkp
|
*.bkp
|
||||||
|
*.dtmp
|
||||||
47
README.md
47
README.md
@@ -50,28 +50,33 @@ The application host it's data in a SQLite database. The access is managed by an
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
#### Validate
|
#### Listing existing
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><code><span style="color:#69CA92"><b>POST</b></span></code> <code><b>/accounts/login</b></code> <code> (Login for user)</code></summary>
|
<summary><code><span style="color:#70AFFD"><b>GET</b></span></code> <code><b>/events?city=cityName&genre=genreName</b></code> <code> (Get all events, filtered by city and genre)</code>
|
||||||
|
</summary>
|
||||||
|
|
||||||
##### Parameters
|
##### Parameters
|
||||||
> | name | type | data type | description |
|
> | name | type | data type | description |
|
||||||
> | --- | --- | --- | --- |
|
> | :---: | --- | --- | --- |
|
||||||
> | username | required | string | Username of the account |
|
> | `cityName` | optional | string | Name of the city to filter for |
|
||||||
> | password | required | string | Password of the account |
|
> | `genreName` | optional | string | Name of the genre to filter for |
|
||||||
|
|
||||||
##### Responses
|
##### Responses
|
||||||
> | http code | content-type | response |
|
> | http code | content-type | response |
|
||||||
> | :---: | --- | --- |
|
> | :---: | --- | --- |
|
||||||
> | `200` | `application/json` | `AccountObject` + `Addresses`, `Payments`, `AccountRole` |
|
> | `200` | `application/json` | `Event` + `Array<Concert + Location>` + `Array<Band>` |
|
||||||
> | `400` | `application/json` | `{code: 400, message: "Bad Request"}` |
|
|
||||||
> | `401` | `application/json` | `{code: 401, message: "Unauthorized"}` |
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### Listing existing
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Down here: todo!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary><code><span style="color:#70AFFD"><b>GET</b></span></code> <code><b>/bands</b></code> <code> (Get all bands)</code>
|
<summary><code><span style="color:#70AFFD"><b>GET</b></span></code> <code><b>/bands</b></code> <code> (Get all bands)</code>
|
||||||
@@ -320,3 +325,25 @@ The application host it's data in a SQLite database. The access is managed by an
|
|||||||
> | :---: | --- | --- |
|
> | :---: | --- | --- |
|
||||||
> | `200` | None | None |
|
> | `200` | None | None |
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|
||||||
|
#### Validate
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><code><span style="color:#69CA92"><b>POST</b></span></code> <code><b>/accounts/login</b></code> <code> (Login for user)</code></summary>
|
||||||
|
|
||||||
|
##### Parameters
|
||||||
|
> | name | type | data type | description |
|
||||||
|
> | --- | --- | --- | --- |
|
||||||
|
> | username | required | string | Username of the account |
|
||||||
|
> | password | required | string | Password of the account |
|
||||||
|
|
||||||
|
##### 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>
|
||||||
|
|
||||||
|
---
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
<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.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17">
|
||||||
<diagram name="Page-1" id="WevClHWmhzPAQ7FDN5po">
|
<diagram name="Page-1" id="WevClHWmhzPAQ7FDN5po">
|
||||||
<mxGraphModel dx="3585" dy="1546" 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="3135" dy="1286" 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="XtTKw7a9ly-3XTzy1tri-3" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>tourId: Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="XtTKw7a9ly-3XTzy1tri-3" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>eventId: Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-640.9199999999997" y="350" width="160" height="30" as="geometry" />
|
<mxGeometry x="-640.9199999999997" y="350" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-2" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>Bands</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-2" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>Bands</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-33" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">offered: bool</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-33" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">offered: bool</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-399.8299999999999" y="290" width="160" height="30" as="geometry" />
|
<mxGeometry x="-399.8299999999999" y="290" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-34" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>Shows</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-34" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>Concerts</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-640.9199999999998" y="200" width="160" height="30" as="geometry" />
|
<mxGeometry x="-640.9199999999998" y="200" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-35" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><u>id:&nbsp;</u><u style="background-color: initial;">Number</u></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-35" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><u>id:&nbsp;</u><u style="background-color: initial;">Number</u></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
<mxPoint x="-600" y="510" as="sourcePoint" />
|
<mxPoint x="-600" y="510" as="sourcePoint" />
|
||||||
<mxPoint x="-520" y="510" as="targetPoint" />
|
<mxPoint x="-520" y="510" as="targetPoint" />
|
||||||
<Array as="points">
|
<Array as="points">
|
||||||
<mxPoint x="-200" y="335" />
|
<mxPoint x="-200" y="365" />
|
||||||
<mxPoint x="-200" y="125" />
|
<mxPoint x="-200" y="125" />
|
||||||
</Array>
|
</Array>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
@@ -252,7 +252,7 @@
|
|||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-82" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>accountId: Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-82" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>accountId: Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-1120" y="330" width="160" height="30" as="geometry" />
|
<mxGeometry x="-1120" y="330" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-83" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>showId:&nbsp;</i><i style="background-color: initial;">Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-83" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>concertId:&nbsp;</i><i style="background-color: initial;">Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-880" y="330" width="160" height="30" as="geometry" />
|
<mxGeometry x="-880" y="330" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-85" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">firstName: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-85" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">firstName: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
@@ -270,9 +270,6 @@
|
|||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-89" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>orderId:&nbsp;</i><i style="background-color: initial;">Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-89" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>orderId:&nbsp;</i><i style="background-color: initial;">Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-880" y="300" width="160" height="30" as="geometry" />
|
<mxGeometry x="-880" y="300" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-90" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">quantity: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
|
||||||
<mxGeometry x="-880" y="360" width="160" height="30" as="geometry" />
|
|
||||||
</mxCell>
|
|
||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-91" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">shippingProgress: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-91" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">shippingProgress: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-1120" y="390" width="160" height="30" as="geometry" />
|
<mxGeometry x="-1120" y="390" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
@@ -382,7 +379,7 @@
|
|||||||
<mxGeometry x="-1456.47" y="455" width="9.43" height="20" as="geometry" />
|
<mxGeometry x="-1456.47" y="455" width="9.43" height="20" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-127" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">orderPrice: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-127" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">orderPrice: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-880" y="390" width="160" height="30" as="geometry" />
|
<mxGeometry x="-880" y="360" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-128" 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="EQeajuEG8KHzwlrw_xps-114" target="EQeajuEG8KHzwlrw_xps-77" edge="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-128" 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="EQeajuEG8KHzwlrw_xps-114" target="EQeajuEG8KHzwlrw_xps-77" edge="1">
|
||||||
<mxGeometry x="389.35999999999996" y="350" as="geometry">
|
<mxGeometry x="389.35999999999996" y="350" as="geometry">
|
||||||
@@ -586,7 +583,7 @@
|
|||||||
<mxCell id="EQeajuEG8KHzwlrw_xps-166" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">descriptionDe: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="EQeajuEG8KHzwlrw_xps-166" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">descriptionDe: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.55" y="230" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.55" y="230" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XtTKw7a9ly-3XTzy1tri-1" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>Tours</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
|
<mxCell id="XtTKw7a9ly-3XTzy1tri-1" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>Events</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#008a00;strokeColor=default;fontColor=#ffffff;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-399.8299999999999" y="200" width="160" height="30" as="geometry" />
|
<mxGeometry x="-399.8299999999999" y="200" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XtTKw7a9ly-3XTzy1tri-2" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">name: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="XtTKw7a9ly-3XTzy1tri-2" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">name: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
@@ -622,7 +619,7 @@
|
|||||||
<mxGeometry x="-259.5400000000001" y="235" width="9.43" height="20" as="geometry" />
|
<mxGeometry x="-259.5400000000001" y="235" width="9.43" height="20" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XtTKw7a9ly-3XTzy1tri-12" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>bandId: Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="XtTKw7a9ly-3XTzy1tri-12" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>bandId: Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-399.8299999999999" y="320" width="160" height="30" as="geometry" />
|
<mxGeometry x="-399.8299999999999" y="350" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="XtTKw7a9ly-3XTzy1tri-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=#CCCCCC;" parent="1" vertex="1">
|
<mxCell id="XtTKw7a9ly-3XTzy1tri-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=#CCCCCC;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-259.5400000000001" y="325" width="9.43" height="20" as="geometry" />
|
<mxGeometry x="-259.5400000000001" y="325" width="9.43" height="20" as="geometry" />
|
||||||
@@ -668,34 +665,34 @@
|
|||||||
<mxCell id="XtTKw7a9ly-3XTzy1tri-32" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">country: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
<mxCell id="XtTKw7a9ly-3XTzy1tri-32" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">country: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-640.92" y="610" width="160" height="30" as="geometry" />
|
<mxGeometry x="-640.92" y="610" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-7" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>Seats</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#d80073;strokeColor=#A50040;fontColor=#ffffff;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-7" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>Seats</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#d80073;strokeColor=#A50040;fontColor=#ffffff;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="660" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="660" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-8" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><u>id:&nbsp;</u><u style="background-color: initial;">Number</u></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-8" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><u>id:&nbsp;</u><u style="background-color: initial;">Number</u></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="690" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="690" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-9" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">seat: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-9" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">seat: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="720" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="720" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-32" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">seatCategoryId: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-32" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">seatCategoryId: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="80.27000000000007" y="570" width="160" height="30" as="geometry" />
|
<mxGeometry x="80.27000000000007" y="570" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-33" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>SeatGroup</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#d80073;strokeColor=#A50040;fontColor=#ffffff;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-33" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>SeatGroup</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#d80073;strokeColor=#A50040;fontColor=#ffffff;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="400" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="400" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-34" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><u>id:&nbsp;</u><u style="background-color: initial;">Number</u></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-34" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><u>id:&nbsp;</u><u style="background-color: initial;">Number</u></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="430" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="430" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-35" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">name: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-35" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">name: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="490" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="490" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-36" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">seatSchema: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-36" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">seatSchema: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-399.83" y="580" width="160" height="30" as="geometry" />
|
<mxGeometry x="-399.83" y="580" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-37" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">locationId: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-37" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">locationId: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="460" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="460" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-38" 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="6UZwBTI8mqE8-S_CcwA3-37" target="EQeajuEG8KHzwlrw_xps-42">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-38" 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="6UZwBTI8mqE8-S_CcwA3-37" target="EQeajuEG8KHzwlrw_xps-42" edge="1">
|
||||||
<mxGeometry x="389.35999999999996" y="350" as="geometry">
|
<mxGeometry x="389.35999999999996" y="350" as="geometry">
|
||||||
<mxPoint x="292.51" y="518" as="sourcePoint" />
|
<mxPoint x="292.51" y="518" as="sourcePoint" />
|
||||||
<mxPoint x="362.51" y="300" as="targetPoint" />
|
<mxPoint x="362.51" y="300" as="targetPoint" />
|
||||||
@@ -705,17 +702,17 @@
|
|||||||
</Array>
|
</Array>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-39" 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="6UZwBTI8mqE8-S_CcwA3-38">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-39" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="6UZwBTI8mqE8-S_CcwA3-38" connectable="0" vertex="1">
|
||||||
<mxGeometry x="-1" relative="1" as="geometry">
|
<mxGeometry x="-1" relative="1" as="geometry">
|
||||||
<mxPoint x="-30" y="-28" as="offset" />
|
<mxPoint x="-30" y="-28" as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-40" 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="6UZwBTI8mqE8-S_CcwA3-38">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-40" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="6UZwBTI8mqE8-S_CcwA3-38" connectable="0" vertex="1">
|
||||||
<mxGeometry x="1" relative="1" as="geometry">
|
<mxGeometry x="1" relative="1" as="geometry">
|
||||||
<mxPoint x="20" y="-30" as="offset" />
|
<mxPoint x="20" y="-30" as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-41" 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="6UZwBTI8mqE8-S_CcwA3-32" target="6UZwBTI8mqE8-S_CcwA3-34">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-41" 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="6UZwBTI8mqE8-S_CcwA3-32" target="6UZwBTI8mqE8-S_CcwA3-34" edge="1">
|
||||||
<mxGeometry x="389.35999999999996" y="350" as="geometry">
|
<mxGeometry x="389.35999999999996" y="350" as="geometry">
|
||||||
<mxPoint x="422.51" y="940" as="sourcePoint" />
|
<mxPoint x="422.51" y="940" as="sourcePoint" />
|
||||||
<mxPoint x="322.51" y="880" as="targetPoint" />
|
<mxPoint x="322.51" y="880" as="targetPoint" />
|
||||||
@@ -725,55 +722,55 @@
|
|||||||
</Array>
|
</Array>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-42" 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="6UZwBTI8mqE8-S_CcwA3-41">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-42" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="6UZwBTI8mqE8-S_CcwA3-41" connectable="0" vertex="1">
|
||||||
<mxGeometry x="-1" relative="1" as="geometry">
|
<mxGeometry x="-1" relative="1" as="geometry">
|
||||||
<mxPoint x="-30" y="-28" as="offset" />
|
<mxPoint x="-30" y="-28" as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-43" 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="6UZwBTI8mqE8-S_CcwA3-41">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-43" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="6UZwBTI8mqE8-S_CcwA3-41" connectable="0" vertex="1">
|
||||||
<mxGeometry x="1" relative="1" as="geometry">
|
<mxGeometry x="1" relative="1" as="geometry">
|
||||||
<mxPoint x="20" y="-30" as="offset" />
|
<mxPoint x="20" y="-30" as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-87" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">surcharge: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-87" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">surcharge: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="550" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="550" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-134" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">standingArea: Boolean</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-134" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">standingArea: Boolean</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="520" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="520" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-135" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>seatId:&nbsp;</i><i style="background-color: initial;">Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-135" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><i>seatId:&nbsp;</i><i style="background-color: initial;">Number</i></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-880" y="420" width="160" height="30" as="geometry" />
|
<mxGeometry x="-880" y="390" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-136" 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="6UZwBTI8mqE8-S_CcwA3-135" target="6UZwBTI8mqE8-S_CcwA3-8">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-136" 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="6UZwBTI8mqE8-S_CcwA3-135" target="6UZwBTI8mqE8-S_CcwA3-8" edge="1">
|
||||||
<mxGeometry x="389.35999999999996" y="350" as="geometry">
|
<mxGeometry x="389.35999999999996" y="350" as="geometry">
|
||||||
<mxPoint x="-830" y="575" as="sourcePoint" />
|
<mxPoint x="-830" y="575" as="sourcePoint" />
|
||||||
<mxPoint x="-749" y="575" as="targetPoint" />
|
<mxPoint x="-749" y="575" as="targetPoint" />
|
||||||
<Array as="points">
|
<Array as="points">
|
||||||
<mxPoint x="-680" y="435" />
|
<mxPoint x="-680" y="405" />
|
||||||
<mxPoint x="-680" y="705" />
|
<mxPoint x="-680" y="705" />
|
||||||
</Array>
|
</Array>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-137" 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="6UZwBTI8mqE8-S_CcwA3-136">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-137" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="6UZwBTI8mqE8-S_CcwA3-136" connectable="0" vertex="1">
|
||||||
<mxGeometry x="-1" relative="1" as="geometry">
|
<mxGeometry x="-1" relative="1" as="geometry">
|
||||||
<mxPoint x="3" y="-28" as="offset" />
|
<mxPoint x="3" y="-28" as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-138" 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="6UZwBTI8mqE8-S_CcwA3-136">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-138" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="6UZwBTI8mqE8-S_CcwA3-136" connectable="0" vertex="1">
|
||||||
<mxGeometry x="1" relative="1" as="geometry">
|
<mxGeometry x="1" relative="1" as="geometry">
|
||||||
<mxPoint x="-4" y="-30" as="offset" />
|
<mxPoint x="-4" y="-30" as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-139" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>SeatRows</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#d80073;strokeColor=#A50040;fontColor=#ffffff;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-139" value="<blockquote style="margin: 0px; border: none; padding: 0px;"><b><u>SeatRows</u></b></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=center;fillColor=#d80073;strokeColor=#A50040;fontColor=#ffffff;" parent="1" vertex="1">
|
||||||
<mxGeometry x="80.27000000000007" y="480" width="160" height="30" as="geometry" />
|
<mxGeometry x="80.27000000000007" y="480" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-140" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><u>id:&nbsp;</u><u style="background-color: initial;">Number</u></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-140" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;"><u>id:&nbsp;</u><u style="background-color: initial;">Number</u></blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="80.2700000000001" y="510" width="160" height="30" as="geometry" />
|
<mxGeometry x="80.2700000000001" y="510" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-141" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">seatRowId: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-141" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">seatRowId: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="750" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="750" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-142" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="6UZwBTI8mqE8-S_CcwA3-141" target="6UZwBTI8mqE8-S_CcwA3-140">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-142" value="" style="endArrow=open;endSize=12;startArrow=diamondThin;startSize=14;startFill=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="6UZwBTI8mqE8-S_CcwA3-141" target="6UZwBTI8mqE8-S_CcwA3-140" edge="1">
|
||||||
<mxGeometry x="389.35999999999996" y="350" as="geometry">
|
<mxGeometry x="389.35999999999996" y="350" as="geometry">
|
||||||
<mxPoint x="492.51" y="805" as="sourcePoint" />
|
<mxPoint x="492.51" y="805" as="sourcePoint" />
|
||||||
<mxPoint x="412.51" y="730" as="targetPoint" />
|
<mxPoint x="412.51" y="730" as="targetPoint" />
|
||||||
@@ -783,37 +780,82 @@
|
|||||||
</Array>
|
</Array>
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-143" 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="6UZwBTI8mqE8-S_CcwA3-142">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-143" value="0..n" style="resizable=0;align=left;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="6UZwBTI8mqE8-S_CcwA3-142" connectable="0" vertex="1">
|
||||||
<mxGeometry x="-1" relative="1" as="geometry">
|
<mxGeometry x="-1" relative="1" as="geometry">
|
||||||
<mxPoint x="4" y="-28" as="offset" />
|
<mxPoint x="4" y="-28" as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-144" 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="6UZwBTI8mqE8-S_CcwA3-142">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-144" value="1" style="resizable=0;align=right;verticalAlign=top;labelBackgroundColor=#ffffff;fontSize=10;strokeColor=#003366;shadow=1;fillColor=#D4E1F5;fontColor=#003366" parent="6UZwBTI8mqE8-S_CcwA3-142" connectable="0" vertex="1">
|
||||||
<mxGeometry x="1" relative="1" as="geometry">
|
<mxGeometry x="1" relative="1" as="geometry">
|
||||||
<mxPoint x="20" y="-30" as="offset" />
|
<mxPoint x="20" y="-30" as="offset" />
|
||||||
</mxGeometry>
|
</mxGeometry>
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-145" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">row: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-145" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">row: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="80.27000000000007" y="540" width="160" height="30" as="geometry" />
|
<mxGeometry x="80.27000000000007" y="540" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-146" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">capacity: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-146" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">capacity: Number</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="1" vertex="1">
|
||||||
<mxGeometry x="-159.54999999999995" y="580" width="160" height="30" as="geometry" />
|
<mxGeometry x="-159.54999999999995" y="580" width="160" height="30" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-147" 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">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-147" 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="-18.810000000000134" y="695" width="9.43" height="20" as="geometry" />
|
<mxGeometry x="-18.810000000000134" y="695" width="9.43" height="20" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-148" 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">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-148" 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="-19.27000000000013" y="435" width="9.43" height="20" as="geometry" />
|
<mxGeometry x="-19.27000000000013" y="435" width="9.43" height="20" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-149" 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">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-149" 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="221.5599999999999" y="515" width="9.43" height="20" as="geometry" />
|
<mxGeometry x="221.5599999999999" y="515" width="9.43" height="20" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-150" 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">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-150" 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="221.5599999999999" y="575" width="9.43" height="20" as="geometry" />
|
<mxGeometry x="221.5599999999999" y="575" width="9.43" height="20" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
<mxCell id="6UZwBTI8mqE8-S_CcwA3-151" 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">
|
<mxCell id="6UZwBTI8mqE8-S_CcwA3-151" 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="-18.820000000000096" y="755" width="9.43" height="20" as="geometry" />
|
<mxGeometry x="-18.820000000000096" y="755" width="9.43" height="20" as="geometry" />
|
||||||
</mxCell>
|
</mxCell>
|
||||||
|
<mxCell id="7DIVNgt3cFn7LyBarME5-1" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#6a00ff;strokeColor=#3700CC;" edge="1" parent="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-320.05999999999995" y="110" as="sourcePoint" />
|
||||||
|
<mxPoint x="-320.05999999999995" y="180" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="7DIVNgt3cFn7LyBarME5-2" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#6a00ff;strokeColor=#3700CC;" edge="1" parent="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-79.94999999999993" y="-20" as="sourcePoint" />
|
||||||
|
<mxPoint x="-79.94999999999993" y="50" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="7DIVNgt3cFn7LyBarME5-3" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#6a00ff;strokeColor=#3700CC;" edge="1" parent="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-319.83" y="690" as="sourcePoint" />
|
||||||
|
<mxPoint x="-320.05999999999995" y="620" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="7DIVNgt3cFn7LyBarME5-5" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#6a00ff;strokeColor=#3700CC;" edge="1" parent="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-1040.34" y="185" as="sourcePoint" />
|
||||||
|
<mxPoint x="-1040.34" y="255" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="7DIVNgt3cFn7LyBarME5-6" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#6a00ff;strokeColor=#3700CC;" edge="1" parent="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-1520.4899999999998" y="150" as="sourcePoint" />
|
||||||
|
<mxPoint x="-1520.4899999999998" y="220" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="7DIVNgt3cFn7LyBarME5-7" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#6a00ff;strokeColor=#3700CC;" edge="1" parent="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="360" y="385" as="sourcePoint" />
|
||||||
|
<mxPoint x="280" y="385" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="7DIVNgt3cFn7LyBarME5-8" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;fillColor=#6a00ff;strokeColor=#3700CC;" edge="1" parent="1">
|
||||||
|
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||||
|
<mxPoint x="-561.17" y="730" as="sourcePoint" />
|
||||||
|
<mxPoint x="-561.4" y="660" as="targetPoint" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="7DIVNgt3cFn7LyBarME5-9" value="<blockquote style="margin: 0px 0px 0px 8px; border: none; padding: 0px;">image: String</blockquote>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="-399.99999999999994" y="320" width="160" height="30" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
</root>
|
</root>
|
||||||
</mxGraphModel>
|
</mxGraphModel>
|
||||||
</diagram>
|
</diagram>
|
||||||
|
|||||||
@@ -12,40 +12,35 @@
|
|||||||
"date": "2024-10-18",
|
"date": "2024-10-18",
|
||||||
"price": 92,
|
"price": 92,
|
||||||
"inStock": 0,
|
"inStock": 0,
|
||||||
"locationId": 0,
|
"locationId": 0
|
||||||
"tourId": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"date": "2024-10-19",
|
"date": "2024-10-19",
|
||||||
"price": 92,
|
"price": 92,
|
||||||
"inStock": 170,
|
"inStock": 170,
|
||||||
"locationId": 0,
|
"locationId": 0
|
||||||
"tourId": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"date": "2024-10-23",
|
"date": "2024-10-23",
|
||||||
"price": 119.90,
|
"price": 119.90,
|
||||||
"inStock": 8736,
|
"inStock": 8736,
|
||||||
"locationId": 4,
|
"locationId": 4
|
||||||
"tourId": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"date": "2024-10-26",
|
"date": "2024-10-26",
|
||||||
"price": 114.90,
|
"price": 114.90,
|
||||||
"inStock": 2793,
|
"inStock": 2793,
|
||||||
"locationId": 8,
|
"locationId": 8
|
||||||
"tourId": 0
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"date": "2024-11-02",
|
"date": "2024-11-02",
|
||||||
"price": 124.90,
|
"price": 124.90,
|
||||||
"inStock": 3079,
|
"inStock": 3079,
|
||||||
"locationId": 12,
|
"locationId": 12
|
||||||
"tourId": 0
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -61,24 +56,21 @@
|
|||||||
"date": "2024-11-30",
|
"date": "2024-11-30",
|
||||||
"price": 108,
|
"price": 108,
|
||||||
"inStock": 1200,
|
"inStock": 1200,
|
||||||
"locationId": 1,
|
"locationId": 1
|
||||||
"tourId": 1
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"date": "2024-12-01",
|
"date": "2024-12-01",
|
||||||
"price": 104,
|
"price": 104,
|
||||||
"inStock": 1800,
|
"inStock": 1800,
|
||||||
"locationId": 5,
|
"locationId": 5
|
||||||
"tourId": 1
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 7,
|
"id": 7,
|
||||||
"date": "2024-12-07",
|
"date": "2024-12-07",
|
||||||
"price": 99.90,
|
"price": 99.90,
|
||||||
"inStock": 2438,
|
"inStock": 2438,
|
||||||
"locationId": 9,
|
"locationId": 9
|
||||||
"tourId": 1
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -94,16 +86,14 @@
|
|||||||
"date": "2025-01-21",
|
"date": "2025-01-21",
|
||||||
"price": 67.90,
|
"price": 67.90,
|
||||||
"inStock": 994,
|
"inStock": 994,
|
||||||
"locationId": 3,
|
"locationId": 3
|
||||||
"tourId": 2
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 9,
|
"id": 9,
|
||||||
"date": "2024-11-15",
|
"date": "2024-11-15",
|
||||||
"price": 79.90,
|
"price": 79.90,
|
||||||
"inStock": 1073,
|
"inStock": 1073,
|
||||||
"locationId": 14,
|
"locationId": 14
|
||||||
"tourId": 2
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -119,24 +109,21 @@
|
|||||||
"date": "2024-12-07",
|
"date": "2024-12-07",
|
||||||
"price": 124.90,
|
"price": 124.90,
|
||||||
"inStock": 765,
|
"inStock": 765,
|
||||||
"locationId": 13,
|
"locationId": 13
|
||||||
"tourId": 3
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"date": "2025-01-17",
|
"date": "2025-01-17",
|
||||||
"price": 129.90,
|
"price": 129.90,
|
||||||
"inStock": 989,
|
"inStock": 989,
|
||||||
"locationId": 9,
|
"locationId": 9
|
||||||
"tourId": 3
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"date": "2025-02-01",
|
"date": "2025-02-01",
|
||||||
"price": 134.90,
|
"price": 134.90,
|
||||||
"inStock": 827,
|
"inStock": 827,
|
||||||
"locationId": 4,
|
"locationId": 4
|
||||||
"tourId": 3
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -152,8 +139,7 @@
|
|||||||
"date": "2024-12-05",
|
"date": "2024-12-05",
|
||||||
"price": 80,
|
"price": 80,
|
||||||
"inStock": 99,
|
"inStock": 99,
|
||||||
"locationId": 2,
|
"locationId": 2
|
||||||
"tourId": 4
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -169,16 +155,14 @@
|
|||||||
"date": "2025-01-12",
|
"date": "2025-01-12",
|
||||||
"price": 81.90,
|
"price": 81.90,
|
||||||
"inStock": 173,
|
"inStock": 173,
|
||||||
"locationId": 2,
|
"locationId": 2
|
||||||
"tourId": 5
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 15,
|
"id": 15,
|
||||||
"date": "2025-02-01",
|
"date": "2025-02-01",
|
||||||
"price": 84.90,
|
"price": 84.90,
|
||||||
"inStock": 192,
|
"inStock": 192,
|
||||||
"locationId": 6,
|
"locationId": 6
|
||||||
"tourId": 5
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -194,16 +178,14 @@
|
|||||||
"date": "2025-02-27",
|
"date": "2025-02-27",
|
||||||
"price": 67.90,
|
"price": 67.90,
|
||||||
"inStock": 847,
|
"inStock": 847,
|
||||||
"locationId": 3,
|
"locationId": 3
|
||||||
"tourId": 6
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 17,
|
"id": 17,
|
||||||
"date": "2025-03-06",
|
"date": "2025-03-06",
|
||||||
"price": 64.90,
|
"price": 64.90,
|
||||||
"inStock": 245,
|
"inStock": 245,
|
||||||
"locationId": 9,
|
"locationId": 9
|
||||||
"tourId": 6
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -219,32 +201,28 @@
|
|||||||
"date": "2025-01-15",
|
"date": "2025-01-15",
|
||||||
"price": 67.90,
|
"price": 67.90,
|
||||||
"inStock": 847,
|
"inStock": 847,
|
||||||
"locationId": 2,
|
"locationId": 2
|
||||||
"tourId": 7
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 19,
|
"id": 19,
|
||||||
"date": "2025-01-23",
|
"date": "2025-01-23",
|
||||||
"price": 64.90,
|
"price": 64.90,
|
||||||
"inStock": 245,
|
"inStock": 245,
|
||||||
"locationId": 10,
|
"locationId": 10
|
||||||
"tourId": 7
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 20,
|
"id": 20,
|
||||||
"date": "2025-02-02",
|
"date": "2025-02-02",
|
||||||
"price": 64.90,
|
"price": 64.90,
|
||||||
"inStock": 245,
|
"inStock": 245,
|
||||||
"locationId": 13,
|
"locationId": 13
|
||||||
"tourId": 7
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 21,
|
"id": 21,
|
||||||
"date": "2025-02-05",
|
"date": "2025-02-05",
|
||||||
"price": 64.90,
|
"price": 64.90,
|
||||||
"inStock": 245,
|
"inStock": 245,
|
||||||
"locationId": 13,
|
"locationId": 13
|
||||||
"tourId": 7
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"data": [
|
|
||||||
{
|
|
||||||
"id": 0,
|
|
||||||
"orderId": 0,
|
|
||||||
"showId": 0,
|
|
||||||
"quantity": 2,
|
|
||||||
"orderPrice": 184
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -5,21 +5,43 @@
|
|||||||
"accountId": 0,
|
"accountId": 0,
|
||||||
"shippingProgress": 4,
|
"shippingProgress": 4,
|
||||||
"addressId": 0,
|
"addressId": 0,
|
||||||
"paymentId": 0
|
"paymentId": 0,
|
||||||
|
"tickets": [
|
||||||
|
{
|
||||||
|
"concertId": 0,
|
||||||
|
"orderPrice": 184
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"accountId": 3,
|
"accountId": 3,
|
||||||
"shippingProgress": 5,
|
"shippingProgress": 5,
|
||||||
"addressId": 4,
|
"addressId": 4,
|
||||||
"paymentId": 3
|
"paymentId": 3,
|
||||||
|
"tickets": [
|
||||||
|
{
|
||||||
|
"concertId": 0,
|
||||||
|
"orderPrice": 184
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"concertId": 0,
|
||||||
|
"orderPrice": 184
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"accountId": 3,
|
"accountId": 3,
|
||||||
"shippingProgress": 2,
|
"shippingProgress": 2,
|
||||||
"addressId": 5,
|
"addressId": 5,
|
||||||
"paymentId": 3
|
"paymentId": 3,
|
||||||
|
"tickets": [
|
||||||
|
{
|
||||||
|
"concertId": 0,
|
||||||
|
"orderPrice": 184
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@ import { Sequelize } from "sequelize-typescript"
|
|||||||
|
|
||||||
// Models
|
// Models
|
||||||
import { Order } from "./models/ordering/order.model"
|
import { Order } from "./models/ordering/order.model"
|
||||||
import { OrderItem } from "./models/ordering/orderItem.model"
|
import { Ticket } from "./models/ordering/ticket.model"
|
||||||
import { Account } from "./models/user/account.model"
|
import { Account } from "./models/user/account.model"
|
||||||
import { prepopulateDatabase } from "./scripts/databaseHelper"
|
import { prepopulateDatabase } from "./scripts/databaseHelper"
|
||||||
import { Address } from "./models/user/address.model"
|
import { Address } from "./models/user/address.model"
|
||||||
@@ -14,7 +14,7 @@ import { Band } from "./models/acts/band.model"
|
|||||||
import { Concert } from "./models/acts/concert.model"
|
import { Concert } from "./models/acts/concert.model"
|
||||||
import { Member } from "./models/acts/member.model"
|
import { Member } from "./models/acts/member.model"
|
||||||
import { Rating } from "./models/acts/rating.model"
|
import { Rating } from "./models/acts/rating.model"
|
||||||
import { Tour } from "./models/acts/tour.model"
|
import { Event } from "./models/acts/event.model"
|
||||||
import { City } from "./models/locations/city.model"
|
import { City } from "./models/locations/city.model"
|
||||||
import { BandGenre } from "./models/acts/bandGenre.model"
|
import { BandGenre } from "./models/acts/bandGenre.model"
|
||||||
import { Seat } from "./models/locations/seat.model"
|
import { Seat } from "./models/locations/seat.model"
|
||||||
@@ -35,18 +35,23 @@ export const sequelize = new Sequelize({
|
|||||||
models: [
|
models: [
|
||||||
AccountRole, Account, Payment, Address,
|
AccountRole, Account, Payment, Address,
|
||||||
City, Location, SeatGroup, SeatRow, Seat,
|
City, Location, SeatGroup, SeatRow, Seat,
|
||||||
Genre, Band, BandGenre, Rating, Member, Tour, Concert,
|
Genre, Band, BandGenre, Rating, Member, Event, Concert,
|
||||||
Order, OrderItem
|
Order, Ticket
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
export function startDatabase() {
|
export function startDatabase() {
|
||||||
|
let force = false
|
||||||
|
|
||||||
// Create database and tables
|
// Create database and tables
|
||||||
sequelize.sync({ force: true })
|
sequelize.sync({ force: force })
|
||||||
.then(() => {
|
.then(() => {
|
||||||
console.log("Database & tables created!")
|
console.log("Database & tables created!")
|
||||||
|
|
||||||
|
if (force) {
|
||||||
prepopulateDatabase()
|
prepopulateDatabase()
|
||||||
|
}
|
||||||
|
|
||||||
console.log("Database prepopulated!")
|
console.log("Database prepopulated!")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { BelongsTo, BelongsToMany, Column, DataType, ForeignKey, HasMany, Model,
|
|||||||
import { Member } from "./member.model";
|
import { Member } from "./member.model";
|
||||||
import { Genre } from "./genre.model";
|
import { Genre } from "./genre.model";
|
||||||
import { Rating } from "./rating.model";
|
import { Rating } from "./rating.model";
|
||||||
import { Tour } from "./tour.model";
|
import { Event } from "./event.model";
|
||||||
import { BandGenre } from "./bandGenre.model";
|
import { BandGenre } from "./bandGenre.model";
|
||||||
|
|
||||||
@Table({ timestamps: false })
|
@Table({ timestamps: false })
|
||||||
@@ -45,8 +45,8 @@ export class Band extends Model {
|
|||||||
@HasMany(() => Rating)
|
@HasMany(() => Rating)
|
||||||
ratings: Rating[]
|
ratings: Rating[]
|
||||||
|
|
||||||
@HasMany(() => Tour)
|
@HasMany(() => Event)
|
||||||
tours: Tour[]
|
events: Event[]
|
||||||
|
|
||||||
@BelongsToMany(() => Genre, () => BandGenre)
|
@BelongsToMany(() => Genre, () => BandGenre)
|
||||||
genres: Genre[]
|
genres: Genre[]
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { BelongsTo, Column, ForeignKey, HasMany, Model, Table } from "sequelize-typescript";
|
import { BelongsTo, Column, ForeignKey, HasMany, Model, Table } from "sequelize-typescript";
|
||||||
import { Location } from "./../locations/location.model";
|
import { Location } from "./../locations/location.model";
|
||||||
import { Tour } from "./tour.model";
|
import { Event } from "./event.model";
|
||||||
import { OrderItem } from "../ordering/orderItem.model";
|
import { Ticket } from "../ordering/ticket.model";
|
||||||
|
|
||||||
@Table({ timestamps: false })
|
@Table({ timestamps: false })
|
||||||
export class Concert extends Model {
|
export class Concert extends Model {
|
||||||
@@ -18,18 +18,19 @@ export class Concert extends Model {
|
|||||||
@Column
|
@Column
|
||||||
locationId: Number
|
locationId: Number
|
||||||
|
|
||||||
@ForeignKey(() => Tour)
|
@ForeignKey(() => Event)
|
||||||
tourId: Number
|
@Column
|
||||||
|
eventId: Number
|
||||||
|
|
||||||
|
|
||||||
// Relations
|
// Relations
|
||||||
|
|
||||||
@BelongsTo(() => Tour)
|
@BelongsTo(() => Event)
|
||||||
tour: Tour
|
event: Event
|
||||||
|
|
||||||
@BelongsTo(() => Location)
|
@BelongsTo(() => Location)
|
||||||
location: Location
|
location: Location
|
||||||
|
|
||||||
@HasMany(() => OrderItem)
|
@HasMany(() => Ticket)
|
||||||
orderItems: OrderItem[]
|
tickets: Ticket[]
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ import { Band } from "./band.model";
|
|||||||
import { Concert } from "./concert.model";
|
import { Concert } from "./concert.model";
|
||||||
|
|
||||||
@Table({ timestamps: false })
|
@Table({ timestamps: false })
|
||||||
export class Tour extends Model {
|
export class Event extends Model {
|
||||||
@Column
|
@Column
|
||||||
name: String
|
name: String
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Table, Column, Model, BelongsTo, ForeignKey, HasMany, BelongsToMany, Default } from 'sequelize-typescript';
|
import { Table, Column, Model, BelongsTo, ForeignKey, HasMany, BelongsToMany, Default } from 'sequelize-typescript';
|
||||||
import { Account } from '../user/account.model';
|
import { Account } from '../user/account.model';
|
||||||
import { OrderItem } from './orderItem.model';
|
import { Ticket } from './ticket.model';
|
||||||
import { Address } from '../user/address.model';
|
import { Address } from '../user/address.model';
|
||||||
import { Payment } from '../user/payment.model';
|
import { Payment } from '../user/payment.model';
|
||||||
|
|
||||||
@@ -40,6 +40,6 @@ export class Order extends Model {
|
|||||||
@BelongsTo(() => Payment)
|
@BelongsTo(() => Payment)
|
||||||
payment: Payment
|
payment: Payment
|
||||||
|
|
||||||
@HasMany(() => OrderItem)
|
@HasMany(() => Ticket)
|
||||||
orderItems: OrderItem[]
|
tickets: Ticket[]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,22 +1,24 @@
|
|||||||
import { Model, BelongsTo, Column, ForeignKey, HasMany, HasOne, Table } from "sequelize-typescript";
|
import { Model, BelongsTo, Column, ForeignKey, HasMany, HasOne, Table } from "sequelize-typescript";
|
||||||
import { Concert } from "../acts/concert.model";
|
import { Concert } from "../acts/concert.model";
|
||||||
import { Order } from "./order.model";
|
import { Order } from "./order.model";
|
||||||
|
import { Seat } from "../locations/seat.model";
|
||||||
|
|
||||||
@Table({ timestamps: false })
|
@Table({ timestamps: false })
|
||||||
export class OrderItem extends Model {
|
export class Ticket extends Model {
|
||||||
@Column
|
@Column
|
||||||
@ForeignKey(() => Order)
|
@ForeignKey(() => Order)
|
||||||
orderId: number
|
orderId: number
|
||||||
|
|
||||||
@Column
|
|
||||||
quantity: number
|
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
orderPrice: number
|
orderPrice: number
|
||||||
|
|
||||||
@Column
|
@Column
|
||||||
@ForeignKey(() => Concert)
|
@ForeignKey(() => Concert)
|
||||||
showId: number
|
concertId: number
|
||||||
|
|
||||||
|
@Column
|
||||||
|
@ForeignKey(() => Seat)
|
||||||
|
seatId: number
|
||||||
|
|
||||||
|
|
||||||
// Relations
|
// Relations
|
||||||
@@ -25,4 +27,7 @@ export class OrderItem extends Model {
|
|||||||
|
|
||||||
@BelongsTo(() => Concert)
|
@BelongsTo(() => Concert)
|
||||||
product: Concert
|
product: Concert
|
||||||
|
|
||||||
|
@BelongsTo(() => Seat)
|
||||||
|
seat: Seat
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ import { Band } from "../models/acts/band.model";
|
|||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { Rating } from "../models/acts/rating.model";
|
import { Rating } from "../models/acts/rating.model";
|
||||||
import { Genre } from "../models/acts/genre.model";
|
import { Genre } from "../models/acts/genre.model";
|
||||||
import { Tour } from "../models/acts/tour.model";
|
import { Event } from "../models/acts/event.model";
|
||||||
import { Concert } from "../models/acts/concert.model";
|
import { Concert } from "../models/acts/concert.model";
|
||||||
import { Location } from "../models/locations/location.model";
|
import { Location } from "../models/locations/location.model";
|
||||||
import { City } from "../models/locations/city.model";
|
import { City } from "../models/locations/city.model";
|
||||||
@@ -27,7 +27,7 @@ band.get("/", (req: Request, res: Response) => {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
model: Tour,
|
model: Event,
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
model: Concert,
|
model: Concert,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Location } from "../models/locations/location.model";
|
import { Location } from "../models/locations/location.model";
|
||||||
import { Concert } from "../models/acts/concert.model";
|
import { Concert } from "../models/acts/concert.model";
|
||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { Tour } from "../models/acts/tour.model";
|
import { Event } from "../models/acts/event.model";
|
||||||
import { City } from "../models/locations/city.model";
|
import { City } from "../models/locations/city.model";
|
||||||
|
|
||||||
export const concert = Router()
|
export const concert = Router()
|
||||||
@@ -9,7 +9,7 @@ export const concert = Router()
|
|||||||
concert.get("/:id", (req: Request, res: Response) => {
|
concert.get("/:id", (req: Request, res: Response) => {
|
||||||
Concert.findByPk(req.params.id, {
|
Concert.findByPk(req.params.id, {
|
||||||
include: [
|
include: [
|
||||||
Tour,
|
Event,
|
||||||
{
|
{
|
||||||
model: Location,
|
model: Location,
|
||||||
include: [ City ],
|
include: [ City ],
|
||||||
|
|||||||
79
software/backend/routes/events.routes.ts
Normal file
79
software/backend/routes/events.routes.ts
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
import { Concert } from "../models/acts/concert.model";
|
||||||
|
import { Band } from "../models/acts/band.model";
|
||||||
|
import { Event } from "../models/acts/event.model";
|
||||||
|
import { Request, Response, Router } from "express";
|
||||||
|
import { Location } from "../models/locations/location.model";
|
||||||
|
import { Genre } from "../models/acts/genre.model";
|
||||||
|
import { City } from "../models/locations/city.model";
|
||||||
|
|
||||||
|
export const events = Router()
|
||||||
|
|
||||||
|
events.get("/", async (req: Request, res: Response) => {
|
||||||
|
let cityName = req.query.city
|
||||||
|
let genreName = req.query.genre
|
||||||
|
let cityFilter = {}
|
||||||
|
let genreFilter = {}
|
||||||
|
|
||||||
|
if (cityName != undefined) {
|
||||||
|
cityFilter = {
|
||||||
|
model: City,
|
||||||
|
where: { name: cityName }
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cityFilter = {
|
||||||
|
model: City
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (genreName != undefined) {
|
||||||
|
genreFilter = {
|
||||||
|
model: Genre,
|
||||||
|
where: { name: genreName }
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
genreFilter = {
|
||||||
|
model: Genre
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Event.findAll({
|
||||||
|
include: [
|
||||||
|
{
|
||||||
|
model: Concert,
|
||||||
|
include: [
|
||||||
|
{
|
||||||
|
model: Location,
|
||||||
|
include: [
|
||||||
|
cityFilter
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
model: Band,
|
||||||
|
include: [
|
||||||
|
genreFilter
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
.then(events => {
|
||||||
|
let resultArray = []
|
||||||
|
|
||||||
|
// Remove datasets which not fulfill the optional parameter
|
||||||
|
for (let event of events) {
|
||||||
|
if (event.dataValues.band != null) {
|
||||||
|
for (let concert of event.dataValues.concerts) {
|
||||||
|
if (concert.dataValues.location != null) {
|
||||||
|
resultArray.push(event)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.status(200).json(resultArray)
|
||||||
|
})
|
||||||
|
|
||||||
|
})
|
||||||
@@ -2,7 +2,7 @@ import { Concert } from "../models/acts/concert.model";
|
|||||||
import { City } from "../models/locations/city.model";
|
import { City } from "../models/locations/city.model";
|
||||||
import { Location } from "../models/locations/location.model";
|
import { Location } from "../models/locations/location.model";
|
||||||
import { Request, Response, Router } from "express";
|
import { Request, Response, Router } from "express";
|
||||||
import { Tour } from "../models/acts/tour.model";
|
import { Event } from "../models/acts/event.model";
|
||||||
import { Band } from "../models/acts/band.model";
|
import { Band } from "../models/acts/band.model";
|
||||||
import { SeatGroup } from "../models/locations/seatGroup.model";
|
import { SeatGroup } from "../models/locations/seatGroup.model";
|
||||||
import { Seat } from "../models/locations/seat.model";
|
import { Seat } from "../models/locations/seat.model";
|
||||||
@@ -16,7 +16,7 @@ location.get("/", (req: Request, res: Response) => {
|
|||||||
City,
|
City,
|
||||||
{
|
{
|
||||||
model: Concert,
|
model: Concert,
|
||||||
include: [ Tour ],
|
include: [ Event ],
|
||||||
attributes: {
|
attributes: {
|
||||||
exclude: [ "locationId", "tourId" ]
|
exclude: [ "locationId", "tourId" ]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Router, Request, Response } from "express";
|
import { Router, Request, Response } from "express";
|
||||||
import { Order } from "../models/ordering/order.model";
|
import { Order } from "../models/ordering/order.model";
|
||||||
import { Concert } from "../models/acts/concert.model";
|
import { Concert } from "../models/acts/concert.model";
|
||||||
import { OrderItem } from "../models/ordering/orderItem.model";
|
import { Ticket } from "../models/ordering/ticket.model";
|
||||||
import { Payment } from "../models/user/payment.model";
|
import { Payment } from "../models/user/payment.model";
|
||||||
import { Address } from "../models/user/address.model";
|
import { Address } from "../models/user/address.model";
|
||||||
import { Band } from "../models/acts/band.model";
|
import { Band } from "../models/acts/band.model";
|
||||||
@@ -15,7 +15,7 @@ order.get("/:id", (req: Request, res: Response) => {
|
|||||||
where: { accountId: req.params.id },
|
where: { accountId: req.params.id },
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
model: OrderItem,
|
model: Ticket,
|
||||||
include: [
|
include: [
|
||||||
{
|
{
|
||||||
model: Concert,
|
model: Concert,
|
||||||
@@ -43,7 +43,7 @@ order.post("/", (req: Request, res: Response) => {
|
|||||||
Order.create(req.body)
|
Order.create(req.body)
|
||||||
.then(async order => {
|
.then(async order => {
|
||||||
for (let orderItem of req.body.orderItems) {
|
for (let orderItem of req.body.orderItems) {
|
||||||
OrderItem.create({
|
Ticket.create({
|
||||||
orderId: order.id,
|
orderId: order.id,
|
||||||
quantity: orderItem.quantity,
|
quantity: orderItem.quantity,
|
||||||
orderPrice: orderItem.orderPrice,
|
orderPrice: orderItem.orderPrice,
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
import { Concert } from "../models/acts/concert.model";
|
|
||||||
import { Band } from "../models/acts/band.model";
|
|
||||||
import { Tour } from "../models/acts/tour.model";
|
|
||||||
import { Request, Response, Router } from "express";
|
|
||||||
import { Location } from "../models/locations/location.model";
|
|
||||||
import { Genre } from "../models/acts/genre.model";
|
|
||||||
import { City } from "../models/locations/city.model";
|
|
||||||
|
|
||||||
export const tour = Router()
|
|
||||||
|
|
||||||
tour.get("/", (req: Request, res: Response) => {
|
|
||||||
Tour.findAll({
|
|
||||||
include: [
|
|
||||||
{
|
|
||||||
model: Band,
|
|
||||||
include: [ Genre ],
|
|
||||||
attributes: {
|
|
||||||
exclude: [ "genreId" ]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
model: Concert,
|
|
||||||
include: [
|
|
||||||
{
|
|
||||||
model: Location,
|
|
||||||
include: [ City ],
|
|
||||||
attributes: {
|
|
||||||
exclude: [ "cityId" ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
attributes: {
|
|
||||||
exclude: [ "locationId", "tourId" ]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
],
|
|
||||||
attributes: {
|
|
||||||
exclude: [ "bandId" ]
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.then(tours => {
|
|
||||||
res.status(200).json(tours)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Order } from '../models/ordering/order.model'
|
import { Order } from '../models/ordering/order.model'
|
||||||
import { OrderItem } from '../models/ordering/orderItem.model'
|
import { Ticket } from '../models/ordering/ticket.model'
|
||||||
import { Account } from '../models/user/account.model'
|
import { Account } from '../models/user/account.model'
|
||||||
import { Address } from '../models/user/address.model'
|
import { Address } from '../models/user/address.model'
|
||||||
import { Payment } from '../models/user/payment.model'
|
import { Payment } from '../models/user/payment.model'
|
||||||
@@ -10,7 +10,7 @@ import { Genre } from '../models/acts/genre.model'
|
|||||||
import { Band } from '../models/acts/band.model'
|
import { Band } from '../models/acts/band.model'
|
||||||
import { Location } from '../models/locations/location.model'
|
import { Location } from '../models/locations/location.model'
|
||||||
import { Concert } from '../models/acts/concert.model'
|
import { Concert } from '../models/acts/concert.model'
|
||||||
import { Tour } from '../models/acts/tour.model'
|
import { Event } from '../models/acts/event.model'
|
||||||
import { City } from '../models/locations/city.model'
|
import { City } from '../models/locations/city.model'
|
||||||
import { BandGenre } from '../models/acts/bandGenre.model'
|
import { BandGenre } from '../models/acts/bandGenre.model'
|
||||||
import { SeatGroup } from '../models/locations/seatGroup.model'
|
import { SeatGroup } from '../models/locations/seatGroup.model'
|
||||||
@@ -19,11 +19,10 @@ import { SeatRow } from '../models/locations/seatRow.model'
|
|||||||
|
|
||||||
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 accountRoles from "./../data/accountRoles.json"
|
import accountRoles from "./../data/accountRoles.json"
|
||||||
import bands from "./../data/bands.json"
|
import bands from "./../data/bands.json"
|
||||||
import genres from "./../data/genres.json"
|
import genres from "./../data/genres.json"
|
||||||
import tours from "./../data/tours.json"
|
import events from "./../data/events.json"
|
||||||
import cities from "./../data/cities.json"
|
import cities from "./../data/cities.json"
|
||||||
|
|
||||||
|
|
||||||
@@ -31,14 +30,14 @@ import cities from "./../data/cities.json"
|
|||||||
* Delete all datasets in every database table
|
* Delete all datasets in every database table
|
||||||
*/
|
*/
|
||||||
export function deleteAllTables() {
|
export function deleteAllTables() {
|
||||||
OrderItem.destroy({truncate: true })
|
Ticket.destroy({truncate: true })
|
||||||
Order.destroy({ truncate: true })
|
Order.destroy({ truncate: true })
|
||||||
|
|
||||||
Rating.destroy({ truncate: true })
|
Rating.destroy({ truncate: true })
|
||||||
Member.destroy({ truncate: true })
|
Member.destroy({ truncate: true })
|
||||||
Genre.destroy({ truncate: true })
|
Genre.destroy({ truncate: true })
|
||||||
Band.destroy({ truncate: true })
|
Band.destroy({ truncate: true })
|
||||||
Tour.destroy({ truncate: true })
|
Event.destroy({ truncate: true })
|
||||||
|
|
||||||
Location.destroy({ truncate: true })
|
Location.destroy({ truncate: true })
|
||||||
Concert.destroy({ truncate: true })
|
Concert.destroy({ truncate: true })
|
||||||
@@ -145,15 +144,25 @@ export async function prepopulateDatabase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for (let tour of tours.data) {
|
for (let tour of events.data) {
|
||||||
await Tour.create(tour)
|
await Event.create(tour)
|
||||||
.then(async dataset => {
|
.then(async dataset => {
|
||||||
for (let concert of tour.concerts) {
|
for (let concert of tour.concerts) {
|
||||||
|
concert["eventId"] = dataset.id
|
||||||
|
|
||||||
await Concert.create(concert)
|
await Concert.create(concert)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
Order.bulkCreate(orders.data)
|
for (let order of orders.data) {
|
||||||
OrderItem.bulkCreate(orderItems.data)
|
await Order.create(order)
|
||||||
|
.then(async dataset => {
|
||||||
|
for (let ticket of order.tickets) {
|
||||||
|
ticket["orderId"] = dataset.id
|
||||||
|
|
||||||
|
await Ticket.create(ticket)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@ import { concert } from './routes/concert.routes'
|
|||||||
import { band } from './routes/band.routes'
|
import { band } from './routes/band.routes'
|
||||||
import { genre } from './routes/genre.routes'
|
import { genre } from './routes/genre.routes'
|
||||||
import { location } from './routes/location.routes'
|
import { location } from './routes/location.routes'
|
||||||
import { tour } from './routes/tour.routes'
|
import { events } from './routes/events.routes'
|
||||||
import { city } from './routes/city.routes'
|
import { city } from './routes/city.routes'
|
||||||
|
|
||||||
const app = express()
|
const app = express()
|
||||||
@@ -35,13 +35,12 @@ app.use('/static', express.static(path.join(__dirname, 'images')))
|
|||||||
|
|
||||||
// Routes
|
// Routes
|
||||||
app.use("/api", api)
|
app.use("/api", api)
|
||||||
app.use("/shows", concert)
|
app.use("/events", events)
|
||||||
app.use("/bands", band)
|
app.use("/bands", band)
|
||||||
app.use("/genres", genre)
|
|
||||||
app.use("/locations", location)
|
app.use("/locations", location)
|
||||||
|
app.use("/genres", genre)
|
||||||
app.use("/orders", order)
|
app.use("/orders", order)
|
||||||
app.use("/accounts", account)
|
app.use("/accounts", account)
|
||||||
app.use("/tours", tour)
|
|
||||||
app.use("/cities", city)
|
app.use("/cities", city)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
12
software/src/data/api/eventApi.ts
Normal file
12
software/src/data/api/eventApi.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import axios from "axios"
|
||||||
|
|
||||||
|
const BASE_URL = "http://localhost:3000/events"
|
||||||
|
|
||||||
|
export async function fetchEvents(city: string = "", genre: string = "") {
|
||||||
|
let url = BASE_URL + "?"
|
||||||
|
url += (city.length > 0) ? "city=" + city : ""
|
||||||
|
url += (genre.length > 0) ? "genre=" + genre : ""
|
||||||
|
|
||||||
|
console.log(url)
|
||||||
|
return await axios.get(url)
|
||||||
|
}
|
||||||
11
software/src/data/models/acts/eventModel.ts
Normal file
11
software/src/data/models/acts/eventModel.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import { BandModel } from "./bandModel"
|
||||||
|
import { ConcertModel } from "./concertModel"
|
||||||
|
|
||||||
|
export class EventModel {
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
offered: boolean
|
||||||
|
image: string
|
||||||
|
band: BandModel
|
||||||
|
concerts: Array<ConcertModel>
|
||||||
|
}
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
import { BandModel } from "./bandModel"
|
import { BandModel } from "./bandModel"
|
||||||
import { ConcertModel } from "./concertModel"
|
import { ConcertModel } from "./concertModel"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use EventModel!
|
||||||
|
*/
|
||||||
export class TourModel {
|
export class TourModel {
|
||||||
id: number
|
id: number
|
||||||
name: string
|
name: string
|
||||||
|
|||||||
19
software/src/data/stores/shoppingStore.ts
Normal file
19
software/src/data/stores/shoppingStore.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { defineStore } from "pinia";
|
||||||
|
import { ref } from "vue";
|
||||||
|
import { EventModel } from "../models/acts/eventModel";
|
||||||
|
import { fetchEvents } from "../api/eventApi";
|
||||||
|
|
||||||
|
export const useShoppingStore = defineStore("shoppingStore", {
|
||||||
|
state: () => ({
|
||||||
|
events: ref<Array<EventModel>>([])
|
||||||
|
}),
|
||||||
|
|
||||||
|
actions: {
|
||||||
|
getEvents(city: string = "", genre: string = "") {
|
||||||
|
fetchEvents(city, genre)
|
||||||
|
.then(result => {
|
||||||
|
this.events = result.data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -5,8 +5,12 @@ import sectionDivider from '@/components/sectionDivider.vue';
|
|||||||
import cardWithLeftImage from '@/components/cardWithLeftImage.vue';
|
import cardWithLeftImage from '@/components/cardWithLeftImage.vue';
|
||||||
import outlinedButton from '@/components/outlinedButton.vue';
|
import outlinedButton from '@/components/outlinedButton.vue';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
|
import ticketOrderDialog from './ticketOrderDialog.vue';
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import { ConcertModel } from '@/data/models/acts/concertModel';
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
const showDialog = ref(false)
|
||||||
|
|
||||||
defineProps({
|
defineProps({
|
||||||
band: {
|
band: {
|
||||||
@@ -14,6 +18,10 @@ defineProps({
|
|||||||
required: true
|
required: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function openTicketOrderDialog(concert: ConcertModel) {
|
||||||
|
showDialog.value = true
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -60,6 +68,7 @@ defineProps({
|
|||||||
<outlined-button
|
<outlined-button
|
||||||
v-if="concert.inStock > 0"
|
v-if="concert.inStock > 0"
|
||||||
prepend-icon="mdi-basket-plus"
|
prepend-icon="mdi-basket-plus"
|
||||||
|
@click="openTicketOrderDialog(concert)"
|
||||||
>
|
>
|
||||||
{{ $t('add') }}
|
{{ $t('add') }}
|
||||||
</outlined-button>
|
</outlined-button>
|
||||||
@@ -75,4 +84,6 @@ defineProps({
|
|||||||
</card-with-left-image>
|
</card-with-left-image>
|
||||||
</v-col>
|
</v-col>
|
||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
|
<ticket-order-dialog />
|
||||||
</template>
|
</template>
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import actionDialog from '@/components/actionDialog.vue';
|
||||||
|
import { LocationModel } from '@/data/models/locations/locationModel';
|
||||||
|
|
||||||
|
const showDialog = defineModel()
|
||||||
|
|
||||||
|
defineProps({
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<action-dialog >
|
||||||
|
123
|
||||||
|
</action-dialog>
|
||||||
|
</template>
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import cardWithLeftImage from '@/components/cardWithLeftImage.vue';
|
import cardWithLeftImage from '@/components/cardWithLeftImage.vue';
|
||||||
import { useConcertStore } from '@/data/stores/concertStore';
|
|
||||||
import { createDateRangeString, lowestTicketPrice } from '@/scripts/concertScripts';
|
import { createDateRangeString, lowestTicketPrice } from '@/scripts/concertScripts';
|
||||||
import filterBar from './filterBar.vue';
|
import filterBar from './filterBar.vue';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
|
import { useShoppingStore } from '@/data/stores/shoppingStore';
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const concertStore = useConcertStore()
|
const shoppingStore = useShoppingStore()
|
||||||
|
|
||||||
|
shoppingStore.getEvents()
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -22,8 +24,8 @@ const concertStore = useConcertStore()
|
|||||||
</v-row>
|
</v-row>
|
||||||
|
|
||||||
<v-row
|
<v-row
|
||||||
v-if="concertStore.filteredTours.length > 0"
|
v-if="shoppingStore.events.length > 0"
|
||||||
v-for="tour of concertStore.filteredTours"
|
v-for="tour of shoppingStore.events"
|
||||||
>
|
>
|
||||||
<v-col>
|
<v-col>
|
||||||
<card-with-left-image
|
<card-with-left-image
|
||||||
|
|||||||
Reference in New Issue
Block a user