added changing password frontend backend

This commit is contained in:
2025-10-13 11:57:27 +02:00
parent 6de3216dcd
commit dec92daf7c
8 changed files with 595 additions and 25 deletions

View File

@@ -365,4 +365,36 @@ export const updateAvailabilities = async (req: AuthRequest, res: Response): Pro
console.error('Error updating availabilities:', error);
res.status(500).json({ error: 'Internal server error' });
}
};
export const changePassword = async (req: AuthRequest, res: Response): Promise<void> => {
try {
const { id } = req.params;
const { currentPassword, newPassword } = req.body;
// Check if employee exists and get password
const employee = await db.get<{ password: string }>('SELECT password FROM employees WHERE id = ?', [id]);
if (!employee) {
res.status(404).json({ error: 'Employee not found' });
return;
}
// Verify current password
const isValidPassword = await bcrypt.compare(currentPassword, employee.password);
if (!isValidPassword) {
res.status(400).json({ error: 'Current password is incorrect' });
return;
}
// Hash new password
const hashedPassword = await bcrypt.hash(newPassword, 10);
// Update password
await db.run('UPDATE employees SET password = ? WHERE id = ?', [hashedPassword, id]);
res.json({ message: 'Password updated successfully' });
} catch (error) {
console.error('Error changing password:', error);
res.status(500).json({ error: 'Internal server error' });
}
};

View File

@@ -710,7 +710,7 @@ export const getTemplates = async (req: Request, res: Response): Promise<void> =
};
// Neue Funktion: Create from Template
export const createFromTemplate = async (req: Request, res: Response): Promise<void> => {
/*export const createFromTemplate = async (req: Request, res: Response): Promise<void> => {
try {
const { templatePlanId, name, startDate, endDate, description } = req.body;
const userId = (req as AuthRequest).user?.userId;
@@ -800,4 +800,4 @@ export const createFromTemplate = async (req: Request, res: Response): Promise<v
console.error('Error creating plan from template:', error);
res.status(500).json({ error: 'Internal server error' });
}
};
};*/

View File

@@ -8,7 +8,8 @@ import {
updateEmployee,
deleteEmployee,
getAvailabilities,
updateAvailabilities
updateAvailabilities,
changePassword
} from '../controllers/employeeController.js';
const router = express.Router();
@@ -22,6 +23,7 @@ router.get('/:id', requireRole(['admin', 'instandhalter']), getEmployee);
router.post('/', requireRole(['admin']), createEmployee);
router.put('/:id', requireRole(['admin']), updateEmployee);
router.delete('/:id', requireRole(['admin']), deleteEmployee);
router.put('/:id/password', requireRole(['admin']), changePassword);
// Availability Routes
router.get('/:employeeId/availabilities', requireRole(['admin', 'instandhalter']), getAvailabilities);

View File

@@ -8,7 +8,7 @@ import {
updateShiftPlan,
deleteShiftPlan,
getTemplates,
createFromTemplate,
//createFromTemplate,
createFromPreset
} from '../controllers/shiftPlanController.js';
@@ -31,7 +31,7 @@ router.get('/:id', getShiftPlan);
router.post('/', requireRole(['admin', 'instandhalter']), createShiftPlan);
// POST create new plan from template
router.post('/from-template', requireRole(['admin', 'instandhalter']), createFromTemplate);
//router.post('/from-template', requireRole(['admin', 'instandhalter']), createFromTemplate);
// POST create new plan from preset
router.post('/from-preset', requireRole(['admin', 'instandhalter']), createFromPreset);