Remove EventTable in database, redesign frontend URL paths

This commit is contained in:
2024-10-12 15:54:03 +02:00
parent 7b991d2ff8
commit 60e217db03
40 changed files with 955 additions and 1203 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,181 @@
<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="z4ePnmX8JLkG3N1GDPOr">
<mxGraphModel dx="1783" dy="1720" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-1" target="Fk8QGSgGJ1bhqam2HO4i-3" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-1" target="Fk8QGSgGJ1bhqam2HO4i-15" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="fY-Wzga6seKQwhded4A5-7">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-360" y="700" as="targetPoint" />
<mxPoint x="-720" y="240" as="sourcePoint" />
<Array as="points">
<mxPoint x="-720" y="540" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-1" target="Fk8QGSgGJ1bhqam2HO4i-13">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-1" target="fY-Wzga6seKQwhded4A5-8">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-680" y="-20" as="targetPoint" />
<Array as="points">
<mxPoint x="-720" y="-20" />
<mxPoint x="-680" y="-20" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-1" target="fY-Wzga6seKQwhded4A5-1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-1" target="Fk8QGSgGJ1bhqam2HO4i-14">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-1" target="Fk8QGSgGJ1bhqam2HO4i-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-1" value="Homepage&lt;div&gt;&lt;font face=&quot;Courier New&quot;&gt;&lt;b&gt;/&lt;/b&gt;&lt;/font&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-800" y="-120" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-2" target="Fk8QGSgGJ1bhqam2HO4i-9">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-2" target="Fk8QGSgGJ1bhqam2HO4i-8">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-2" target="Fk8QGSgGJ1bhqam2HO4i-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;fillColor=#6d8764;strokeColor=#3A5431;" edge="1" parent="1" target="Fk8QGSgGJ1bhqam2HO4i-2">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-679.6666666666667" y="70" as="targetPoint" />
<mxPoint x="-680" y="-20" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-43" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-2" target="fY-Wzga6seKQwhded4A5-42">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-2" value="AccountHomePage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/account&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-600" y="-40" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-3" target="Fk8QGSgGJ1bhqam2HO4i-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-3" value="BandsPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/bands&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-600" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-4" value="PreferencesPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/preferences&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-600" y="600" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-5" target="fY-Wzga6seKQwhded4A5-5">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-280" y="330" />
<mxPoint x="-280" y="330" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-5" value="BandDetailPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/bands/detail/:bandName&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-360" y="280" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;dashed=1;fillColor=#e51400;strokeColor=#B20000;" edge="1" parent="1" target="Fk8QGSgGJ1bhqam2HO4i-7">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-200" y="-220" as="targetPoint" />
<mxPoint x="-680" y="-20" as="sourcePoint" />
<Array as="points">
<mxPoint x="-680" y="140" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-7" value="LoginPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/account/login&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-360" y="120" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-8" value="AccountData&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/account/data&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-360" y="40" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-9" value="OrdersPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/account/orders&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-360" y="-40" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-13" value="AdminHome&lt;span style=&quot;background-color: initial;&quot;&gt;Page&lt;/span&gt;&lt;div&gt;&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/admin&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-600" y="760" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-14" value="HelpPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/help&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-600" y="680" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-15" target="Fk8QGSgGJ1bhqam2HO4i-16">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-15" value="LocationsPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/locations&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-600" y="440" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="Fk8QGSgGJ1bhqam2HO4i-16" target="fY-Wzga6seKQwhded4A5-5">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-280" y="420" />
<mxPoint x="-280" y="420" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Fk8QGSgGJ1bhqam2HO4i-16" value="LocationsDetailPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/locations/detail/:name&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-360" y="440" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="fY-Wzga6seKQwhded4A5-1" target="fY-Wzga6seKQwhded4A5-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-1" value="ConcertsPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/concerts&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-600" y="360" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-3" value="if logged in" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="-680" y="-60" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-4" value="else" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="-690" y="110" width="80" height="30" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="fY-Wzga6seKQwhded4A5-5" target="fY-Wzga6seKQwhded4A5-7">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-160" y="380" />
<mxPoint x="-160" y="540" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-5" value="ConcertsBookingPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/concerts/booking/:id&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-360" y="360" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-7" value="BasketPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/basket&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-600" y="520" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="fY-Wzga6seKQwhded4A5-8" target="Fk8QGSgGJ1bhqam2HO4i-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="fY-Wzga6seKQwhded4A5-8" target="fY-Wzga6seKQwhded4A5-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="fY-Wzga6seKQwhded4A5-8" target="Fk8QGSgGJ1bhqam2HO4i-16">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-8" value="SearchPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/search&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-600" y="200" width="160" height="40" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-14" value="if ticket add to basket" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="-290" y="510" width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-29" value="on log out" style="text;strokeColor=none;align=center;fillColor=none;html=1;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="-460" y="90" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="fY-Wzga6seKQwhded4A5-42" value="AccountRatingsPage&lt;div&gt;&lt;b style=&quot;font-family: &amp;quot;Courier New&amp;quot;;&quot;&gt;&lt;font style=&quot;font-size: 10px;&quot;&gt;/account/ratings&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-360" y="-120" width="160" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -1,7 +1,6 @@
{ {
"data": [ "data": [
{ {
"id": 0,
"username": "hagemeister93", "username": "hagemeister93",
"password": "Xjt3qb5t", "password": "Xjt3qb5t",
"email": "hagemeister93@gmail.com", "email": "hagemeister93@gmail.com",
@@ -28,7 +27,6 @@
"accountRoleId": 2 "accountRoleId": 2
}, },
{ {
"id": 1,
"username": "katjaStoiber", "username": "katjaStoiber",
"password": "target123", "password": "target123",
"email": "k.stoiber@uni-hannover.de", "email": "k.stoiber@uni-hannover.de",
@@ -55,7 +53,6 @@
"accountRoleId": 1 "accountRoleId": 1
}, },
{ {
"id": 2,
"username": "oetkerohnek", "username": "oetkerohnek",
"password": "iloveyou", "password": "iloveyou",
"email": "oetker30625@gmx.com", "email": "oetker30625@gmx.com",
@@ -63,16 +60,12 @@
"lastName": "Oeter", "lastName": "Oeter",
"addresses": [ "addresses": [
{ {
"id": 2,
"accountId": 2,
"street": "Eckermannstraße", "street": "Eckermannstraße",
"houseNumber": 1, "houseNumber": 1,
"postalCode": 30625, "postalCode": 30625,
"city": "Hannover" "city": "Hannover"
}, },
{ {
"id": 3,
"accountId": 2,
"street": "Gehrdener Straße", "street": "Gehrdener Straße",
"houseNumber": 14, "houseNumber": 14,
"postalCode": 30459, "postalCode": 30459,
@@ -81,8 +74,6 @@
], ],
"payments": [ "payments": [
{ {
"id": 2,
"accountId": 2,
"bankName": "Commerzbank", "bankName": "Commerzbank",
"iban": "DE31500105175417833272" "iban": "DE31500105175417833272"
} }
@@ -90,7 +81,6 @@
"accountRoleId": 1 "accountRoleId": 1
}, },
{ {
"id": 3,
"username": "duranduran", "username": "duranduran",
"password": "H4nn0ver", "password": "H4nn0ver",
"email": "dduran@hannover.de", "email": "dduran@hannover.de",
@@ -98,16 +88,12 @@
"lastName": "Durand", "lastName": "Durand",
"addresses": [ "addresses": [
{ {
"id": 4,
"accountId": 3,
"street": "Schlägerstraße", "street": "Schlägerstraße",
"houseNumber": 36, "houseNumber": 36,
"postalCode": 30171, "postalCode": 30171,
"city": "Hannover" "city": "Hannover"
}, },
{ {
"id": 5,
"accountId": 3,
"street": "Else-Ury-Weg", "street": "Else-Ury-Weg",
"houseNumber": 20, "houseNumber": 20,
"postalCode": 30629, "postalCode": 30629,
@@ -116,8 +102,6 @@
], ],
"payments": [ "payments": [
{ {
"id": 3,
"accountId": 3,
"bankName": "ING", "bankName": "ING",
"iban": "DE41500105172184936679" "iban": "DE41500105172184936679"
} }
@@ -125,7 +109,6 @@
"accountRoleId": 2 "accountRoleId": 2
}, },
{ {
"id": 4,
"username": "guitarhero", "username": "guitarhero",
"password": "gwerty123", "password": "gwerty123",
"email": "guitarheroFurti@gmail.com", "email": "guitarheroFurti@gmail.com",
@@ -133,8 +116,6 @@
"lastName": "Furtwängler", "lastName": "Furtwängler",
"addresses": [ "addresses": [
{ {
"id": 6,
"accountId": 4,
"street": "Steinmetzstraße", "street": "Steinmetzstraße",
"houseNumber": 12, "houseNumber": 12,
"postalCode": 30163, "postalCode": 30163,
@@ -143,8 +124,6 @@
], ],
"payments": [ "payments": [
{ {
"id": 4,
"accountId": 4,
"bankName": "Sparkasse Hannover", "bankName": "Sparkasse Hannover",
"iban": "DE85500105172283979774" "iban": "DE85500105172283979774"
} }
@@ -152,7 +131,6 @@
"accountRoleId": 1 "accountRoleId": 1
}, },
{ {
"id": 5,
"username": "herbstMareike", "username": "herbstMareike",
"password": "qhsrbpgrs", "password": "qhsrbpgrs",
"email": "m.herbst@uni-hannover.de", "email": "m.herbst@uni-hannover.de",
@@ -160,8 +138,6 @@
"lastName": "Herbst", "lastName": "Herbst",
"addresses": [ "addresses": [
{ {
"id": 7,
"accountId": 5,
"street": "Allerweg", "street": "Allerweg",
"houseNumber": 33, "houseNumber": 33,
"postalCode": 30851, "postalCode": 30851,
@@ -170,8 +146,6 @@
], ],
"payments": [ "payments": [
{ {
"id": 5,
"accountId": 5,
"bankName": "Postbank", "bankName": "Postbank",
"iban": "DE45500105178862417577" "iban": "DE45500105178862417577"
} }
@@ -179,7 +153,6 @@
"accountRoleId": 1 "accountRoleId": 1
}, },
{ {
"id": 6,
"username": "seibertmitb", "username": "seibertmitb",
"password": "{jkz+WvQe", "password": "{jkz+WvQe",
"email": "janna-seibert@yahoo.com", "email": "janna-seibert@yahoo.com",
@@ -187,16 +160,12 @@
"lastName": "Seibert", "lastName": "Seibert",
"addresses": [ "addresses": [
{ {
"id": 8,
"accountId": 6,
"street": "Marktstraße", "street": "Marktstraße",
"houseNumber": 26, "houseNumber": 26,
"postalCode": 30880, "postalCode": 30880,
"city": "Laatzen" "city": "Laatzen"
}, },
{ {
"id": 9,
"accountId": 6,
"street": "Kleiner Hillen", "street": "Kleiner Hillen",
"houseNumber": 24, "houseNumber": 24,
"postalCode": 30559, "postalCode": 30559,
@@ -205,8 +174,6 @@
], ],
"payments": [ "payments": [
{ {
"id": 6,
"accountId": 6,
"bankName": "Sparkasse Hannover", "bankName": "Sparkasse Hannover",
"iban": "DE51500105177526222196" "iban": "DE51500105177526222196"
} }

View File

@@ -1,7 +1,6 @@
{ {
"data": [ "bands": [
{ {
"id": 0,
"name": "Red Hot Chili Peppers", "name": "Red Hot Chili Peppers",
"foundingYear": 1983, "foundingYear": 1983,
"descriptionEn": "The Red Hot Chili Peppers are an American rock band formed in Los Angeles in 1983, comprising vocalist Anthony Kiedis, bassist Flea, drummer Chad Smith, and guitarist John Frusciante. Their music incorporates elements of alternative rock, funk, punk rock, hard rock, hip hop, and psychedelic rock. Their eclectic range has influenced genres such as funk metal, rap metal, rap rock, and nu metal. With over 120 million records sold worldwide, the Red Hot Chili Peppers are one of the top-selling bands of all time.", "descriptionEn": "The Red Hot Chili Peppers are an American rock band formed in Los Angeles in 1983, comprising vocalist Anthony Kiedis, bassist Flea, drummer Chad Smith, and guitarist John Frusciante. Their music incorporates elements of alternative rock, funk, punk rock, hard rock, hip hop, and psychedelic rock. Their eclectic range has influenced genres such as funk metal, rap metal, rap rock, and nu metal. With over 120 million records sold worldwide, the Red Hot Chili Peppers are one of the top-selling bands of all time.",
@@ -14,73 +13,99 @@
], ],
"imageMembers": "bands/red-hot-chili-peppers-members.jpg", "imageMembers": "bands/red-hot-chili-peppers-members.jpg",
"logo": "bands/red-hot-chili-peppers-logo.png", "logo": "bands/red-hot-chili-peppers-logo.png",
"genreId": [ "genres": [
0, "Funk Rock",
2, "Alternative Rock",
3 "Crossover"
], ],
"members": [ "members": [
{ {
"name": "Anthony Kiedis", "name": "Anthony Kiedis",
"bandId": 0,
"image": "artists/anthony-kiedis.jpg" "image": "artists/anthony-kiedis.jpg"
}, },
{ {
"name": "Flea", "name": "Flea",
"bandId": 0,
"image": "artists/flea.jpg" "image": "artists/flea.jpg"
}, },
{ {
"name": "Chad Smith", "name": "Chad Smith",
"bandId": 0,
"image": "artists/chad-smith.jpg" "image": "artists/chad-smith.jpg"
}, },
{ {
"name": "John Frusciante", "name": "John Frusciante",
"bandId": 0,
"image": "artists/john-frusciante.jpg" "image": "artists/john-frusciante.jpg"
} }
], ],
"ratings": [ "ratings": [
{ {
"accountId": 0, "username": "hagemeister93",
"rating": 5, "rating": 5
"bandId": 0
}, },
{ {
"accountId": 1, "username": "katjaStoiber",
"rating": 5, "rating": 5
"bandId": 0
}, },
{ {
"accountId": 2, "username": "oetkerohnek",
"rating": 4, "rating": 4
"bandId": 0
}, },
{ {
"accountId": 3, "username": "duranduran",
"rating": 3, "rating": 3
"bandId": 0
}, },
{ {
"accountId": 4, "username": "guitarhero",
"rating": 5, "rating": 5
"bandId": 0
}, },
{ {
"accountId": 5, "username": "herbstMareike",
"rating": 4, "rating": 4
"bandId": 0
}, },
{ {
"accountId": 6, "username": "seibertmitb",
"rating": 5, "rating": 5
"bandId": 0 }
],
"concertGroups": [
{
"name": "Unlimited Love",
"image": "events/unlimited-love-tour.jpg",
"concerts": [
{
"date": "2024-10-18",
"price": 92,
"inStock": 0,
"location": "Swiss Life Hall"
},
{
"date": "2024-10-19",
"price": 92,
"inStock": 170,
"location": "Swiss Life Hall"
},
{
"date": "2024-10-23",
"price": 119.90,
"inStock": 8736,
"location": "Olympiahalle München"
},
{
"date": "2024-10-26",
"price": 114.90,
"inStock": 2793,
"location": "Barclays Arena"
},
{
"date": "2024-11-02",
"price": 124.90,
"inStock": 3079,
"location": "Uber Arena Berlin"
}
]
} }
] ]
}, },
{ {
"id": 1,
"name": "Radiohead", "name": "Radiohead",
"foundingYear": 1985, "foundingYear": 1985,
"descriptionEn": "Radiohead are an English rock band formed in Abingdon, Oxfordshire, in 1985. They comprise Thom Yorke (vocals, guitar, piano, keyboards); brothers Jonny Greenwood (guitar, keyboards, other instruments) and Colin Greenwood (bass); Ed O'Brien (guitar, backing vocals); and Philip Selway (drums, percussion). They have worked with the producer Nigel Godrich and the cover artist Stanley Donwood since 1994. Radiohead's experimental approach is credited with advancing the sound of alternative rock.", "descriptionEn": "Radiohead are an English rock band formed in Abingdon, Oxfordshire, in 1985. They comprise Thom Yorke (vocals, guitar, piano, keyboards); brothers Jonny Greenwood (guitar, keyboards, other instruments) and Colin Greenwood (bass); Ed O'Brien (guitar, backing vocals); and Philip Selway (drums, percussion). They have worked with the producer Nigel Godrich and the cover artist Stanley Donwood since 1994. Radiohead's experimental approach is credited with advancing the sound of alternative rock.",
@@ -92,55 +117,73 @@
], ],
"imageMembers": "bands/radiohead-members.jpg", "imageMembers": "bands/radiohead-members.jpg",
"logo": "bands/radiohead-logo.jpg", "logo": "bands/radiohead-logo.jpg",
"genreId": [ "genres": [
1, "Art Rock",
2, "Alternative Rock",
4, "Electronica",
5, "Post-Rock",
6 "Britpop"
], ],
"members": [ "members": [
{ {
"name": "Thom Yorke", "name": "Thom Yorke",
"bandId": 1,
"image": "artists/thom-yorke.jpg" "image": "artists/thom-yorke.jpg"
}, },
{ {
"name": "Jonny Greenwood", "name": "Jonny Greenwood",
"bandId": 1,
"image": "artists/jonny-greenwood.jpg" "image": "artists/jonny-greenwood.jpg"
}, },
{ {
"name": "Colin Greenwood", "name": "Colin Greenwood",
"bandId": 1,
"image": "artists/colin-greenwood.jpg" "image": "artists/colin-greenwood.jpg"
}, },
{ {
"name": "Ed O'Brien", "name": "Ed O'Brien",
"bandId": 1,
"image": "artists/ed-o-brien.jpg" "image": "artists/ed-o-brien.jpg"
}, },
{ {
"name": "Philip Selway", "name": "Philip Selway",
"bandId": 1,
"image": "artists/philip-selway.jpg" "image": "artists/philip-selway.jpg"
} }
], ],
"ratings": [ "ratings": [
{ {
"accountId": 0, "username": "hagemeister93",
"rating": 5, "rating": 5
"bandId": 1
}, },
{ {
"accountId": 1, "username": "katjaStoiber",
"rating": 4, "rating": 4
"bandId": 1 }
],
"concertGroups": [
{
"name": "The Bends",
"image": "events/the-bends-tour.jpg",
"concerts": [
{
"date": "2024-11-30",
"price": 108,
"inStock": 1200,
"location": "Capitol"
},
{
"date": "2024-12-01",
"price": 104,
"inStock": 1800,
"location": "Schlachthof München"
},
{
"date": "2024-12-07",
"price": 99.90,
"inStock": 2438,
"location": "Waldbühne Berlin"
}
]
} }
] ]
}, },
{ {
"id": 2,
"name": "Arctic Monkeys", "name": "Arctic Monkeys",
"foundingYear": 2002, "foundingYear": 2002,
"descriptionEn": "Arctic Monkeys are an English rock band formed in Sheffield in 2002. The group consists of lead singer Alex Turner, drummer Matt Helders, guitarist Jamie Cook and bassist Nick O'Malley. Former bassist Andy Nicholson left the band in 2006 shortly after their debut album, Whatever People Say I Am, That's What I'm Not, was released.", "descriptionEn": "Arctic Monkeys are an English rock band formed in Sheffield in 2002. The group consists of lead singer Alex Turner, drummer Matt Helders, guitarist Jamie Cook and bassist Nick O'Malley. Former bassist Andy Nicholson left the band in 2006 shortly after their debut album, Whatever People Say I Am, That's What I'm Not, was released.",
@@ -152,58 +195,69 @@
], ],
"imageMembers": "bands/arctic-monkeys-members.jpg", "imageMembers": "bands/arctic-monkeys-members.jpg",
"logo": "bands/arctic-monkeys-logo.png", "logo": "bands/arctic-monkeys-logo.png",
"genreId": [ "genres": [
2, "Alternative Rock",
7, "Post-Punk",
8 "Garage Rock"
], ],
"members": [ "members": [
{ {
"name": "Glyn Jones", "name": "Glyn Jones",
"bandId": 2,
"image": "artists/glyn-jones.jpg" "image": "artists/glyn-jones.jpg"
}, },
{ {
"name": "Alex Turner", "name": "Alex Turner",
"bandId": 2,
"image": "artists/alex-turner.jpg" "image": "artists/alex-turner.jpg"
}, },
{ {
"name": "Jamie Cook", "name": "Jamie Cook",
"bandId": 2,
"image": "artists/jamie-cook.jpg" "image": "artists/jamie-cook.jpg"
}, },
{ {
"name": "Matt Helders", "name": "Matt Helders",
"bandId": 2,
"image": "artists/matt-helders.jpg" "image": "artists/matt-helders.jpg"
}, },
{ {
"name": "Andy Nicholson", "name": "Andy Nicholson",
"bandId": 2,
"image": "artists/andy-nicholson.jpg" "image": "artists/andy-nicholson.jpg"
} }
], ],
"ratings": [ "ratings": [
{ {
"accountId": 0, "username": "hagemeister93",
"rating": 5, "rating": 5
"bandId": 2
}, },
{ {
"accountId": 1, "username": "katjaStoiber",
"rating": 3, "rating": 3
"bandId": 2
}, },
{ {
"accountId": 2, "username": "oetkerohnek",
"rating": 4, "rating": 4
"bandId": 2 }
],
"concertGroups":[
{
"name": "European Tour",
"image": "events/european-tour-arctic-monkeys.jpg",
"concerts": [
{
"date": "2025-01-21",
"price": 67.90,
"inStock": 994,
"location": "Kulturzentrum Faust"
},
{
"date": "2024-11-15",
"price": 79.90,
"inStock": 1073,
"location": "LANXESS arena"
}
]
} }
] ]
}, },
{ {
"id": 3,
"name": "Coldplay", "name": "Coldplay",
"foundingYear": 1997, "foundingYear": 1997,
"descriptionEn": "Coldplay are a British rock band formed in London in 1997. They consist of vocalist and pianist Chris Martin, guitarist Jonny Buckland, bassist Guy Berryman, drummer and percussionist Will Champion, and manager Phil Harvey. They are best known for their live performances, and for impacting popular culture through their artistry, advocacy and achievements.", "descriptionEn": "Coldplay are a British rock band formed in London in 1997. They consist of vocalist and pianist Chris Martin, guitarist Jonny Buckland, bassist Guy Berryman, drummer and percussionist Will Champion, and manager Phil Harvey. They are best known for their live performances, and for impacting popular culture through their artistry, advocacy and achievements.",
@@ -215,52 +269,70 @@
], ],
"imageMembers": "bands/coldplay-members.jpg", "imageMembers": "bands/coldplay-members.jpg",
"logo": "bands/coldplay-logo.jpg", "logo": "bands/coldplay-logo.jpg",
"genreId": [ "genres": [
2, "Alternative Rock",
9 "Pop-Rock"
], ],
"members": [ "members": [
{ {
"name": "Chris Martin", "name": "Chris Martin",
"bandId": 3,
"image": "artists/chris-martin.jpg" "image": "artists/chris-martin.jpg"
}, },
{ {
"name": "Jonny Buckland", "name": "Jonny Buckland",
"bandId": 3,
"image": "artists/jonny-buckland.jpg" "image": "artists/jonny-buckland.jpg"
}, },
{ {
"name": "Guy Berryman", "name": "Guy Berryman",
"bandId": 3,
"image": "artists/guy-berryman.jpg" "image": "artists/guy-berryman.jpg"
}, },
{ {
"name": "Will Champion", "name": "Will Champion",
"bandId": 3,
"image": "artists/will-champion.jpg" "image": "artists/will-champion.jpg"
}, },
{ {
"name": "Phil Harvey", "name": "Phil Harvey",
"bandId": 3,
"image": "artists/phil-harvey.png" "image": "artists/phil-harvey.png"
} }
], ],
"ratings": [ "ratings": [
{ {
"accountId": 0, "username": "hagemeister93",
"rating": 5, "rating": 5
"bandId": 3
}, },
{ {
"accountId": 1, "username": "katjaStoiber",
"rating": 4, "rating": 4
"bandId": 3 }
],
"concertGroups": [
{
"name": "Music of the Spheres",
"image": "events/music-of-the-spheres.png",
"concerts": [
{
"date": "2024-12-07",
"price": 124.90,
"inStock": 765,
"location": "Astra Kulturhaus"
},
{
"date": "2025-01-17",
"price": 129.90,
"inStock": 989,
"location": "Waldbühne Berlin"
},
{
"date": "2025-02-01",
"price": 134.90,
"inStock": 827,
"location": "Olympiahalle München"
}
]
} }
] ]
}, },
{ {
"id": 4,
"name": "Foo Fighters", "name": "Foo Fighters",
"foundingYear": 1994, "foundingYear": 1994,
"descriptionEn": "Foo Fighters is an American rock band formed in Seattle in 1994. Founded as a one-man project by former Nirvana drummer Dave Grohl, the lineup now consists of Grohl (lead vocals, guitar), Nate Mendel (bass), Chris Shiflett and Pat Smear (guitars), Rami Jaffee (keyboards), and Josh Freese (drums). Drummers William Goldsmith and Taylor Hawkins, along with guitarist Franz Stahl, are former members of the band.", "descriptionEn": "Foo Fighters is an American rock band formed in Seattle in 1994. Founded as a one-man project by former Nirvana drummer Dave Grohl, the lineup now consists of Grohl (lead vocals, guitar), Nate Mendel (bass), Chris Shiflett and Pat Smear (guitars), Rami Jaffee (keyboards), and Josh Freese (drums). Drummers William Goldsmith and Taylor Hawkins, along with guitarist Franz Stahl, are former members of the band.",
@@ -272,52 +344,58 @@
], ],
"imageMembers": "bands/foo-fighters-members.jpg", "imageMembers": "bands/foo-fighters-members.jpg",
"logo": "bands/foo-fighters-logo.png", "logo": "bands/foo-fighters-logo.png",
"genreId": [ "genres": [
2, "Alternative Rock",
10 "Post-Grunge"
], ],
"members": [ "members": [
{ {
"name": "Dave Grohl", "name": "Dave Grohl",
"bandId": 4,
"image": "artists/dave-grohl.jpg" "image": "artists/dave-grohl.jpg"
}, },
{ {
"name": "Pat Smear", "name": "Pat Smear",
"bandId": 4,
"image": "artists/pat-smear.jpg" "image": "artists/pat-smear.jpg"
}, },
{ {
"name": "Nate Mendel", "name": "Nate Mendel",
"bandId": 4,
"image": "artists/nate-mendel.jpg" "image": "artists/nate-mendel.jpg"
}, },
{ {
"name": "Chris Shiflett", "name": "Chris Shiflett",
"bandId": 4,
"image": "artists/chris-shiflett.jpg" "image": "artists/chris-shiflett.jpg"
}, },
{ {
"name": "Rami Jaffee", "name": "Rami Jaffee",
"bandId": 4,
"image": "artists/rami-jaffee.jpg" "image": "artists/rami-jaffee.jpg"
}, },
{ {
"name": "Josh Freese", "name": "Josh Freese",
"bandId": 4,
"image": "artists/josh-freese.jpg" "image": "artists/josh-freese.jpg"
} }
], ],
"ratings": [ "ratings": [
{ {
"accountId": 0, "username": "hagemeister93",
"rating": 5, "rating": 5
"bandId": 4 }
],
"concertGroups": [
{
"name": "But Here We Are Tour",
"image": "events/but-here-we-are.jpg",
"concerts": [
{
"date": "2024-12-05",
"price": 80,
"inStock": 99,
"location": "ZAG Arena"
}
]
} }
] ]
}, },
{ {
"id": 5,
"name": "Billy Talent", "name": "Billy Talent",
"foundingYear": 1993, "foundingYear": 1993,
"descriptionEn": "Billy Talent is a Canadian rock band from Mississauga, Ontario. They formed in 1993 with lead vocalist Benjamin Kowalewicz, guitarist Ian D'Sa, bassist Jonathan Gallant, and drummer Aaron Solowoniuk. There have been no lineup changes, although Solowoniuk has been on hiatus from the band since 2016 due to a relapse of multiple sclerosis. In the three decades since their inception, Billy Talent has sold well over a million physical albums in Canada alone and nearly 3 million albums internationally. During their most successful period, they were ranked as one of the top 10 best-selling native bands in Canada.", "descriptionEn": "Billy Talent is a Canadian rock band from Mississauga, Ontario. They formed in 1993 with lead vocalist Benjamin Kowalewicz, guitarist Ian D'Sa, bassist Jonathan Gallant, and drummer Aaron Solowoniuk. There have been no lineup changes, although Solowoniuk has been on hiatus from the band since 2016 due to a relapse of multiple sclerosis. In the three decades since their inception, Billy Talent has sold well over a million physical albums in Canada alone and nearly 3 million albums internationally. During their most successful period, they were ranked as one of the top 10 best-selling native bands in Canada.",
@@ -329,59 +407,70 @@
], ],
"imageMembers": "bands/billy-talent-members.jpg", "imageMembers": "bands/billy-talent-members.jpg",
"logo": "bands/billy-talent-logo.png", "logo": "bands/billy-talent-logo.png",
"genreId": [ "genres": [
2, "Alternative Rock",
11, "Punk-Rock",
12, "Post-Hardcore",
13 "Pop-Punk"
], ],
"members": [ "members": [
{ {
"name": "Benjamin Kowalewicz", "name": "Benjamin Kowalewicz",
"bandId": 5,
"image": "benjamin-kowalewicz.jpg" "image": "benjamin-kowalewicz.jpg"
}, },
{ {
"name": "Ian D'Sa ", "name": "Ian D'Sa ",
"bandId": 5,
"image": "artists/ian-d-sa.jpg" "image": "artists/ian-d-sa.jpg"
}, },
{ {
"name": "Jonathan Gallant", "name": "Jonathan Gallant",
"bandId": 5,
"image": "artists/jonathan-gallant.jpg" "image": "artists/jonathan-gallant.jpg"
}, },
{ {
"name": "Jordan Hastings", "name": "Jordan Hastings",
"bandId": 5,
"image": "artists/jordan-hastings.jpg" "image": "artists/jordan-hastings.jpg"
}, },
{ {
"name": "Josh Freese", "name": "Josh Freese",
"bandId": 5,
"image": "artists/josh-freese.jpg" "image": "artists/josh-freese.jpg"
} }
], ],
"ratings": [ "ratings": [
{ {
"accountId": 0, "username": "hagemeister93",
"rating": 5, "rating": 5
"bandId": 5
}, },
{ {
"accountId": 1, "username": "katjaStoiber",
"rating": 3, "rating": 3
"bandId": 5
}, },
{ {
"accountId": 2, "username": "oetkerohnek",
"rating": 4, "rating": 4
"bandId": 5 }
],
"concertGroups": [
{
"name": "Crisis of Faith",
"image": "events/crisis-of-faith-tour.jpg",
"concerts": [
{
"date": "2025-01-12",
"price": 81.90,
"inStock": 173,
"location": "ZAG Arena"
},
{
"date": "2025-02-01",
"price": 84.90,
"inStock": 192,
"location": "Muffatwerk"
}
]
} }
] ]
}, },
{ {
"id": 6,
"name": "Royal Blood", "name": "Royal Blood",
"foundingYear": 2013, "foundingYear": 2013,
"descriptionEn": "Royal Blood are an English rock duo formed in Littlehampton in 2011. The current lineup consists of Mike Kerr (vocals, bass guitar, piano) and Ben Thatcher (drums). Their signature sound is built around Kerr's bass playing style, which sees him using various effects pedals and amps to make his bass guitar sound like an electric guitar and bass guitar at the same time. The duo were signed by Warner Chappell Music in 2013 and have since released four studio albums: Royal Blood (2014), How Did We Get So Dark? (2017), Typhoons (2021), and Back to the Water Below (2023).", "descriptionEn": "Royal Blood are an English rock duo formed in Littlehampton in 2011. The current lineup consists of Mike Kerr (vocals, bass guitar, piano) and Ben Thatcher (drums). Their signature sound is built around Kerr's bass playing style, which sees him using various effects pedals and amps to make his bass guitar sound like an electric guitar and bass guitar at the same time. The duo were signed by Warner Chappell Music in 2013 and have since released four studio albums: Royal Blood (2014), How Did We Get So Dark? (2017), Typhoons (2021), and Back to the Water Below (2023).",
@@ -393,42 +482,56 @@
], ],
"imageMembers": "bands/royal-blood-members.jpg", "imageMembers": "bands/royal-blood-members.jpg",
"logo": "bands/royal-blood-logo.jpg", "logo": "bands/royal-blood-logo.jpg",
"genreId": [ "genres": [
8, "Garage Rock",
14 "Bluesrock"
], ],
"members": [ "members": [
{ {
"name": "Mike Kerr", "name": "Mike Kerr",
"bandId": 6,
"image": "artists/mike-kerr.jpg" "image": "artists/mike-kerr.jpg"
}, },
{ {
"name": "Ben Thatcher", "name": "Ben Thatcher",
"bandId": 6,
"image": "artists/ben-thatcher.jpg" "image": "artists/ben-thatcher.jpg"
} }
], ],
"ratings": [ "ratings": [
{ {
"accountId": 0, "username": "hagemeister93",
"rating": 5, "rating": 5
"bandId": 6
}, },
{ {
"accountId": 1, "username": "katjaStoiber",
"rating": 4, "rating": 4
"bandId": 6
}, },
{ {
"accountId": 2, "username": "oetkerohnek",
"rating": 4, "rating": 4
"bandId": 6 }
],
"concertGroups": [
{
"name": "Back to the Water Below",
"image": "events/back-to-the-water-below.jpg",
"concerts": [
{
"date": "2025-02-27",
"price": 67.90,
"inStock": 847,
"location": "Kulturzentrum Faust"
},
{
"date": "2025-03-06",
"price": 64.90,
"inStock": 245,
"location": "Waldbühne Berlin"
}
]
} }
] ]
}, },
{ {
"id": 7,
"name": "Muse", "name": "Muse",
"foundingYear": 1994, "foundingYear": 1994,
"descriptionEn": "Muse are an English rock band from Teignmouth, Devon, formed in 1994. The band consists of Matt Bellamy (lead vocals, guitar, keyboards), Chris Wolstenholme (bass guitar, backing vocals), and Dominic Howard (drums, percussion).", "descriptionEn": "Muse are an English rock band from Teignmouth, Devon, formed in 1994. The band consists of Matt Bellamy (lead vocals, guitar, keyboards), Chris Wolstenholme (bass guitar, backing vocals), and Dominic Howard (drums, percussion).",
@@ -440,43 +543,69 @@
], ],
"imageMembers": "bands/muse-members.jpg", "imageMembers": "bands/muse-members.jpg",
"logo": "bands/muse-logo.jpg", "logo": "bands/muse-logo.jpg",
"genreId": [ "genres": [
2, "Alternative Rock",
15, "New Prog",
16 "Hard Rock"
], ],
"members": [ "members": [
{ {
"name": "Matthew Bellamy", "name": "Matthew Bellamy",
"bandId": 7,
"image": "artists/matthew-bellamy.jpg" "image": "artists/matthew-bellamy.jpg"
}, },
{ {
"name": "Dominic Howard", "name": "Dominic Howard",
"bandId": 7,
"image": "artists/dominic-howard.jpg" "image": "artists/dominic-howard.jpg"
}, },
{ {
"name": "Chris Wolstenholme", "name": "Chris Wolstenholme",
"bandId": 7,
"image": "artists/chris-wolstenholme.jpg" "image": "artists/chris-wolstenholme.jpg"
} }
], ],
"ratings": [ "ratings": [
{ {
"accountId": 0, "username": "hagemeister93",
"rating": 5, "rating": 5
"bandId": 7
}, },
{ {
"accountId": 1, "username": "katjaStoiber",
"rating": 4, "rating": 4
"bandId": 7
}, },
{ {
"accountId": 2, "username": "oetkerohnek",
"rating": 4, "rating": 4
"bandId": 7 }
],
"concertGroups": [
{
"name": "Will of the People Tour",
"image": "events/will-of-the-people-tour.jpg",
"concerts": [
{
"date": "2025-01-15",
"price": 67.90,
"inStock": 847,
"location": "ZAG Arena"
},
{
"date": "2025-01-23",
"price": 64.90,
"inStock": 245,
"location": "Olympiastadion Berlin"
},
{
"date": "2025-02-02",
"price": 64.90,
"inStock": 245,
"location": "Astra Kulturhaus"
},
{
"date": "2025-02-05",
"price": 64.90,
"inStock": 245,
"location": "Astra Kulturhaus"
}
]
} }
] ]
} }

View File

@@ -5,7 +5,6 @@
"country": "Germany", "country": "Germany",
"locations": [ "locations": [
{ {
"id": 0,
"name": "Swiss Life Hall", "name": "Swiss Life Hall",
"address": "Ferdinand-Wilhelm-Fricke-Weg 8", "address": "Ferdinand-Wilhelm-Fricke-Weg 8",
"imageIndoor": "locations/swiss-life-hall-indoor.jpg", "imageIndoor": "locations/swiss-life-hall-indoor.jpg",
@@ -56,7 +55,6 @@
] ]
}, },
{ {
"id": 1,
"name": "Capitol", "name": "Capitol",
"address": "Schwarzer Bär 2", "address": "Schwarzer Bär 2",
"imageIndoor": "locations/capitol-indoor.jpg", "imageIndoor": "locations/capitol-indoor.jpg",
@@ -72,7 +70,6 @@
] ]
}, },
{ {
"id": 2,
"name": "ZAG Arena", "name": "ZAG Arena",
"address": "EXPO-Plaza 7", "address": "EXPO-Plaza 7",
"imageIndoor": "locations/zag-arena-indoor.jpg", "imageIndoor": "locations/zag-arena-indoor.jpg",
@@ -144,7 +141,6 @@
] ]
}, },
{ {
"id": 3,
"name": "Kulturzentrum Faust", "name": "Kulturzentrum Faust",
"address": "Zur Bettfedernfabrik 3", "address": "Zur Bettfedernfabrik 3",
"imageIndoor": "locations/faust-hannover-indoor.jpg", "imageIndoor": "locations/faust-hannover-indoor.jpg",
@@ -166,7 +162,6 @@
"country": "Germany", "country": "Germany",
"locations": [ "locations": [
{ {
"id": 4,
"name": "Olympiahalle München", "name": "Olympiahalle München",
"address": "Spiridon-Louis-Ring 21", "address": "Spiridon-Louis-Ring 21",
"imageIndoor": "locations/olympiahalle-munich-indoor.jpg", "imageIndoor": "locations/olympiahalle-munich-indoor.jpg",
@@ -217,7 +212,6 @@
] ]
}, },
{ {
"id": 5,
"name": "Schlachthof München", "name": "Schlachthof München",
"address": "Zenettistraße 9", "address": "Zenettistraße 9",
"imageIndoor": "locations/schlachthof-munich-indoor.jpg", "imageIndoor": "locations/schlachthof-munich-indoor.jpg",
@@ -233,7 +227,6 @@
] ]
}, },
{ {
"id": 6,
"name": "Muffatwerk", "name": "Muffatwerk",
"address": "Zellstraße 4", "address": "Zellstraße 4",
"imageIndoor": "locations/muffatwerk-indoor.jpg", "imageIndoor": "locations/muffatwerk-indoor.jpg",
@@ -255,7 +248,6 @@
"country": "Germany", "country": "Germany",
"locations": [ "locations": [
{ {
"id": 7,
"name": "Volksparkstadion", "name": "Volksparkstadion",
"address": "Sylvesterallee 7", "address": "Sylvesterallee 7",
"imageIndoor": "locations/volksparkstadion-hamburg-indoor.jpg", "imageIndoor": "locations/volksparkstadion-hamburg-indoor.jpg",
@@ -327,7 +319,6 @@
] ]
}, },
{ {
"id": 8,
"name": "Barclays Arena", "name": "Barclays Arena",
"address": "Sylvesterallee 10", "address": "Sylvesterallee 10",
"imageIndoor": "locations/barclays-arena-indoor.jpg", "imageIndoor": "locations/barclays-arena-indoor.jpg",
@@ -363,7 +354,6 @@
"country": "Germany", "country": "Germany",
"locations": [ "locations": [
{ {
"id": 9,
"name": "Waldbühne Berlin", "name": "Waldbühne Berlin",
"address": "Am Glockenturm", "address": "Am Glockenturm",
"imageIndoor": "locations/waldbuehne-berlin-indoor.jpg", "imageIndoor": "locations/waldbuehne-berlin-indoor.jpg",
@@ -393,7 +383,6 @@
] ]
}, },
{ {
"id": 10,
"name": "Olympiastadion Berlin", "name": "Olympiastadion Berlin",
"address": "Olympischer Platz 3", "address": "Olympischer Platz 3",
"imageIndoor": "locations/olympiastadion-berlin-indoor.jpg", "imageIndoor": "locations/olympiastadion-berlin-indoor.jpg",
@@ -444,7 +433,6 @@
] ]
}, },
{ {
"id": 11,
"name": "Uber Arena Berlin", "name": "Uber Arena Berlin",
"address": "Uber-Platz 1", "address": "Uber-Platz 1",
"imageIndoor": "locations/uber-arena-berlin-indoor.jpg", "imageIndoor": "locations/uber-arena-berlin-indoor.jpg",
@@ -495,7 +483,6 @@
] ]
}, },
{ {
"id": 12,
"name": "Columbiahalle", "name": "Columbiahalle",
"address": "Columbiadamm 13-21", "address": "Columbiadamm 13-21",
"imageIndoor": "locations/columbiahalle-indoor.jpg", "imageIndoor": "locations/columbiahalle-indoor.jpg",
@@ -525,7 +512,6 @@
] ]
}, },
{ {
"id": 13,
"name": "Astra Kulturhaus", "name": "Astra Kulturhaus",
"address": "Revaler Straße 99", "address": "Revaler Straße 99",
"imageIndoor": "locations/astra-kulturhaus-indoor.jpg", "imageIndoor": "locations/astra-kulturhaus-indoor.jpg",
@@ -547,7 +533,6 @@
"country": "Germany", "country": "Germany",
"locations": [ "locations": [
{ {
"id": 14,
"name": "LANXESS arena", "name": "LANXESS arena",
"address": "Willy-Brandt-Platz", "address": "Willy-Brandt-Platz",
"imageIndoor": "locations/lanxess-arena-indoor.jpg", "imageIndoor": "locations/lanxess-arena-indoor.jpg",
@@ -598,7 +583,6 @@
] ]
}, },
{ {
"id": 15,
"name": "Palladium", "name": "Palladium",
"address": "Schanzenstraße 40", "address": "Schanzenstraße 40",
"imageIndoor": "locations/palladium-indoor.jpg", "imageIndoor": "locations/palladium-indoor.jpg",
@@ -614,7 +598,6 @@
] ]
}, },
{ {
"id": 16,
"name": "E-Werk", "name": "E-Werk",
"address": "Schanzenstraße 37", "address": "Schanzenstraße 37",
"imageIndoor": "locations/e-werk-indoor.jpg", "imageIndoor": "locations/e-werk-indoor.jpg",

View File

@@ -1,230 +0,0 @@
{
"data": [
{
"id": 0,
"name": "Unlimited Love",
"bandId": 0,
"offered": true,
"image": "events/unlimited-love-tour.jpg",
"concerts": [
{
"id": 0,
"date": "2024-10-18",
"price": 92,
"inStock": 0,
"locationId": 0
},
{
"id": 1,
"date": "2024-10-19",
"price": 92,
"inStock": 170,
"locationId": 0
},
{
"id": 2,
"date": "2024-10-23",
"price": 119.90,
"inStock": 8736,
"locationId": 4
},
{
"id": 3,
"date": "2024-10-26",
"price": 114.90,
"inStock": 2793,
"locationId": 8
},
{
"id": 4,
"date": "2024-11-02",
"price": 124.90,
"inStock": 3079,
"locationId": 12
}
]
},
{
"id": 1,
"name": "The Bends",
"bandId": 1,
"offered": true,
"image": "events/the-bends-tour.jpg",
"concerts": [
{
"id": 5,
"date": "2024-11-30",
"price": 108,
"inStock": 1200,
"locationId": 1
},
{
"id": 6,
"date": "2024-12-01",
"price": 104,
"inStock": 1800,
"locationId": 5
},
{
"id": 7,
"date": "2024-12-07",
"price": 99.90,
"inStock": 2438,
"locationId": 9
}
]
},
{
"id": 2,
"name": "European Tour",
"bandId": 2,
"offered": true,
"image": "events/european-tour-arctic-monkeys.jpg",
"concerts": [
{
"id": 8,
"date": "2025-01-21",
"price": 67.90,
"inStock": 994,
"locationId": 3
},
{
"id": 9,
"date": "2024-11-15",
"price": 79.90,
"inStock": 1073,
"locationId": 14
}
]
},
{
"id": 3,
"name": "Music of the Spheres",
"bandId": 3,
"offered": true,
"image": "events/music-of-the-spheres.png",
"concerts": [
{
"id": 10,
"date": "2024-12-07",
"price": 124.90,
"inStock": 765,
"locationId": 13
},
{
"id": 11,
"date": "2025-01-17",
"price": 129.90,
"inStock": 989,
"locationId": 9
},
{
"id": 12,
"date": "2025-02-01",
"price": 134.90,
"inStock": 827,
"locationId": 4
}
]
},
{
"id": 4,
"name": "But Here We Are Tour",
"bandId": 4,
"offered": true,
"image": "events/but-here-we-are.jpg",
"concerts": [
{
"id": 13,
"date": "2024-12-05",
"price": 80,
"inStock": 99,
"locationId": 2
}
]
},
{
"id": 5,
"name": "Crisis of Faith",
"bandId": 5,
"offered": true,
"image": "events/crisis-of-faith-tour.jpg",
"concerts": [
{
"id": 14,
"date": "2025-01-12",
"price": 81.90,
"inStock": 173,
"locationId": 2
},
{
"id": 15,
"date": "2025-02-01",
"price": 84.90,
"inStock": 192,
"locationId": 6
}
]
},
{
"id": 6,
"name": "Back to the Water Below",
"bandId": 6,
"offered": true,
"image": "events/back-to-the-water-below.jpg",
"concerts": [
{
"id": 16,
"date": "2025-02-27",
"price": 67.90,
"inStock": 847,
"locationId": 3
},
{
"id": 17,
"date": "2025-03-06",
"price": 64.90,
"inStock": 245,
"locationId": 9
}
]
},
{
"id": 7,
"name": "Will of the People Tour",
"bandId": 7,
"offered": true,
"image": "events/will-of-the-people-tour.jpg",
"concerts": [
{
"id": 18,
"date": "2025-01-15",
"price": 67.90,
"inStock": 847,
"locationId": 2
},
{
"id": 19,
"date": "2025-01-23",
"price": 64.90,
"inStock": 245,
"locationId": 10
},
{
"id": 20,
"date": "2025-02-02",
"price": 64.90,
"inStock": 245,
"locationId": 13
},
{
"id": 21,
"date": "2025-02-05",
"price": 64.90,
"inStock": 245,
"locationId": 13
}
]
}
]
}

View File

@@ -1,72 +0,0 @@
{
"data": [
{
"id": 0,
"name": "Funk Rock"
},
{
"id": 1,
"name": "Art Rock"
},
{
"id": 2,
"name": "Alternative Rock"
},
{
"id": 3,
"name": "Crossover"
},
{
"id": 4,
"name": "Electronica"
},
{
"id": 5,
"name": "Post-Rock"
},
{
"id": 6,
"name": "Britpop"
},
{
"id": 7,
"name": "Post-Punk"
},
{
"id": 8,
"name": "Garage Rock"
},
{
"id": 9,
"name": "Pop-Rock"
},
{
"id": 10,
"name": "Post-Grunge"
},
{
"id": 11,
"name": "Punk-Rock"
},
{
"id": 12,
"name": "Post-Hardcore"
},
{
"id": 13,
"name": "Pop-Punk"
},
{
"id": 14,
"name": "Bluesrock"
},
{
"id": 15,
"name": "New Prog"
},
{
"id": 16,
"name": "Hard Rock"
}
]
}

View File

@@ -1,8 +1,7 @@
{ {
"data": [ "data": [
{ {
"id": 0, "username": "hagemeister93",
"accountId": 0,
"shippingProgress": 4, "shippingProgress": 4,
"addressId": 0, "addressId": 0,
"paymentId": 0, "paymentId": 0,
@@ -17,8 +16,7 @@
] ]
}, },
{ {
"id": 1, "username": "duranduran",
"accountId": 3,
"shippingProgress": 5, "shippingProgress": 5,
"addressId": 4, "addressId": 4,
"paymentId": 3, "paymentId": 3,
@@ -40,8 +38,7 @@
] ]
}, },
{ {
"id": 2, "username": "duranduran",
"accountId": 3,
"shippingProgress": 2, "shippingProgress": 2,
"addressId": 5, "addressId": 5,
"paymentId": 3, "paymentId": 3,

View File

@@ -14,7 +14,6 @@ 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 { 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"
@@ -37,14 +36,14 @@ 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, Event, Concert, Genre, Band, BandGenre, Rating, Member, Concert,
Order, Ticket, Order, Ticket,
Exercise, ExerciseGroup Exercise, ExerciseGroup
] ]
}) })
export function startDatabase() { export function startDatabase() {
let recreateDb = false let recreateDb = true
// Create database and tables // Create database and tables
sequelize.sync({ force: recreateDb }) sequelize.sync({ force: recreateDb })

View File

@@ -2,8 +2,8 @@ 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 { Event } from "./event.model";
import { BandGenre } from "./bandGenre.model"; import { BandGenre } from "./bandGenre.model";
import { Concert } from "./concert.model";
@Table({ timestamps: false }) @Table({ timestamps: false })
export class Band extends Model { export class Band extends Model {
@@ -45,8 +45,8 @@ export class Band extends Model {
@HasMany(() => Rating) @HasMany(() => Rating)
ratings: Rating[] ratings: Rating[]
@HasMany(() => Event) @HasMany(() => Concert)
events: Event[] concerts: Concert[]
@BelongsToMany(() => Genre, () => BandGenre) @BelongsToMany(() => Genre, () => BandGenre)
genres: Genre[] genres: Genre[]

View File

@@ -1,33 +1,39 @@
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 { Event } from "./event.model";
import { Ticket } from "../ordering/ticket.model"; import { Ticket } from "../ordering/ticket.model";
import { Band } from "./band.model";
@Table({ timestamps: false }) @Table({ timestamps: false })
export class Concert extends Model { export class Concert extends Model {
@Column @Column
date: String date: String
@Column
name: String
@Column @Column
price: Number price: Number
@Column
image: String
@Column @Column
inStock: Number inStock: Number
@Column
offered: Boolean
@ForeignKey(() => Band)
@Column
bandId: Number
@ForeignKey(() => Location) @ForeignKey(() => Location)
@Column @Column
locationId: Number locationId: Number
@ForeignKey(() => Event)
@Column
eventId: Number
// Relations // Relations
@BelongsTo(() => Event)
event: Event
@BelongsTo(() => Location) @BelongsTo(() => Location)
location: Location location: Location

View File

@@ -1,27 +0,0 @@
import { BelongsTo, Column, ForeignKey, HasMany, Model, Table } from "sequelize-typescript";
import { Band } from "./band.model";
import { Concert } from "./concert.model";
@Table({ timestamps: false })
export class Event extends Model {
@Column
name: String
@ForeignKey(() => Band)
bandId: Number
@Column
offered: Boolean
@Column
image: String
// Relations
@BelongsTo(() => Band)
band: Band
@HasMany(() => Concert)
concerts: Concert[]
}

View File

@@ -3,7 +3,6 @@ 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 { 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,9 +26,6 @@ band.get("/", (req: Request, res: Response) => {
exclude: [ "id", "bandId" ] exclude: [ "id", "bandId" ]
} }
}, },
{
model: Event,
include: [
{ {
model: Concert, model: Concert,
include: [ include: [
@@ -44,11 +40,6 @@ band.get("/", (req: Request, res: Response) => {
attributes: { attributes: {
exclude: [ "id", "tourId", "locationId" ] exclude: [ "id", "tourId", "locationId" ]
} }
}
],
attributes: {
exclude: [ "id", "bandId" ]
}
}, },
Genre Genre
] ]
@@ -77,9 +68,6 @@ band.get("/band/:name", (req: Request, res: Response) => {
exclude: [ "bandId" ] exclude: [ "bandId" ]
} }
}, },
{
model: Event,
include: [
{ {
model: Concert, model: Concert,
include: [ include: [
@@ -94,11 +82,6 @@ band.get("/band/:name", (req: Request, res: Response) => {
attributes: { attributes: {
exclude: [ "tourId", "locationId" ] exclude: [ "tourId", "locationId" ]
} }
}
],
attributes: {
exclude: [ "bandId" ]
}
}, },
Genre Genre
], ],
@@ -120,17 +103,7 @@ band.get("/search", (req: Request, res: Response) => {
[Op.substring]: req.query.value [Op.substring]: req.query.value
}, },
}, },
include: [ include: [ Concert, Genre ]
{
model: Event,
include: [
Concert
]
},
{
model: Genre
}
]
}) })
.then(bands => { .then(bands => {
res.status(200).json(bands) res.status(200).json(bands)

View File

@@ -1,7 +1,6 @@
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 { Event } from "../models/acts/event.model";
import { City } from "../models/locations/city.model"; import { City } from "../models/locations/city.model";
import { SeatGroup } from "../models/locations/seatGroup.model"; import { SeatGroup } from "../models/locations/seatGroup.model";
import { SeatRow } from "../models/locations/seatRow.model"; import { SeatRow } from "../models/locations/seatRow.model";
@@ -16,12 +15,7 @@ concert.get("/concert/:id", (req: Request, res: Response) => {
Concert.findByPk(req.params.id, { Concert.findByPk(req.params.id, {
include: [ include: [
{ {
model: Event, model: Band,
include: [
{
model: Band
}
]
}, },
{ {
model: Location, model: Location,

View File

@@ -1,113 +0,0 @@
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";
import { Op } from "sequelize";
export const events = Router()
events.get("/", async (req: Request, res: Response) => {
let cityName = req.query.city
let genreName = req.query.genre
let sort = req.query.sort
let count = req.query.count
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,
required: true,
include: [
{
model: Location,
required: true,
include: [
cityFilter
]
}
],
},
{
model: Band,
required: true,
include: [
genreFilter
]
}
]
})
.then(events => {
if (sort != undefined) {
events.sort((event1, event2) => {
if (sort == "desc") {
return event2.dataValues.concerts.length - event1.dataValues.concerts.length
} else if (sort == "asc") {
return event1.dataValues.concerts.length - event2.dataValues.concerts.length
}
})
}
if (count != undefined) {
events.splice(Number(count))
}
res.status(200).json(events)
})
})
// Event search
events.get("/search", (req: Request, res: Response) => {
Event.findAll({
where: {
name: {
[Op.substring]: req.query.value
}
},
include: [
{
model: Concert,
required: true,
include: [
{
model: Location,
}
],
},
{
model: Band,
}
]
})
.then(events => {
res.status(200).json(events)
})
})

View File

@@ -2,7 +2,6 @@ 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 { 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";
@@ -20,15 +19,7 @@ location.get("/", (req: Request, res: Response) => {
City, City,
{ {
model: Concert, model: Concert,
include: [ include: [ Band ],
{
model: Event,
include: [ Band ]
}
],
attributes: {
exclude: [ "locationId", "tourId" ]
}
}, },
{ {
model: SeatGroup, model: SeatGroup,
@@ -70,15 +61,7 @@ location.get("/location/:urlName", (req: Request, res: Response) => {
City, City,
{ {
model: Concert, model: Concert,
include: [ include: [ Band ],
{
model: Event,
include: [ Band ]
}
],
attributes: {
exclude: [ "locationId", "tourId" ]
}
}, },
{ {
model: SeatGroup, model: SeatGroup,

View File

@@ -6,7 +6,6 @@ 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";
import { Location } from "../models/locations/location.model"; import { Location } from "../models/locations/location.model";
import { Event } from "../models/acts/event.model";
import { City } from "../models/locations/city.model"; import { City } from "../models/locations/city.model";
import { Seat } from "../models/locations/seat.model"; import { Seat } from "../models/locations/seat.model";
import { SeatRow } from "../models/locations/seatRow.model"; import { SeatRow } from "../models/locations/seatRow.model";
@@ -26,8 +25,7 @@ order.get("/:id", (req: Request, res: Response) => {
model: Concert, model: Concert,
include: [ include: [
{ {
model: Event, model: Band
include: [ Band ]
}, },
{ {
model: Location, model: Location,

View File

@@ -10,7 +10,6 @@ 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 { 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'
@@ -22,11 +21,9 @@ import { ExerciseGroup } from '../models/exercises/exerciseGroup.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 accountRoles from "./../data/accountRoles.json" import accountRoles from "./../data/accountRoles.json"
import bands from "./../data/bands.json"
import genres from "./../data/genres.json"
import events from "./../data/events.json"
import citiesLocations from "./../data/cities-locations.json" import citiesLocations from "./../data/cities-locations.json"
import exercises from "./../data/exercises.json" import exercises from "./../data/exercises.json"
import bands from "./../data/bands-concerts.json"
/** /**
@@ -40,7 +37,6 @@ export function deleteAllTables() {
Member.destroy({ truncate: true }) Member.destroy({ truncate: true })
Genre.destroy({ truncate: true }) Genre.destroy({ truncate: true })
Band.destroy({ truncate: true }) Band.destroy({ truncate: true })
Event.destroy({ truncate: true })
City.destroy({ truncate: true }) City.destroy({ truncate: true })
Location.destroy({ truncate: true }) Location.destroy({ truncate: true })
@@ -80,7 +76,7 @@ export async function prepopulateDatabase() {
deleteAllTables() deleteAllTables()
AccountRole.bulkCreate(accountRoles.data) AccountRole.bulkCreate(accountRoles.data)
Genre.bulkCreate(genres.data) //Genre.bulkCreate(genres.data)
for (let city of citiesLocations.data) for (let city of citiesLocations.data)
{ {
@@ -97,41 +93,42 @@ export async function prepopulateDatabase() {
{ {
seatGroup["locationId"] = locationDataset.id seatGroup["locationId"] = locationDataset.id
await SeatGroup.create(seatGroup) // todo activate
.then(async seatGroupRes => { // await SeatGroup.create(seatGroup)
if (seatGroup.standingArea) { // .then(async seatGroupRes => {
// In an area without seats, create one row with all "seats" // if (seatGroup.standingArea) {
await SeatRow.create({ // // In an area without seats, create one row with all "seats"
row: 0, // await SeatRow.create({
seatGroupId: seatGroupRes.id // row: 0,
}) // seatGroupId: seatGroupRes.id
.then(async seatRowRes => { // })
for (let i = 0; i < seatGroup.capacity; i++) { // .then(async seatRowRes => {
await Seat.create({ // for (let i = 0; i < seatGroup.capacity; i++) {
seatNr: i + 1, // await Seat.create({
seatRowId: seatRowRes.id // seatNr: i + 1,
}) // seatRowId: seatRowRes.id
} // })
}) // }
} // })
else // }
{ // else
for (let row = 0; row < seatGroup.rows; row++) { // {
await SeatRow.create({ // for (let row = 0; row < seatGroup.rows; row++) {
row: row + 1, // await SeatRow.create({
seatGroupId: seatGroupRes.id // row: row + 1,
}) // seatGroupId: seatGroupRes.id
.then(async seatRowRes => { // })
for (let col = 0; col < seatGroup.capacity / seatGroup.rows; col++) { // .then(async seatRowRes => {
await Seat.create({ // for (let col = 0; col < seatGroup.capacity / seatGroup.rows; col++) {
seatNr: col, // await Seat.create({
seatRowId: seatRowRes.id // seatNr: col,
}) // seatRowId: seatRowRes.id
} // })
}) // }
} // })
} // }
}) // }
// })
} }
}) })
} }
@@ -142,74 +139,129 @@ export async function prepopulateDatabase() {
// Account & Sub tables // Account & Sub tables
for (let account of accounts.data) { for (let account of accounts.data) {
await Account.create(account) await Account.create(account)
.then(dataset => { .then(async dataset => {
Address.bulkCreate(account.addresses) for (let address of account.addresses) {
Payment.bulkCreate(account.payments) await Address.create({
accountId: dataset.dataValues.id,
street: address.street,
houseNumber: address.houseNumber,
postalCode: address.postalCode,
city: address.city
})
}
for (let payment of account.payments) {
await Payment.create({
accountId: dataset.dataValues.id,
bankName: payment.bankName,
iban: payment.iban
})
}
}) })
} }
for(let band of bands.data) { for(let band of bands.bands) {
// Create a band dataset // Create a band dataset
await Band.create(band) await Band.create(band)
.then(async dataset => { .then(async dataset => {
// Create the m:n associations for the genres // Create the m:n associations for the genres
for (let genreId of band.genreId) { for (let genre of band.genres) {
await Genre.findOrCreate({
where: {
name: genre
},
defaults: {
name: genre
}
})
.then(async genreDataset => {
await BandGenre.create({ await BandGenre.create({
genreId: Number(genreId), genreId: genreDataset[0].dataValues.id,
bandId: dataset.dataValues.id
})
})
}
for (let rating of band.ratings) {
await Account.findOne({
where: {
username: rating.username
}
})
.then(async account => {
await Rating.create({
accountId: account.dataValues.id,
rating: rating.rating,
bandId: dataset.dataValues.id
})
})
}
for (let member of band.members) {
await Member.create({
name: member.name,
image: member.image,
bandId: dataset.dataValues.id bandId: dataset.dataValues.id
}) })
} }
Rating.bulkCreate(band.ratings) for (let concertGroup of band.concertGroups) {
Member.bulkCreate(band.members) for (let concert of concertGroup.concerts) {
}) await Location.findOne({
}
for (let event of events.data) {
await Event.create(event)
.then(async dataset => {
for (let concert of event.concerts) {
concert["eventId"] = dataset.id
await Concert.create(concert)
}
})
}
for (let order of orders.data) {
await Order.create(order)
.then(async dataset => {
for (let ticket of order.tickets) {
ticket["orderId"] = dataset.id
SeatGroup.findOne({
where: { where: {
name: ticket.seatGroup name: concert.location
} }
}) })
.then(seatGroup => { .then(async location => {
SeatRow.findOne({ await Concert.create({
where: { date: concert.date,
seatGroupId: seatGroup.id, name: concertGroup.name,
row: ticket.seatRow price: concert.price,
} image: concertGroup.name,
}) inStock: concert.inStock,
.then(seatRow => { offered: true,
Seat.findOne({ bandId: dataset.dataValues.id,
where: { locationId: location.dataValues.id
seatRowId: seatRow.id,
seatNr: ticket.seat
}
})
.then(async seat => {
ticket["seatId"] = seat.id
await Ticket.create(ticket)
})
}) })
}) })
} }
}
}) })
} }
// for (let order of orders.data) {
// await Order.create(order)
// .then(async dataset => {
// for (let ticket of order.tickets) {
// ticket["orderId"] = dataset.id
// SeatGroup.findOne({
// where: {
// name: ticket.seatGroup
// }
// })
// .then(seatGroup => {
// SeatRow.findOne({
// where: {
// seatGroupId: seatGroup.id,
// row: ticket.seatRow
// }
// })
// .then(seatRow => {
// Seat.findOne({
// where: {
// seatRowId: seatRow.id,
// seatNr: ticket.seat
// }
// })
// .then(async seat => {
// ticket["seatId"] = seat.id
// await Ticket.create(ticket)
// })
// })
// })
// }
// })
// }
} }

View File

@@ -9,7 +9,6 @@ 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 { events } from './routes/events.routes'
import { city } from './routes/city.routes' import { city } from './routes/city.routes'
import { exercises } from './routes/exercise.routes' import { exercises } from './routes/exercise.routes'
@@ -36,7 +35,6 @@ app.use((req, res, next) => {
// Routes // Routes
app.use("/api", api) app.use("/api", api)
app.use("/events", events)
app.use("/bands", band) app.use("/bands", band)
app.use("/locations", location) app.use("/locations", location)
app.use("/genres", genre) app.use("/genres", genre)

View File

@@ -0,0 +1,6 @@
<script setup lang="ts">
</script>
<template>
</template>

View File

@@ -0,0 +1,6 @@
<script setup lang="ts">
</script>
<template>
Concerts
</template>

View File

@@ -1,11 +0,0 @@
import AccountHomePage from "@/pages/account/accountHomePage/index.vue";
import AccountDataPage from "@/pages/account/accountDataPage/index.vue";
import OrdersPage from "@/pages/account/ordersPage/index.vue";
import LoginPage from "@/pages/account/loginPage/index.vue"
export const accountRoutes = [
{ path: '/account/home', component: AccountHomePage },
{ path: '/account/login', component: LoginPage },
{ path: '/account/edit', component: AccountDataPage },
{ path: '/account/orders', component: OrdersPage },
]

View File

@@ -1,27 +1,50 @@
import BasketPage from "@/pages/basketPage/index.vue" import BasketPage from "@/pages/misc/basketPage/index.vue"
import HomePage from "@/pages/homePage/index.vue" import HomePage from "@/pages/homePage/index.vue"
import { adminRoutes } from "./admin.routes"; import { adminRoutes } from "./admin.routes";
import { accountRoutes } from "./account.routes"; import BandsPage from "@/pages/bands/bandsPage/index.vue"
import { systemRoutes } from "./system.routes"; import BandDetailPage from "@/pages/bands/bandDetailPage/index.vue"
import EventsPage from "@/pages/events/eventsPage/index.vue";
import LocationsPage from "@/pages/locations/locationsPage/index.vue" import LocationsPage from "@/pages/locations/locationsPage/index.vue"
import SearchPage from "@/pages/searchPage/index.vue"
import BandDetailPage from "@/pages/events/bandDetailPage/index.vue"
import LocationDetailPage from "@/pages/locations/locationDetailPage/index.vue" import LocationDetailPage from "@/pages/locations/locationDetailPage/index.vue"
import TicketOrderPage from "@/pages/events/ticketOrderPage/index.vue" import SearchPage from "@/pages/misc/searchPage/index.vue"
import ConcertsPage from "@/pages/concerts/concertsPage/index.vue"
import ConcertBookingPage from "@/pages/concerts/concertBookingPage/index.vue"
import AccountHomePage from "@/pages/account/accountHomePage/index.vue";
import AccountDataPage from "@/pages/account/accountDataPage/index.vue";
import OrdersPage from "@/pages/account/ordersPage/index.vue";
import LoginPage from "@/pages/account/loginPage/index.vue"
import PreferencesPage from "@/pages/misc/preferencesPage/index.vue";
import HelpPage from "@/pages/misc/helpPage/index.vue"
const routes = [ const routes = [
// Main page
{ path: "/", component: HomePage }, { path: "/", component: HomePage },
{ path: '/basket', component: BasketPage },
{ path: '/locations', component: LocationsPage }, // Account
{ path: '/locations/:locationName', name: 'locationDetails', component: LocationDetailPage }, { path: '/account', component: AccountHomePage },
{ path: '/bands/:bandName', component: BandDetailPage }, { path: '/account/orders', component: OrdersPage },
{ path: '/concert/:id', component: TicketOrderPage }, { path: '/account/data', component: AccountDataPage },
{ path: '/events', component: EventsPage }, { path: '/account/login', component: LoginPage },
{ path: '/search', component: SearchPage },
...accountRoutes, // Admin
...adminRoutes, ...adminRoutes,
...systemRoutes
// Bands
{ path: '/bands', component: BandsPage },
{ path: '/bands/detail/:name', component: BandDetailPage },
// Concerts
{ path: '/concerts', component: ConcertsPage },
{ path: '/concert/booking/:id', component: ConcertBookingPage },
// Locations
{ path: '/locations', component: LocationsPage },
{ path: '/locations/detail/:name', name: 'locationDetails', component: LocationDetailPage },
// Misc
{ path: '/search', component: SearchPage },
{ path: '/basket', component: BasketPage },
{ path: '/preferences', component: PreferencesPage },
{ path: '/help', component: HelpPage }
] ]
export default routes export default routes

View File

@@ -1,7 +0,0 @@
import PreferencesPage from "@/pages/system/preferencesPage/index.vue";
import HelpPage from "@/pages/system/helpPage/index.vue"
export const systemRoutes = [
{ path: '/system/preferences', component: PreferencesPage },
{ path: '/system/help', component: HelpPage }
]