This commit is contained in:
[Valentino Heman Budiarto] 2026-06-08 19:21:04 +07:00
parent 87b1330c9d
commit 4afddbed68

View File

@ -76,29 +76,34 @@ func VerifyHardwareCode(c *gin.Context) {
// =====================================================================
// Jika bukan Master Token, jalankan pengecekan ke Database seperti biasa
var jamMulai time.Time
var jamSelesai time.Time
isTokenValid := false
// Menarik start_time dan end_time sekaligus dari Database
type ResultTime struct {
JamMulai time.Time `gorm:"column:start_time"`
JamSelesai time.Time `gorm:"column:end_time"`
}
var result ResultTime
errBooking := config.DB.Table("bookings").
Select("end_time").
Select("start_time, end_time").
Where("redeem_code = ?", tokenInput).
Scan(&result).Error
if errBooking == nil && !result.JamSelesai.IsZero() {
jamMulai = result.JamMulai
jamSelesai = result.JamSelesai
isTokenValid = true
} else {
errSchedule := config.DB.Table("class_schedules").
Select("end_time").
Select("start_time, end_time").
Where("kode_mk = ?", tokenInput).
Scan(&result).Error
if errSchedule == nil && !result.JamSelesai.IsZero() {
jamMulai = result.JamMulai
jamSelesai = result.JamSelesai
isTokenValid = true
}
@ -109,9 +114,28 @@ func VerifyHardwareCode(c *gin.Context) {
return
}
// Samakan tanggalnya menjadi tanggal hari ini agar perbandingannya akurat
jamMulaiHariIni := time.Date(sekarang.Year(), sekarang.Month(), sekarang.Day(),
jamMulai.Hour(), jamMulai.Minute(), jamMulai.Second(), 0, sekarang.Location())
jamSelesaiHariIni := time.Date(sekarang.Year(), sekarang.Month(), sekarang.Day(),
jamSelesai.Hour(), jamSelesai.Minute(), jamSelesai.Second(), 0, sekarang.Location())
// -------------------------------------------------------------
// 🌟 LOGIKA BARU: CEK APAKAH JADWAL SUDAH DIMULAI?
// -------------------------------------------------------------
// Berikan toleransi bisa masuk ruangan maksimal 15 menit sebelum kelas dimulai
batasMasukAwal := jamMulaiHariIni.Add(-15 * time.Minute)
if sekarang.Before(batasMasukAwal) {
// Jika saat ini belum waktunya masuk (masih terlalu awal)
c.JSON(http.StatusForbidden, gin.H{"error": "Jadwal kelas belum dimulai"})
return
}
// -------------------------------------------------------------
// CEK APAKAH JADWAL SUDAH BERAKHIR?
// -------------------------------------------------------------
selisihWaktu := jamSelesaiHariIni.Sub(sekarang)
sisaMenit := int(selisihWaktu.Minutes())
@ -275,4 +299,4 @@ func GetHardwareStatus(c *gin.Context) {
"status": "success",
"data": DeviceStatusCache,
})
}
}