Skip to content

Commit 25499e4

Browse files
committed
salva Degree
apprentemente funziona! closes #177
1 parent 2083b60 commit 25499e4

4 files changed

Lines changed: 36 additions & 3 deletions

File tree

api/controllers/DegreesController.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ const DegreesController = {
5454

5555
post: async req => {
5656
return await ModelController.post(Degree, req.body)
57+
},
58+
59+
patch: async req => {
60+
const { id } = req.params;
61+
const data = req.body
62+
return await ModelController.patch(Degree, id, req.body)
5763
}
5864
}
5965

api/controllers/ModelController.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ const ModelController = {
138138

139139
patch: async (Model, id, data) => {
140140
try {
141-
console.log(`ModelController.patch ${Model} ${id} ${JSON.stringify(data)}`)
141+
console.log(`ModelController.patch ${id} ${JSON.stringify(data)}`)
142142
await Model.findByIdAndUpdate(id, data, { runValidators: true })
143143
return {ok: true}
144144
} catch(err) {

api/router.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ router.get('/forms/:id', require_user, response_envelope(Forms.view))
146146

147147
router.get('/degrees', require_user, response_envelope(Degrees.index))
148148
router.get('/degrees/:id', require_user, response_envelope(Degrees.view))
149+
router.patch('/degrees/:id', require_admin, response_envelope(Degrees.patch))
149150
router.post('/degrees', require_admin, response_envelope(Degrees.post))
150151

151152
router.get('/curricula', require_user, response_envelope(Curricula.index))

frontend/src/pages/DegreePage.tsx

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React, {useState, Dispatch } from 'react'
22
import { Link, useParams, useNavigate } from "react-router-dom"
33
import { Form } from "react-bootstrap"
44
import Select from "react-select"
5+
import Button from 'react-bootstrap/Button'
56

67
import { useEngine, useGetDegree, useIndexExam, usePostDegree, usePatchDegree, ExamGet } from '../modules/engine'
78
import Card from '../components/Card'
@@ -185,6 +186,7 @@ type ExamGroup = {
185186
}
186187

187188
function DegreeForm({mutate, degree, exams}) {
189+
const [error, setError] = useState<string>('')
188190
const [data, setData] = useState(degree)
189191
const [groups, setGroups] = useState<ExamGroup[]>(Object.entries(degree.groups as Record<string,string[]>)
190192
.map(([name,exam_ids])=>({name, exam_ids}))
@@ -196,6 +198,7 @@ function DegreeForm({mutate, degree, exams}) {
196198
const current_year = new Date().getFullYear()
197199

198200
return <Card>
201+
{error && <div className="alert alert-danger">{error}</div>}
199202
<Group
200203
validationError={validation.name}
201204
controlId="name"
@@ -320,9 +323,11 @@ function DegreeForm({mutate, degree, exams}) {
320323
</HTMLEditor>
321324
</Group>
322325

323-
<pre>
326+
<Button onClick={submit}>salva corso di Laurea</Button>
327+
328+
{/* <pre>
324329
{ JSON.stringify({data,exams},null,2)}
325-
</pre>
330+
</pre> */}
326331
</Card>
327332

328333
function setContent(field) {
@@ -336,6 +341,27 @@ function DegreeForm({mutate, degree, exams}) {
336341
function onChangeCheck(field) {
337342
return e => setData(data => ({...data, [field]: e.target.checked}))
338343
}
344+
345+
function submit() {
346+
data.groups = Object.fromEntries(groups.map(group => [group.name, group.exam_ids]))
347+
data.academic_year = parseInt(data.academic_year)
348+
data.years = parseInt(data.years)
349+
mutate(data,
350+
{
351+
onSuccess: (res) => {
352+
const id = degree._id || res.data
353+
navigate(`/degrees/${id}`)
354+
},
355+
onError: (err) => {
356+
if (err.response?.status === 422) {
357+
setValidation(err.response.data.issues)
358+
} else {
359+
setError(`${err}`)
360+
}
361+
}
362+
}
363+
)
364+
}
339365
}
340366

341367
function EditGroups({groups, setGroups, exams}:{

0 commit comments

Comments
 (0)