Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pull request TD4 cdp (Roussel Damien et Daigremont Wilfried) #19

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
module.exports = {
"env": {
"browser": true,
"commonjs": true,
"es2021": true
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 12
},
"rules": {
"indent": [
"error",
"tab"
],
"linebreak-style": [
"error",
"unix"
],
"quotes": [
"error",
"double"
],
"semi": [
"error",
"never"
]
}
}
15 changes: 15 additions & 0 deletions documentationDEV.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
La structure du projet n'est pas pertinente car elle contient un repertoire par type de fichier. Les répertoires doivent être alignés avec l'architecture.

- src
- public
- style
- index.css
- workshop.css
- routes
- index.js
- workshop.js
- views
- index.ejs
- workshop.ejs
- app.js
- package.json
27 changes: 27 additions & 0 deletions ejs/edit_workshop.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html lang="en">
<head>
<% include ./head %>
</head>
<body class="container">

<form action="/update-workshop" method="post">
<div class="form-group">
<label for="name">Name</label>
<input type="text" name="name" class="form-control-plaintext" id="name" value="<%= workshop.name%>" readonly>
</div>
<div class="form-group">
<label for="description">Description</label>
<input type="text" name="description" class="form-control" id="description" value="<%= workshop.description%>" required>
</div>
<button type="submit" class="btn btn-primary">Modifier</button>
<a type="button" class="btn btn-secondary" href="/">Cancel</a>
<button type="submit" formaction="/remove-workshop" class="btn btn-danger">Delete</button>
</form>

<footer>
<% include ./footer %>
</footer>

</body>
</html>
2 changes: 1 addition & 1 deletion ejs/head.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
<title>Workshops</title>

<!-- CSS (load bootstrap from a CDN) -->
<link rel="stylesheet" href="bootstrap.min.css">
<link rel="stylesheet" href="/bootstrap.min.css">
6 changes: 4 additions & 2 deletions ejs/index.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@

<a type="button" href="/workshop" class="btn btn-success btn-lg">Create new workshop</a>

<ul class="list-unstyled"></ul>
<ul class="list-unstyled">
<% workshops.forEach(function(workshop) { %>
<li class="media my-4">
<div class="media-body">
<h5 class="mt-0 mb-1"><%= workshop.name %></h5>
<%= workshop.description %> </div>
<%= workshop.description %> <br>
<a type="button" href="/workshop/<%=workshop.name%>" class="btn btn-info btn-lg">Modifier</a>
</div>
</li>
<% }); %>
</ul>
Expand Down
87 changes: 50 additions & 37 deletions js/inMemoryWorkshop.js
Original file line number Diff line number Diff line change
@@ -1,58 +1,71 @@
let inMemoryWorkshop;
/* eslint-disable no-unused-vars */
let inMemoryWorkshop

function init() {
inMemoryWorkshop = [];
return Promise.resolve();
inMemoryWorkshop = []
return Promise.resolve()
}

function getWorkshopList() {
return new Promise((resolve, ) => {
resolve(inMemoryWorkshop)
})
return new Promise((resolve, ) => {
resolve(inMemoryWorkshop)
})
}

function getWorkshopByName(name) {
return new Promise((resolve, reject) => {
if (!name) {
reject(new Error("name parameter is required"))
}
resolve(inMemoryWorkshop.find(workshop => workshop.name === workshop))
})
return new Promise((resolve, reject) => {
if (!name) {
reject(new Error("name parameter is required"))
}
resolve(inMemoryWorkshop.find(workshop => workshop.name == name))
})
}

function addWorkshop(name, description) {
return new Promise((resolve, reject) => {
if (!name) {
reject(new Error("Workshop name required"))
}
if (!description) {
reject(new Error("Workshop description required"))
}
inMemoryWorkshop.push({
name,
description
})
resolve()
})
return new Promise((resolve, reject) => {
if (!name) {
reject(new Error("Workshop name required"))
}
if (!description) {
reject(new Error("Workshop description required"))
}
inMemoryWorkshop.push({
name,
description
})
resolve()
})
}

function removeWorkshopByName(name) {
return new Promise((resolve, reject) => {
reject(new Error("Not implemented"))
})
return new Promise((resolve, reject) => {
if (!name) {
reject(new Error("Workshop name required"))
}
const workshop = inMemoryWorkshop.find(workshop => workshop.name == name)
inMemoryWorkshop.splice(inMemoryWorkshop.indexOf(workshop), 1)
resolve()
})
}

function updateWorkshop(name, description) {
return new Promise((resolve, reject) => {
reject(new Error("Not implemented"))
})
return new Promise((resolve, reject) => {
if (!name) {
reject(new Error("Workshop name required"))
}
if (!description) {
reject(new Error("Workshop description required"))
}
inMemoryWorkshop.find(workshop => workshop.name == name).description = description;
resolve()
})
}

module.exports = {
init,
getWorkshopList,
getWorkshopByName,
addWorkshop,
removeWorkshopByName,
updateWorkshop
init,
getWorkshopList,
getWorkshopByName,
addWorkshop,
removeWorkshopByName,
updateWorkshop
}
40 changes: 25 additions & 15 deletions js/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,7 @@ repository.init().then(() => {


app.get('/', function (req, res) {
repository.getWorkshopList()
.then(workshops => {
res.render("index", {
workshops: workshops
})
})
loadIndexPage(req, res)
})

app.get('/workshop', function (req, res) {
Expand All @@ -35,12 +30,7 @@ repository.init().then(() => {
const name = req.body.name
const description = req.body.description
repository.addWorkshop(name, description).then(() => {
repository.getWorkshopList()
.then(workshops => {
res.render("index", {
workshops: workshops
})
})
loadIndexPage(req, res)
})
.catch(e =>res.send(e.message))
})
Expand All @@ -49,17 +39,28 @@ repository.init().then(() => {
const workshopName = req.params.name
repository.getWorkshopByName(workshopName)
.then(workshop => {
res.render('ejs/workshop', workshop)
res.render('edit_workshop', {
workshop: workshop
})
})
.catch(e =>ejs.send(e.message))
})

app.post('/remove-workshop', function (req, res) {
res.status(500).send("TODO")
const name = req.body.name
repository.removeWorkshopByName(name).then(() => {
loadIndexPage(req, res)
})
.catch(e =>res.send(e.message))
})

app.post('/update-workshop', function(req, res) {
res.status(500).send("TODO")
const name = req.body.name
const description = req.body.description
repository.updateWorkshop(name, description).then(() => {
loadIndexPage(req, res)
})
.catch(e =>res.send(e.message))
})

app.listen(3000, function () {
Expand All @@ -68,3 +69,12 @@ repository.init().then(() => {

})

function loadIndexPage(req, res){
return repository.getWorkshopList()
.then(workshops => {
res.render("index", {
workshops: workshops
})
})
}

20 changes: 20 additions & 0 deletions task.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Taches

Taches à effectuer pour ajouter la fonctionnalité de mise à jour/suppression d'un Workshop

**T1**Ajouter un lien clickable dans la liste des workshops
**Definition of done**
*Dans le fichier index.ejs ajouter un bouton/lien clickable amenant à /Workshop/:name avec name correspondant a son nom.
*Dans le fichier index.js gérer la redirection de ce bouton/lien vers la page de modification du workshop

**T2**Créer le template de la page de modification du workshop
**Definition of done**
*Créer le fichier editWorkshop.ejs qui génèrera la page html permettant de modifier les deux champs name et description d'un workshop et avec un bouton valider les changements, annuler les changements, et supprimer le workshop

**T3**Appliquer les changements suite à la page modifier un workshop
**Definition of done**
*gérer les évenements sur la base de données sur modification du workshop

**T4**Appliquer les changements suite à la page delete un workshop
**Definition of done**
*gérer les évenements sur la base de données sur delete du workshop