From 3f17b48e66d63d578b37843ab2b2a2683587a9a2 Mon Sep 17 00:00:00 2001 From: Ekemiben Date: Wed, 21 Dec 2022 15:04:51 +0100 Subject: [PATCH 1/2] teacher crud --- src/controllers/TeacherController.js | 123 ++++++++++++++++++ .../20221030101838-create-class-teacher.js | 15 ++- .../20221030102005-create-class-student.js | 2 +- src/db/models/classteacher.js | 1 + src/db/models/user.js | 2 + src/index.js | 2 + src/routers/TeacherRouter.js | 13 ++ src/services/TeacherServices.js | 68 ++++++++++ 8 files changed, 221 insertions(+), 5 deletions(-) create mode 100644 src/controllers/TeacherController.js create mode 100644 src/routers/TeacherRouter.js create mode 100644 src/services/TeacherServices.js diff --git a/src/controllers/TeacherController.js b/src/controllers/TeacherController.js new file mode 100644 index 0000000..10060da --- /dev/null +++ b/src/controllers/TeacherController.js @@ -0,0 +1,123 @@ +import TeacherService from '../services/TeacherServices.js' +import Util from '../utils/Utils.js'; + +const util = new Util(); + +class teacherController { + static async home(req, res) { + res.send(`

Welcome to the teacher's Route

`) + } + + static async getAllTeachers(req, res) { + try { + const allTeacher = await TeacherService.getAllTeachers(); + if (allTeacher.length > 0) { + util.setSuccess(200, 'teachers retrieved', allTeacher); + } else { + util.setFound(400, 'No teahcer found in the database'); + } + return util.send(res); + } catch (error) { + util.setError(400, error.message); + return util.send(res); + } + } + + static async addTeacher(req, res) { + if (!req.body.teacherId || !req.body.classId ) { + util.setError(400, 'Please provide complete details of the teacher'); + return util.send(res); + } + const newTeacher = req.body; + try { + const createdTeacher = await TeacherService.addTeacher(newTeacher); + util.setSuccess(201, 'Teacher Added Successfully!', createdTeacher); + return util.send(res); + } catch (error) { + util.setError(400, error.message); + return util.send(res); + } + } + + static async updatedTeacher(req, res) { + const alteredTeacher = req.body; + const { id } = req.params; + if (!util.checkIfValidUUID(id)) { + util.setError(400, 'Please input a valid Id'); + return util.send(res); + } + try { + const updateTeacher = await TeacherService.updateTeacher(id, alteredTeacher); + if (!updateTeacher) { + util.setError(404, `Cannot find a teacher with the id: ${id}`); + } else { + util.setSuccess(200, 'Teacher updated', updateTeacher); + } + return util.send(res); + } catch (error) { + util.setError(404, error.message); + return util.send(res); + } + } + + static async getATeacher(req, res) { + const { id } = req.params; + + if (!util.checkIfValidUUID(id)) { + util.setError(400, 'Please input a valid numeric value'); + return util.send(res); + } + + try { + const theTeacher = await TeacherService.getATeacher(id); + + if (!theTeacher) { + util.setError(404, `Cannot find a teacher with the id ${id}`); + } else { + util.setSuccess(200, 'Found Teacher', theTeacher); + } + return util.send(res); + } catch (error) { + util.setError(404, error.message); + return util.send(res); + } + } + + + + + // static getATeacher = async(req, res)=> { + // try{ + // const teacherById = await TeacherService.findById(req.params.id) + // res.json(teacherById) + // }catch(err){ + // res.send('Error' + err) + // } + + // } + + static async deleteTeacher(req, res) { + const { id } = req.params; + + if (!util.checkIfValidUUID(id)) { + util.setError(400, 'Please provide a numeric value'); + return util.send(res); + } + + try { + const teacherToDelete = await TeacherService.deleteTeacher(id); + + if (teacherToDelete) { + util.setSuccess(200, `Teacher with ${id} deleted`); + } else { + util.setError(404, `Teacher with the id ${id} cannot be found`); + } + return util.send(res); + } catch (error) { + util.setError(400, error.message); + return util.send(res); + } + } +} + +export default teacherController; \ No newline at end of file diff --git a/src/db/migrations/20221030101838-create-class-teacher.js b/src/db/migrations/20221030101838-create-class-teacher.js index a7efd88..ad8451a 100644 --- a/src/db/migrations/20221030101838-create-class-teacher.js +++ b/src/db/migrations/20221030101838-create-class-teacher.js @@ -4,13 +4,20 @@ module.exports = { async up(queryInterface, Sequelize) { await queryInterface.createTable('ClassTeachers', { id: { + type: Sequelize.UUID, allowNull: false, - autoIncrement: true, - primaryKey: true, - type: Sequelize.INTEGER + defaultValue:Sequelize.UUIDV4, + }, classId: { - type: Sequelize.STRING + type: Sequelize.UUID, + allowNull:false, + foreignKey:true + }, + teacherId:{ + type: Sequelize.UUID, + allowNull:false, + foreignKey:true }, createdAt: { allowNull: false, diff --git a/src/db/migrations/20221030102005-create-class-student.js b/src/db/migrations/20221030102005-create-class-student.js index 6d4a512..b6cf2b6 100644 --- a/src/db/migrations/20221030102005-create-class-student.js +++ b/src/db/migrations/20221030102005-create-class-student.js @@ -8,7 +8,7 @@ module.exports = { await queryInterface.createTable('ClassStudents', { id: { allowNull: false, - autoIncrement: true, + // autoIncrement: true, primaryKey: true, type: Sequelize.UUID }, diff --git a/src/db/models/classteacher.js b/src/db/models/classteacher.js index 49d0dae..2ff4161 100644 --- a/src/db/models/classteacher.js +++ b/src/db/models/classteacher.js @@ -17,6 +17,7 @@ module.exports = (sequelize, DataTypes) => { ClassTeacher.init({ id:{ type: DataTypes.UUID, + defaultValue:DataTypes.UUIDV4, allowNull:false, primaryKey: true }, diff --git a/src/db/models/user.js b/src/db/models/user.js index 529fd28..90e588b 100644 --- a/src/db/models/user.js +++ b/src/db/models/user.js @@ -16,6 +16,8 @@ module.exports = (sequelize, DataTypes) => { User.hasMany(models.Message, {foreignKey: 'senderId', as: 'sender'}); User.hasMany(models.Message, {foreignKey: 'receiverId', as: 'receiver'}); User.belongsTo(models.Role, {foreignKey: 'roleId', as: 'role'}) + User.hasMany(models.Class, {foreignKey: 'classId', as: 'class'}); + User.hasMany(models.User, {foreignKey: 'teacherId', as: 'teacher'}); } } User.init({ diff --git a/src/index.js b/src/index.js index 2c7c9a7..3eb809f 100644 --- a/src/index.js +++ b/src/index.js @@ -2,6 +2,7 @@ import express from "express"; import dotenv from "dotenv"; import messageRouter from "./routers/MessageRouter.js"; import { studentRouter } from './routers/studentsRoutes.js'; +import {teacherRouter} from "./routers/TeacherRouter.js"; const app = express(); dotenv.config(); @@ -10,6 +11,7 @@ app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.use('/api/message', messageRouter); app.use('/api/students', studentRouter); +app.use("/api/teacher", teacherRouter) app.get('/', (req, res) => { diff --git a/src/routers/TeacherRouter.js b/src/routers/TeacherRouter.js new file mode 100644 index 0000000..2e0176c --- /dev/null +++ b/src/routers/TeacherRouter.js @@ -0,0 +1,13 @@ +import { Router } from "express"; +import teacherController from '../controllers/TeacherController.js' + +const teacherRouter = Router(); + +teacherRouter.get('/', teacherController.getAllTeachers); +teacherRouter.get('/home', teacherController.home); +teacherRouter.post('/', teacherController.addTeacher); +teacherRouter.get('/:id', teacherController.getATeacher); +teacherRouter.put('/:id', teacherController.updatedTeacher); +teacherRouter.delete('/:id', teacherController.deleteTeacher); + +export { teacherRouter }; \ No newline at end of file diff --git a/src/services/TeacherServices.js b/src/services/TeacherServices.js new file mode 100644 index 0000000..6f58930 --- /dev/null +++ b/src/services/TeacherServices.js @@ -0,0 +1,68 @@ +import database from '../db/models/index.js'; + +class TeacherService { + static async getAllTeachers() { + try { + const result = await database.ClassTeacher.findAll(); + return result; + } catch (error) { + throw error; + } + } + + static async addTeacher(newTeacher) { + try { + const result = await database.ClassTeacher.create(newTeacher); + return result; + } catch (error) { + throw error; + } + } + + static async updateTeacher(id, updateTeacher) { + try { + const teacherToUpdate = await database.ClassTeacher.findOne({ + where: { id: id } + }); + + if (teacherToUpdate) { + await database.ClassTeacher.update(updateTeacher, { where: { id: id } }); + + return updateTeacher; + } + return null; + } catch (error) { + throw error; + } + } + + static async getATeacher(id) { + try { + const allTeacher = await database.ClassTeacher.findOne({ + where: { id: id } + }); + + return allTeacher; + } catch (error) { + throw error; + } + } + + static async deleteTeacher(id) { + try { + const TeacherToDelete = await database.ClassTeacher.findOne({ where: { id: id } }); + + if (TeacherToDelete) { + const deletedTeacher = await database.ClassTeacher.destroy({ + where: { id: id } + }); + return deletedTeacher; + } + return null; + } catch (error) { + throw error; + } + } +} + +export default TeacherService; \ No newline at end of file From 1f7ebd005d0234d9434404067c4aad9bcc8fab2b Mon Sep 17 00:00:00 2001 From: Ekemiben Date: Wed, 21 Dec 2022 16:47:20 +0100 Subject: [PATCH 2/2] everythin is fine you can test --- src/controllers/TeacherController.js | 24 ++++++++++++------------ src/utils/Utils.js | 2 ++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/controllers/TeacherController.js b/src/controllers/TeacherController.js index 10060da..5f8ff22 100644 --- a/src/controllers/TeacherController.js +++ b/src/controllers/TeacherController.js @@ -42,10 +42,10 @@ class teacherController { static async updatedTeacher(req, res) { const alteredTeacher = req.body; const { id } = req.params; - if (!util.checkIfValidUUID(id)) { - util.setError(400, 'Please input a valid Id'); - return util.send(res); - } + // if (!util.checkIfValidUUID(id)) { + // util.setError(400, 'Please input a valid Id'); + // return util.send(res); + // } try { const updateTeacher = await TeacherService.updateTeacher(id, alteredTeacher); if (!updateTeacher) { @@ -63,10 +63,10 @@ class teacherController { static async getATeacher(req, res) { const { id } = req.params; - if (!util.checkIfValidUUID(id)) { - util.setError(400, 'Please input a valid numeric value'); - return util.send(res); - } + // if (!util.checkIfValidUUID(id)) { + // util.setError(400, 'Please input a valid numeric value'); + // return util.send(res); + // } try { const theTeacher = await TeacherService.getATeacher(id); @@ -99,10 +99,10 @@ class teacherController { static async deleteTeacher(req, res) { const { id } = req.params; - if (!util.checkIfValidUUID(id)) { - util.setError(400, 'Please provide a numeric value'); - return util.send(res); - } + // if (!util.checkIfValidUUID(id)) { + // util.setError(400, 'Please provide a numeric value'); + // return util.send(res); + // } try { const teacherToDelete = await TeacherService.deleteTeacher(id); diff --git a/src/utils/Utils.js b/src/utils/Utils.js index 9aa63c3..20f9b40 100644 --- a/src/utils/Utils.js +++ b/src/utils/Utils.js @@ -34,4 +34,6 @@ export default class Util { message: this.message, }); } + + } \ No newline at end of file