Skip to content
Snippets Groups Projects
Commit 7fe5bb3b authored by ExtraDev's avatar ExtraDev
Browse files

create views, display teams and entry

parent b80c6aa3
No related branches found
No related tags found
No related merge requests found
...@@ -31,7 +31,7 @@ app.get('/editions', (req, res) => { ...@@ -31,7 +31,7 @@ app.get('/editions', (req, res) => {
}); });
}); });
app.get('/teams', (req, res) => { app.get('/teams', (req, res) => {
const query = 'SELECT team.id_team, team.name ' + const query = 'SELECT team.id_team, team.name, tag_team_edition.id_tag ' +
'FROM `tag_team_edition` ' + 'FROM `tag_team_edition` ' +
'LEFT JOIN team ON tag_team_edition.id_team = team.id_team ' + 'LEFT JOIN team ON tag_team_edition.id_team = team.id_team ' +
'WHERE year = ?'; 'WHERE year = ?';
...@@ -49,7 +49,8 @@ app.get('/entry', (req, res) => { ...@@ -49,7 +49,8 @@ app.get('/entry', (req, res) => {
'LEFT JOIN tag ON entry.id_tag = tag.id_tag ' + 'LEFT JOIN tag ON entry.id_tag = tag.id_tag ' +
'LEFT JOIN tag_team_edition ON tag.id_tag = tag_team_edition.id_tag ' + 'LEFT JOIN tag_team_edition ON tag.id_tag = tag_team_edition.id_tag ' +
'LEFT JOIN team ON tag_team_edition.id_team = team.id_team ' + 'LEFT JOIN team ON tag_team_edition.id_team = team.id_team ' +
'WHERE tag_team_edition.year = ?'; 'WHERE tag_team_edition.year = ? ' +
'ORDER BY entry.time_stamp ASC';
const year = req.query.year; const year = req.query.year;
exports.db.query(query, [year], (err, result) => { exports.db.query(query, [year], (err, result) => {
if (err) { if (err) {
......
...@@ -34,7 +34,7 @@ app.get('/editions', (req: Request, res: Response) => { ...@@ -34,7 +34,7 @@ app.get('/editions', (req: Request, res: Response) => {
}); });
app.get('/teams', (req: Request, res: Response) => { app.get('/teams', (req: Request, res: Response) => {
const query = 'SELECT team.id_team, team.name ' + const query = 'SELECT team.id_team, team.name, tag_team_edition.id_tag ' +
'FROM `tag_team_edition` ' + 'FROM `tag_team_edition` ' +
'LEFT JOIN team ON tag_team_edition.id_team = team.id_team ' + 'LEFT JOIN team ON tag_team_edition.id_team = team.id_team ' +
'WHERE year = ?'; 'WHERE year = ?';
...@@ -58,7 +58,8 @@ app.get('/entry', (req: Request, res: Response) => { ...@@ -58,7 +58,8 @@ app.get('/entry', (req: Request, res: Response) => {
'LEFT JOIN tag ON entry.id_tag = tag.id_tag ' + 'LEFT JOIN tag ON entry.id_tag = tag.id_tag ' +
'LEFT JOIN tag_team_edition ON tag.id_tag = tag_team_edition.id_tag ' + 'LEFT JOIN tag_team_edition ON tag.id_tag = tag_team_edition.id_tag ' +
'LEFT JOIN team ON tag_team_edition.id_team = team.id_team ' + 'LEFT JOIN team ON tag_team_edition.id_team = team.id_team ' +
'WHERE tag_team_edition.year = ?'; 'WHERE tag_team_edition.year = ? ' +
'ORDER BY entry.time_stamp ASC';
const year = req.query.year const year = req.query.year
......
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
"": { "": {
"name": "frontend", "name": "frontend",
"version": "0.0.0", "version": "0.0.0",
"dependencies": {
"svelte-navigator": "^3.2.2"
},
"devDependencies": { "devDependencies": {
"@sveltejs/vite-plugin-svelte": "^1.1.0", "@sveltejs/vite-plugin-svelte": "^1.1.0",
"svelte": "^3.52.0", "svelte": "^3.52.0",
...@@ -89,6 +92,11 @@ ...@@ -89,6 +92,11 @@
} }
} }
}, },
"node_modules/dedent-js": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz",
"integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ=="
},
"node_modules/deepmerge": { "node_modules/deepmerge": {
"version": "4.2.2", "version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
...@@ -508,6 +516,14 @@ ...@@ -508,6 +516,14 @@
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/lower-case": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
"integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
"dependencies": {
"tslib": "^2.0.3"
}
},
"node_modules/magic-string": { "node_modules/magic-string": {
"version": "0.26.7", "version": "0.26.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz",
...@@ -538,6 +554,24 @@ ...@@ -538,6 +554,24 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
} }
}, },
"node_modules/no-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
"integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
"dependencies": {
"lower-case": "^2.0.2",
"tslib": "^2.0.3"
}
},
"node_modules/pascal-case": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
"integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
"dependencies": {
"no-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"node_modules/path-parse": { "node_modules/path-parse": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
...@@ -637,7 +671,6 @@ ...@@ -637,7 +671,6 @@
"version": "3.53.1", "version": "3.53.1",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.53.1.tgz", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.53.1.tgz",
"integrity": "sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw==", "integrity": "sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw==",
"dev": true,
"engines": { "engines": {
"node": ">= 8" "node": ">= 8"
} }
...@@ -654,6 +687,49 @@ ...@@ -654,6 +687,49 @@
"svelte": ">=3.19.0" "svelte": ">=3.19.0"
} }
}, },
"node_modules/svelte-navigator": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/svelte-navigator/-/svelte-navigator-3.2.2.tgz",
"integrity": "sha512-Xio4ohLUG1nQJ+ENNbLphXXu9L189fnI1WGg+2Q3CIMPe8Jm2ipytKQthdBs8t0mN7p3Eb03SE9hq0xZAqwQNQ==",
"hasInstallScript": true,
"dependencies": {
"svelte2tsx": "^0.1.151"
},
"peerDependencies": {
"svelte": "3.x"
}
},
"node_modules/svelte2tsx": {
"version": "0.1.193",
"resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.1.193.tgz",
"integrity": "sha512-vzy4YQNYDnoqp2iZPnJy7kpPAY6y121L0HKrSBjU/IWW7DQ6T7RMJed2VVHFmVYm0zAGYMDl9urPc6R4DDUyhg==",
"dependencies": {
"dedent-js": "^1.0.1",
"pascal-case": "^3.1.1"
},
"peerDependencies": {
"svelte": "^3.24",
"typescript": "^4.1.2"
}
},
"node_modules/tslib": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
},
"node_modules/typescript": {
"version": "4.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
"integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
"peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=4.2.0"
}
},
"node_modules/vite": { "node_modules/vite": {
"version": "3.2.4", "version": "3.2.4",
"resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz",
...@@ -756,6 +832,11 @@ ...@@ -756,6 +832,11 @@
"ms": "2.1.2" "ms": "2.1.2"
} }
}, },
"dedent-js": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz",
"integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ=="
},
"deepmerge": { "deepmerge": {
"version": "4.2.2", "version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
...@@ -969,6 +1050,14 @@ ...@@ -969,6 +1050,14 @@
"integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
"dev": true "dev": true
}, },
"lower-case": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
"integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
"requires": {
"tslib": "^2.0.3"
}
},
"magic-string": { "magic-string": {
"version": "0.26.7", "version": "0.26.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz",
...@@ -990,6 +1079,24 @@ ...@@ -990,6 +1079,24 @@
"integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
"dev": true "dev": true
}, },
"no-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
"integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
"requires": {
"lower-case": "^2.0.2",
"tslib": "^2.0.3"
}
},
"pascal-case": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
"integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
"requires": {
"no-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"path-parse": { "path-parse": {
"version": "1.0.7", "version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
...@@ -1054,8 +1161,7 @@ ...@@ -1054,8 +1161,7 @@
"svelte": { "svelte": {
"version": "3.53.1", "version": "3.53.1",
"resolved": "https://registry.npmjs.org/svelte/-/svelte-3.53.1.tgz", "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.53.1.tgz",
"integrity": "sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw==", "integrity": "sha512-Q4/hHkktZogGhN5iqxqSi9sjEVoe/NbIxX4hXEHoasTxj+TxEQVAq66LnDMdAZxjmsodkoI5F3slqsS68U7FNw=="
"dev": true
}, },
"svelte-hmr": { "svelte-hmr": {
"version": "0.15.1", "version": "0.15.1",
...@@ -1064,6 +1170,34 @@ ...@@ -1064,6 +1170,34 @@
"dev": true, "dev": true,
"requires": {} "requires": {}
}, },
"svelte-navigator": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/svelte-navigator/-/svelte-navigator-3.2.2.tgz",
"integrity": "sha512-Xio4ohLUG1nQJ+ENNbLphXXu9L189fnI1WGg+2Q3CIMPe8Jm2ipytKQthdBs8t0mN7p3Eb03SE9hq0xZAqwQNQ==",
"requires": {
"svelte2tsx": "^0.1.151"
}
},
"svelte2tsx": {
"version": "0.1.193",
"resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.1.193.tgz",
"integrity": "sha512-vzy4YQNYDnoqp2iZPnJy7kpPAY6y121L0HKrSBjU/IWW7DQ6T7RMJed2VVHFmVYm0zAGYMDl9urPc6R4DDUyhg==",
"requires": {
"dedent-js": "^1.0.1",
"pascal-case": "^3.1.1"
}
},
"tslib": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA=="
},
"typescript": {
"version": "4.9.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
"integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
"peer": true
},
"vite": { "vite": {
"version": "3.2.4", "version": "3.2.4",
"resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.4.tgz",
......
...@@ -12,5 +12,8 @@ ...@@ -12,5 +12,8 @@
"@sveltejs/vite-plugin-svelte": "^1.1.0", "@sveltejs/vite-plugin-svelte": "^1.1.0",
"svelte": "^3.52.0", "svelte": "^3.52.0",
"vite": "^3.2.3" "vite": "^3.2.3"
},
"dependencies": {
"svelte-navigator": "^3.2.2"
} }
} }
<script> <script>
//https://svelte.dev/repl/c81d8f3dff584065a82b2d3ea7cd4aee?version=3.53.1
import { Router, Link, Route } from "svelte-navigator";
import Teams from "./lib/Teams.svelte"; import Teams from "./lib/Teams.svelte";
import Entry from "./lib/Entry.svelte";
</script> </script>
<Router>
<header>
<h1>Boldor</h1>
<Link to="/">Home</Link>
<Link to="teams">Équipes</Link>
<Link to="entry">Résultats</Link>
</header>
<main> <main>
<Route path="/">
<div
class="tenor-gif-embed"
data-postid="13756831"
data-share-method="host"
data-aspect-ratio="1.33495"
data-width="100%"
>
<a
href="https://tenor.com/view/row-boat-ods-official-duck-studios-gif-13756831"
>Row Boat GIF</a
>from <a href="https://tenor.com/search/row-gifs">Row GIFs</a>
</div>
<script
type="text/javascript"
async
src="https://tenor.com/embed.js"
></script>
</Route>
<Route path="teams">
<Teams /> <Teams />
</Route>
<Route path="entry">
<Entry />
</Route>
</main> </main>
</Router>
<style> <style>
header {
height: 100px;
text-align: center;
}
</style> </style>
<script>
const edition_url = "http://localhost:8000/editions";
let editions = [];
fetch(edition_url)
.then((response) => response.json())
.then((editions_data) => {
editions = editions_data;
})
let entries = [];
function getEntries(year) {
let entries_url = "http://localhost:8000/entry?year="+year;
fetch(entries_url)
.then((response) => response.json())
.then((entries_data) => {
entries = entries_data;
})
}
let year_selected = new Date().getFullYear();
function selectYear(){
getEntries(year_selected);
}
function parseTimeStamp(time_stamp) {
return (time_stamp.split("T")[1]).split(".")[0]
}
getEntries(year_selected)
</script>
<div class="container">
<h1>Ordre de passage {year_selected}</h1>
<select name="" id="" bind:value={year_selected} on:change={selectYear}>
{#each editions as edition }
<option value="{edition.year}">{edition.year}</option>
{/each}
</select>
<table>
<tr>
<th>Heure de passage</th>
<th>Tag RFID</th>
<th>Équipe</th>
<th>Actions</th>
</tr>
{#each entries as entry}
<tr>
<td>{parseTimeStamp(entry.time_stamp)}</td>
<td>{entry.id_tag}</td>
<td>{entry.name}</td>
<td>...</td>
</tr>
{/each}
</table>
</div>
<style>
.container {
width: 80%;
margin: auto;
max-width: 1024px;
background-color: rgb(235, 235, 235);
padding: 15px;
}
table, tr, td, th{
border: 1px solid black;
}
table {
border-collapse: collapse;
width: 100%;
}
</style>
\ No newline at end of file
...@@ -10,7 +10,7 @@ fetch(edition_url) ...@@ -10,7 +10,7 @@ fetch(edition_url)
let teams = []; let teams = [];
function getTeams(year) { function getTeams(year) {
let teams_url = "http://localhost:8000/entry?year="+year; let teams_url = "http://localhost:8000/teams?year="+year;
fetch(teams_url) fetch(teams_url)
.then((response) => response.json()) .then((response) => response.json())
.then((teams_data) => { .then((teams_data) => {
...@@ -27,7 +27,7 @@ getTeams(year_selected) ...@@ -27,7 +27,7 @@ getTeams(year_selected)
</script> </script>
<div class="container"> <div class="container">
<h1>Pad d'bol d'or</h1> <h1>Liste des équipe pour l'années {year_selected}</h1>
<select name="" id="" bind:value={year_selected} on:change={selectYear}> <select name="" id="" bind:value={year_selected} on:change={selectYear}>
{#each editions as edition } {#each editions as edition }
...@@ -39,11 +39,13 @@ getTeams(year_selected) ...@@ -39,11 +39,13 @@ getTeams(year_selected)
<tr> <tr>
<th>Tag RFID</th> <th>Tag RFID</th>
<th>Team name</th> <th>Team name</th>
<th>Action</th>
</tr> </tr>
{#each teams as team} {#each teams as team}
<tr> <tr>
<td>{team.id_tag}</td> <td>{team.id_tag}</td>
<td>{team.name}</td> <td>{team.name}</td>
<td>...</td>
</tr> </tr>
{/each} {/each}
</table> </table>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment