From 4afddbed68fa5efd15eb587d8d59be6f2da1018b Mon Sep 17 00:00:00 2001 From: "[Valentino Heman Budiarto]" <[hemanvalentino@gmail.com]> Date: Mon, 8 Jun 2026 19:21:04 +0700 Subject: [PATCH] . --- backend/controllers/hardwarecontroller.go | 30 ++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/backend/controllers/hardwarecontroller.go b/backend/controllers/hardwarecontroller.go index 0ca5882..e44ce23 100644 --- a/backend/controllers/hardwarecontroller.go +++ b/backend/controllers/hardwarecontroller.go @@ -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, }) -} +} \ No newline at end of file