microservices/assignment-db-service/app.js

131 lines
3.3 KiB
JavaScript
Raw Normal View History

2025-04-24 11:36:03 -07:00
const express = require('express');
const { PrismaClient } = require('@prisma/client');
const bcrypt = require('bcrypt');
const app = express();
const prisma = new PrismaClient();
const port = process.env.NODE_PORT || 3000;
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Create Assignment
app.post('/assignments', async (req, res) => {
try {
const {
CampID,
ProgramID,
StudentName,
SnakeGameId,
OriginalFile,
EditableFile,
AssignmentUrl,
Password,
InstructorID,
} = req.body;
const hashedPassword = await bcrypt.hash(Password, 10);
const newAssignment = await prisma.assignment.create({
data: {
CampID,
ProgramID,
StudentName,
SnakeGameId,
OriginalFile,
EditableFile,
AssignmentUrl,
PasswordHash: hashedPassword,
InstructorID,
},
});
res.json({ message: 'Assignment created successfully', assignment: newAssignment });
} catch (err) {
console.error('Error creating assignment:', err.message);
res.status(500).json({ error: err.message });
}
});
// Get Assignments by InstructorID
app.get('/assignments/instructor/:instructorId', async (req, res) => {
try {
const { instructorId } = req.params;
const assignments = await prisma.assignment.findMany({
where: { InstructorID: parseInt(instructorId) },
});
if (assignments.length === 0) {
return res.status(404).json({ message: 'No assignments found for this instructor' });
}
res.json(assignments);
} catch (err) {
console.error('Error fetching assignments:', err.message);
res.status(500).json({ error: err.message });
}
});
// Read Assignment
app.get('/assignments/:id', async (req, res) => {
try {
const assignment = await prisma.assignment.findUnique({
where: { AssignmentID: parseInt(req.params.id) },
});
if (!assignment) {
return res.status(404).json({ message: 'Assignment not found' });
}
res.json(assignment);
} catch (err) {
console.error('Error fetching assignment:', err.message);
res.status(500).json({ error: err.message });
}
});
// Update Assignment
app.put('/assignments/:id', async (req, res) => {
try {
const { id } = req.params;
const data = req.body;
if (data.Password) {
data.PasswordHash = await bcrypt.hash(data.Password, 10);
delete data.Password;
}
const updatedAssignment = await prisma.assignment.update({
where: { AssignmentID: parseInt(id) },
data,
});
res.json({ message: 'Assignment updated successfully', assignment: updatedAssignment });
} catch (err) {
console.error('Error updating assignment:', err.message);
res.status(500).json({ error: err.message });
}
});
// Delete Assignment
app.delete('/assignments/:id', async (req, res) => {
try {
const { id } = req.params;
await prisma.assignment.delete({
where: { AssignmentID: parseInt(id) },
});
res.json({ message: 'Assignment deleted successfully' });
} catch (err) {
console.error('Error deleting assignment:', err.message);
res.status(500).json({ error: err.message });
}
});
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});