Skip to content

Commit de253f3

Browse files
Merge pull request #43 from UnBArqDsw2021-1/feat/42_listar_turmas
Rotas para professor listar todas as suas turmas
2 parents 487d0e9 + d33dfe3 commit de253f3

File tree

9 files changed

+95
-20
lines changed

9 files changed

+95
-20
lines changed

src/app/controllers/AdmController.js

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import GuardianChild from '../models/GuardianChild';
66
import UserController from './UserController';
77
import dbConfig from '../../config/database';
88
import Class from '../models/Class';
9+
import ClassProfessional from '../models/ClassProfessional';
910
import Ec from './EcController';
1011

1112
const sequelize = new Sequelize(dbConfig.database, dbConfig.username,
@@ -144,7 +145,7 @@ class AdmController extends UserController {
144145

145146
async registerClass(req, res) {
146147
try {
147-
const { code, capacity } = req.body;
148+
const { code, capacity, id_teacher } = req.body;
148149

149150
// const {fk_idEc} = await Professionals.findByPk(req.userId);
150151
// TODO: adicionar id EC na hora de criar a classe
@@ -162,6 +163,8 @@ class AdmController extends UserController {
162163
capacity,
163164
});
164165

166+
await ClassProfessional.create({ fk_idClass: class_obj.id, fk_idProfessional: id_teacher });
167+
165168
const children = await Child.findAll({
166169
limit: capacity,
167170
});
@@ -177,6 +180,7 @@ class AdmController extends UserController {
177180
await class_obj.update({ capacity: capacity - children.length });
178181
const clss = await Class.findByPk(class_obj.id, {
179182
include: { association: 'Children' },
183+
include: { association: 'Teacher' },
180184
});
181185

182186
return res.status(201).json({ message: 'Turma Cadastrada!', clss });
@@ -225,6 +229,29 @@ class AdmController extends UserController {
225229
}
226230
}
227231

232+
async deleteTeacherClass(req, res) {
233+
try {
234+
const { teacher_id, class_id } = req.query;
235+
console.log(req);
236+
237+
const TeacherClass = await ClassProfessional.findOne({
238+
where: {
239+
fk_idClass: class_id,
240+
fk_idProfessional: teacher_id,
241+
},
242+
});
243+
if (TeacherClass === null) {
244+
return res.status(404).json({ message: 'Relação não encontrada.' });
245+
}
246+
247+
await TeacherClass.destroy();
248+
249+
return res.status(200).json({ msg: 'Professor removido da turma.' });
250+
} catch (err) {
251+
return res.status(500).json({ error: err.message });
252+
}
253+
}
254+
228255
async updateClass(req, res) {
229256
try {
230257
const { id, updates } = req.body;

src/app/controllers/AuthController.js

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,24 @@ class AuthController {
3333
}
3434
const { id, name, usertype } = user;
3535

36-
const children_list = [];
37-
38-
const children_rel = await GuardianChild.findAll({
39-
where: {
40-
fk_idGuardian: id
36+
var list = [];
37+
38+
if (usertype === 0) {
39+
const relations = await GuardianChild.findAll({
40+
where: {
41+
fk_idGuardian: id
42+
}
43+
});
44+
45+
for (const relation of relations){
46+
const child = await Child.findByPk(relation.dataValues.fk_idChild);
47+
list.push(child.dataValues);
4148
}
42-
});
43-
44-
for (const child_rel of children_rel){
45-
const child = await Child.findByPk(child_rel.dataValues.fk_idChild);
46-
children_list.push(child.dataValues);
49+
} else {
50+
list = undefined;
4751
}
4852

53+
4954
return res.json({
5055
user: {
5156
id,
@@ -58,7 +63,7 @@ class AuthController {
5863
expiresIn: authConfig.expiresIn,
5964
}),
6065

61-
children_list
66+
extra_info: list
6267

6368
});
6469
} catch (err) {

src/app/controllers/TeacherController.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@ import User from '../models/User';
55
import dbConfig from '../../config/database';
66
import Project from '../models/Project';
77
import Class from '../models/Class';
8+
import ClassProfessional from '../models/ClassProfessional';
89

910
const sequelize = new Sequelize(dbConfig.database, dbConfig.username,
1011
dbConfig.password, { host: dbConfig.host, dialect: dbConfig.dialect });
1112

1213
class TeacherController extends UserController {
1314
async list(req, res) {
1415
try {
15-
const users = await User.findAll();
16-
const plist = await Professionals.findAll();
16+
const users = await User.findAll({ where: { usertype: 1 }, attributes: ['id', 'name'] });
17+
const plist = await Professionals.findAll({ where: { professional_type: 'teacher' } });
1718
return res.json({ users, professionals: plist });
1819
} catch (err) {
1920
return res.status(500).json({ error: err.stack });
@@ -44,6 +45,29 @@ class TeacherController extends UserController {
4445
return res.status(500).json({ error: err.stack });
4546
}
4647
}
48+
49+
async listMyClasses(req, res) {
50+
try {
51+
const list = [];
52+
53+
const relations = await ClassProfessional.findAll({
54+
where: {
55+
fk_idProfessional: req.userId,
56+
},
57+
});
58+
59+
console.log(relations);
60+
61+
for (const relation of relations) {
62+
const class_obj = await Class.findByPk(relation.dataValues.fk_idClass);
63+
list.push(class_obj.dataValues);
64+
}
65+
66+
return res.json({ list });
67+
} catch (err) {
68+
return res.status(500).json({ error: err.stack });
69+
}
70+
}
4771
}
4872

4973
export default new TeacherController();

src/app/models/Class.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class Class extends Model {
1515
// this.hasMany(models.Activity, { through: 'class_project' });
1616
// this.hasMany(models.Event, { through: 'class_project' });
1717
// this.hasMany(models.Teacher, { through: 'class_professional' });
18+
this.belongsToMany(models.Professionals, { as: 'Teacher', through: 'ClassProfessional', foreignKey: 'fk_idClass' });
1819
this.hasMany(models.Child, { foreignKey: 'fk_idClass', as: 'Children' });
1920
this.belongsToMany(models.Project, { as: 'Project', through: 'ClassProject', foreignKey: 'fk_idClass' });
2021
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Model, Sequelize } from 'sequelize';
2+
3+
class ClassProfessional extends Model {
4+
static init(sequelize) {
5+
super.init({
6+
fk_idClass: Sequelize.INTEGER,
7+
fk_idProfessional: Sequelize.INTEGER,
8+
}, {
9+
sequelize,
10+
});
11+
}
12+
}
13+
14+
export default ClassProfessional;

src/app/models/Professionals.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ class Professionals extends Model {
1717

1818
static associate(models) {
1919
this.hasMany(models.Project, { foreignKey: 'fk_idProfessional', as: 'Projects' });
20-
this.hasMany(models.Anotation, { foreignKey: 'fk_idProfessional' });
20+
this.hasMany(models.Anotation, { foreignKey: 'fk_idProfessional'});
21+
this.belongsToMany(models.Class, { as: 'Class', through: 'ClassProfessional', foreignKey: 'fk_idProfessional' });
2122
this.belongsTo(models.Ec, { foreignKey: 'fk_idEc', as: 'ec' });
2223
}
2324
}

src/database/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import Project from '../app/models/Project';
1010
import GuardianChild from '../app/models/GuardianChild';
1111
import ClassProject from '../app/models/ClassProject';
1212
import Anotation from '../app/models/Anotation';
13+
import ClassProfessional from '../app/models/ClassProfessional';
1314

14-
const models = [User, Ec, Class, Child, Professionals, Guardian, Project, GuardianChild, ClassProject, Anotation];
15+
const models = [User, Ec, Class, Child, Professionals, Guardian, Project, GuardianChild, ClassProject, Anotation, ClassProfessional];
1516
const assoc = [Class, Professionals, Project, Child, Guardian, Anotation];
1617

1718
class Database {

src/database/migrations/20210907075434-create-class_professional.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
module.exports = {
2-
up: (queryInterface, Sequelize) => queryInterface.createTable('class_professional', {
2+
up: (queryInterface, Sequelize) => queryInterface.createTable('class_professionals', {
33
id: {
44
allowNull: false,
55
primaryKey: true,
66
type: Sequelize.INTEGER,
77
autoIncrement: true,
88
},
9-
fk_idClass: {
9+
fk_id_class: {
1010
type: Sequelize.INTEGER,
1111
references: { model: 'classes', key: 'id' },
1212
onUpdate: 'CASCADE',
1313
onDelete: 'CASCADE',
1414
},
15-
fk_idProfessional: {
15+
fk_id_professional: {
1616
type: Sequelize.INTEGER,
1717
references: { model: 'professionals', key: 'id' },
1818
onUpdate: 'CASCADE',
@@ -28,5 +28,5 @@ module.exports = {
2828
},
2929
}),
3030

31-
down: async (queryInterface, Sequelize) => queryInterface.dropTable('class_professional'),
31+
down: async (queryInterface, Sequelize) => queryInterface.dropTable('class_professionals'),
3232
};

src/routes.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ routes.get('/adm/list-professionals', TeacherController.list);
3333
routes.get('/adm/list-guardians', GuardianController.list);
3434
routes.get('/adm/list-classes', AdmController.listClasses);
3535
routes.get('/adm/list-anotations', AnotationController.listAll);
36+
routes.delete('/adm/delete-class-teacher', AdmController.deleteTeacherClass);
3637
// routes.get('/adm/list-activities', ActivityController.list);
3738

3839
// Teacher routes
@@ -45,6 +46,7 @@ routes.post('/teacher/create-anotation', AnotationController.create);
4546
routes.put('/teacher/update-anotation', AnotationController.update);
4647
routes.delete('/teacher/delete-anotation/:id', AnotationController.delete);
4748
routes.get('/teacher/list-anotations', AnotationController.listMine);
49+
routes.get('/teacher/list-my-classes', TeacherController.listMyClasses);
4850

4951
// Guardian routes
5052
routes.use('/guardian', Middleware.verifyGuardian);

0 commit comments

Comments
 (0)