MIF_E31222519/API/controllers/HistoryAbsensiController.js

62 lines
1.9 KiB
JavaScript

const jwt = require('jsonwebtoken');
const HistoryAbsensi = require('../models/history_absensi');
const { KodePembelajaran, Pelajaran } = require('../models');
exports.getHistoryAbsensiByToken = async (req, res) => {
try {
const token = req.header("Authorization")?.replace("Bearer ", "");
if (!token) {
return res.status(401).json({ status: "error", message: "Token tidak ditemukan" });
}
const decoded = jwt.verify(token, "secret_key");
const id_siswa = decoded.id_siswa;
const history = await HistoryAbsensi.findAll({
where: { id_siswa },
attributes: [
'id_historyabsensi',
'waktu_absen',
'status',
'keterangan_absen',
'foto_absen',
'id_kodepembelajaran'
],
include: [
{
model: KodePembelajaran,
as: "kode_pembelajaran_history",
attributes: ['id_pelajaran'],
include: [
{
model: Pelajaran,
as: 'Pelajaran',
attributes: ['nama_pelajaran']
}
]
}
]
});
if (!history.length) {
return res.status(404).json({ status: "error", message: "Riwayat absensi tidak ditemukan" });
}
const baseUrl = `${req.protocol}://${req.get('host')}`;
const formatted = history.map(item => ({
id_historyabsensi: item.id_historyabsensi,
waktu_absen: item.waktu_absen,
status: item.status,
keterangan_absen: item.keterangan_absen || "-",
foto_absen: item.foto_absen ? `${baseUrl}/uploads/absensi/${item.foto_absen}` : null,
nama_pelajaran: item.kode_pembelajaran_history?.Pelajaran?.nama_pelajaran || "Tidak diketahui"
}));
res.status(200).json({ status: "success", data: formatted });
} catch (error) {
res.status(500).json({ status: "error", message: "Terjadi kesalahan pada server", error: error.message });
}
};