Skip to content

Commit 0155866

Browse files
author
Cristina Taboada
committed
Merge branch 'dia4'
2 parents 54e5c0a + ff110a5 commit 0155866

10 files changed

+950
-0
lines changed

RetosTema4/package-lock.json

+721
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

RetosTema4/package.json

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"name": "retostema4",
3+
"version": "1.0.0",
4+
"description": "Retos del Tema 4 del Módulo 5 - BBDD relacionales MySQL",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"author": "Cristina Taboada Mayo",
10+
"license": "ISC",
11+
"dependencies": {
12+
"cors": "^2.8.5",
13+
"express": "^4.18.2",
14+
"mysql2": "^3.4.0"
15+
}
16+
}

RetosTema4/src/apiRest.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const app = require("./app");
2+
3+
app.listen(process.env.PORT || 3000);

RetosTema4/src/app.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const express = require("express");
2+
const cors = require("cors");
3+
const alumnosRouters = require("./routers/alumnos.routers");
4+
const notasRouters = require("./routers/notas.routers");
5+
const errorHandling = require("./error/errorHandling");
6+
7+
const app = express();
8+
9+
app.use(cors());
10+
app.use(express.urlencoded({extended:false}));
11+
app.use(express.json());
12+
app.use(alumnosRouters);
13+
app.use(notasRouters);
14+
app.use((req,res,next)=>{
15+
res.status(404).json({
16+
error: true,
17+
codigo: 404,
18+
mensaje: "Endpoint no encontrado"
19+
});
20+
});
21+
app.use(errorHandling);
22+
23+
module.exports = app;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
const {pool} = require("../database");
2+
3+
async function getAlumnos(req,res){
4+
const params = [req.query.id];
5+
let sql;
6+
//-- comprobar si existe una id de alumno. Si existe se pide ese alumno
7+
//-- sino se piden todos.
8+
if (req.query.id != undefined) {
9+
sql = `SELECT * FROM students WHERE student_id=?`;
10+
}else{
11+
sql = `SELECT * FROM students;`;
12+
}
13+
14+
//-- Envío de los datos optenidos por la petición.
15+
try {
16+
const [result] = await pool.query(sql,params);
17+
res.send(result);
18+
} catch (error) {
19+
res.send(error)
20+
}
21+
}
22+
23+
async function addAlumno(req,res){
24+
//-- Obtenemos los datos del nuevo alumno por el body.
25+
const{student_id,first_name,last_name,group_id,year} = req.body;
26+
//-- IMPORTANTE: Los parámetros deben ir colocados en el orden en el que se deben insertar en la
27+
//-- peticion sql.
28+
const params = [student_id,first_name,last_name,group_id,year];
29+
let sql = `INSERT INTO students (student_id,first_name,last_name,group_id,year) VALUES (?,?,?,?,?);`;
30+
31+
try {
32+
const [result] = await pool.query(sql,params);
33+
res.send(result);
34+
} catch (error) {
35+
res.send(error)
36+
}
37+
}
38+
39+
async function editAlumno(req,res){
40+
const{student_id,first_name,last_name,group_id,year} = req.body;
41+
//-- IMPORTANTE: Los parámetros deben ir colocados en el orden en el que se deben insertar en la
42+
//-- peticion sql.
43+
const params = [
44+
first_name? first_name: null,
45+
last_name? last_name: null,
46+
group_id? group_id: null,
47+
year? year: null,
48+
student_id
49+
];
50+
let sql = `UPDATE students SET first_name = COALESCE(?,first_name),
51+
last_name = COALESCE(?,last_name),
52+
group_id = COALESCE(?,group_id),
53+
year = COALESCE(?,year)
54+
WHERE student_id = ?;`;
55+
56+
try {
57+
const [result] = await pool.query(sql,params);
58+
res.send(result);
59+
} catch (error) {
60+
res.send(error)
61+
}
62+
}
63+
64+
async function delAlumno(req,res){
65+
const {student_id} = req.body;
66+
const params = [student_id];
67+
let sql = `DELETE FROM students WHERE student_id = ?;`;
68+
69+
try {
70+
const [result] = await pool.query(sql,params);
71+
res.send(result);
72+
} catch (error) {
73+
res.send(error)
74+
}
75+
}
76+
77+
module.exports = { getAlumnos, addAlumno, editAlumno, delAlumno };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
const {pool} = require("../database");
2+
3+
async function getMedia(req,res){
4+
const params = [req.query.id];
5+
let sql;
6+
//-- comprobar si existe una id de alumno. Si existe se pide ese alumno
7+
//-- sino se piden todos.
8+
if (req.query.id != undefined) {
9+
sql = `SELECT AVG(mark) AS nota_media_del_Alumno FROM marks WHERE student_id=?`;
10+
}
11+
12+
//-- Envío de los datos optenidos por la petición.
13+
try {
14+
const [result] = await pool.query(sql,params);
15+
res.send(result);
16+
} catch (error) {
17+
res.send(error)
18+
}
19+
}
20+
21+
async function getAsignaturasAlumnos(req,res){
22+
const params = [req.query.id];
23+
let sql;
24+
//-- comprobar si existe una id de alumno. Si existe se pide ese alumno
25+
//-- sino se piden todos.
26+
if (req.query.id != undefined) {
27+
sql = `SELECT first_name, last_name, title FROM students AS s INNER JOIN subjects AS sub ON (s.group_id=sub.subject_id) WHERE student_id=?`;
28+
}else{
29+
sql = `SELECT first_name, last_name, title FROM students AS s INNER JOIN subjects AS sub ON (s.group_id=sub.subject_id);`;
30+
}
31+
32+
//-- Envío de los datos optenidos por la petición.
33+
try {
34+
const [result] = await pool.query(sql,params);
35+
res.send(result);
36+
} catch (error) {
37+
res.send(error)
38+
}
39+
}
40+
41+
async function getAsignaturasProfesores(req,res){
42+
const params = [req.query.id];
43+
let sql;
44+
//-- comprobar si existe una id de alumno. Si existe se pide ese alumno
45+
//-- sino se piden todos.
46+
if (req.query.id != undefined) {
47+
sql = `SELECT first_name AS teacher_name, last_name AS teacher_lastname, sub.title AS subjects FROM teachers AS t
48+
JOIN subject_teacher AS st ON t.teacher_id=st.teacher_id
49+
JOIN subjects AS sub ON st.subject_id=sub.subject_id
50+
WHERE t.teacher_id = ?
51+
GROUP BY first_name, last_name, sub.title;`;
52+
}else{
53+
sql = `SELECT first_name AS teacher_name, last_name AS teacher_lastname, sub.title AS subjects FROM teachers AS t
54+
JOIN subject_teacher AS st ON t.teacher_id=st.teacher_id
55+
JOIN subjects AS sub ON st.subject_id=sub.subject_id
56+
GROUP BY first_name, last_name, sub.title;`;
57+
}
58+
59+
//-- Envío de los datos optenidos por la petición.
60+
try {
61+
const [result] = await pool.query(sql,params);
62+
res.send(result);
63+
} catch (error) {
64+
res.send(error)
65+
}
66+
}
67+
68+
module.exports = { getMedia, getAsignaturasAlumnos, getAsignaturasProfesores };

RetosTema4/src/database.js

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const mysql = require ("mysql2");
2+
3+
const pool = mysql.createPool(
4+
{
5+
host: "localhost",
6+
user: "root",
7+
password: "Secur3MyS4QL",
8+
database: "escuela",
9+
waitForConnections: true,
10+
connectionLimit: 10,
11+
maxIdle: 10,
12+
idleTimeout: 60000,
13+
queueLimit: 0
14+
}
15+
).promise();
16+
17+
console.log("Conexión con la BBDD creada");
18+
19+
module.exports = {pool};

RetosTema4/src/error/errorHandling.js

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
function errorHandling(err,req,res,next){
2+
res.status(500).json({message: err.message});
3+
}
4+
module.exports = errorHandling;
+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const { Router } = require("express");
2+
const router = Router();
3+
const alumnosCtrl = require("../controller/alumnos.controller");
4+
5+
router.get('/alumnos', alumnosCtrl.getAlumnos);
6+
router.post('/alumnos', alumnosCtrl.addAlumno);
7+
router.put('/alumnos', alumnosCtrl.editAlumno);
8+
router.delete('/alumnos', alumnosCtrl.delAlumno);
9+
10+
module.exports = router;
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const { Router } = require("express");
2+
const router = Router();
3+
const notasCtrl = require("../controller/notas.controller");
4+
5+
router.get('/media', notasCtrl.getMedia);
6+
router.get('/apuntadas', notasCtrl.getAsignaturasAlumnos);
7+
router.get('/impartidas', notasCtrl.getAsignaturasProfesores);
8+
9+
module.exports = router;

0 commit comments

Comments
 (0)