This commit is contained in:
Matthias Hochmeister
2026-03-14 14:10:05 +01:00
parent 992ca8e104
commit 8d03c13bee
7 changed files with 227 additions and 10 deletions

View File

@@ -271,6 +271,20 @@ class MemberController {
res.status(500).json({ success: false, message: 'Fehler beim Laden der Fahrgenehmigungen.' });
}
}
/**
* GET /api/members/:userId/ausbildungen
*/
async getAusbildungen(req: Request, res: Response): Promise<void> {
try {
const { userId } = req.params as Record<string, string>;
const data = await memberService.getAusbildungen(userId);
res.status(200).json({ success: true, data });
} catch (error) {
logger.error('getAusbildungen error', { error, userId: req.params.userId });
res.status(500).json({ success: false, message: 'Fehler beim Laden der Ausbildungen.' });
}
}
}
export default new MemberController();

View File

@@ -57,6 +57,12 @@ router.get(
memberController.getFahrgenehmigungen.bind(memberController)
);
router.get(
'/:userId/ausbildungen',
requirePermission('members:read'),
memberController.getAusbildungen.bind(memberController)
);
/**
* Inline middleware for PATCH /:userId.
* Enforces that the caller is either the profile owner OR holds members:write.

View File

@@ -683,6 +683,25 @@ class MemberService {
return [];
}
}
/**
* Returns all Ausbildungen (training courses) for a given user from the FDISK-synced table.
*/
async getAusbildungen(userId: string): Promise<any[]> {
try {
const result = await pool.query(
`SELECT id, kursname, kurs_datum, ablaufdatum, ort, bemerkung, status, created_at
FROM ausbildung
WHERE user_id = $1
ORDER BY kurs_datum DESC NULLS LAST, created_at DESC`,
[userId]
);
return result.rows;
} catch (error) {
logger.error('Error fetching Ausbildungen', { error, userId });
return [];
}
}
}
export default new MemberService();