.
This commit is contained in:
parent
3c1a979e17
commit
d9522437ec
@ -34,12 +34,6 @@ var DeviceStatusCache = map[string]string{
|
||||
"projector": "off",
|
||||
}
|
||||
|
||||
// =========================================================================
|
||||
// FUNGSI 1: VERIFIKASI HARDWARE & HITUNG SISA WAKTU DINAMIS
|
||||
// =========================================================================
|
||||
// =========================================================================
|
||||
// FUNGSI 1: VERIFIKASI HARDWARE & HITUNG SISA WAKTU DINAMIS
|
||||
// =========================================================================
|
||||
func VerifyHardwareCode(c *gin.Context) {
|
||||
var req VerifyRequest
|
||||
|
||||
@ -51,7 +45,7 @@ func VerifyHardwareCode(c *gin.Context) {
|
||||
tokenInput := req.Token
|
||||
sekarang := time.Now()
|
||||
|
||||
// 1. Token Master CS
|
||||
// 1. Token Master CS (Cleaning Service)
|
||||
if tokenInput == "CS2026" {
|
||||
fmt.Printf("[VERIFY] Master Token CS digunakan\n")
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
@ -70,15 +64,15 @@ func VerifyHardwareCode(c *gin.Context) {
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// 🌟 PERBAIKAN DATABASE CASTING BUG (Menggunakan String)
|
||||
// TARIK DATA START_TIME & END_TIME MENGGUNAKAN time.Time
|
||||
// -------------------------------------------------------------
|
||||
var jamMulaiStr string
|
||||
var jamSelesaiStr string
|
||||
var jamMulai time.Time
|
||||
var jamSelesai time.Time
|
||||
isTokenValid := false
|
||||
|
||||
type ResultTime struct {
|
||||
JamMulai string `gorm:"column:start_time"`
|
||||
JamSelesai string `gorm:"column:end_time"`
|
||||
JamMulai time.Time `gorm:"column:start_time"`
|
||||
JamSelesai time.Time `gorm:"column:end_time"`
|
||||
}
|
||||
var result ResultTime
|
||||
|
||||
@ -87,9 +81,9 @@ func VerifyHardwareCode(c *gin.Context) {
|
||||
Where("redeem_code = ?", tokenInput).
|
||||
Scan(&result).Error
|
||||
|
||||
if errBooking == nil && result.JamSelesai != "" {
|
||||
jamMulaiStr = result.JamMulai
|
||||
jamSelesaiStr = result.JamSelesai
|
||||
if errBooking == nil && !result.JamSelesai.IsZero() {
|
||||
jamMulai = result.JamMulai
|
||||
jamSelesai = result.JamSelesai
|
||||
isTokenValid = true
|
||||
} else {
|
||||
errSchedule := config.DB.Table("class_schedules").
|
||||
@ -97,9 +91,9 @@ func VerifyHardwareCode(c *gin.Context) {
|
||||
Where("kode_mk = ?", tokenInput).
|
||||
Scan(&result).Error
|
||||
|
||||
if errSchedule == nil && result.JamSelesai != "" {
|
||||
jamMulaiStr = result.JamMulai
|
||||
jamSelesaiStr = result.JamSelesai
|
||||
if errSchedule == nil && !result.JamSelesai.IsZero() {
|
||||
jamMulai = result.JamMulai
|
||||
jamSelesai = result.JamSelesai
|
||||
isTokenValid = true
|
||||
}
|
||||
}
|
||||
@ -109,34 +103,40 @@ func VerifyHardwareCode(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// Memisahkan Jam dan Menit secara manual agar kebal terhadap error format
|
||||
var startHour, startMin, endHour, endMin int
|
||||
fmt.Sscanf(jamMulaiStr, "%d:%d", &startHour, &startMin)
|
||||
fmt.Sscanf(jamSelesaiStr, "%d:%d", &endHour, &endMin)
|
||||
|
||||
// Ekstrak Jam, Menit, Detik langsung dari objek Time (Sangat Aman & Akurat)
|
||||
jamMulaiHariIni := time.Date(sekarang.Year(), sekarang.Month(), sekarang.Day(),
|
||||
startHour, startMin, 0, 0, sekarang.Location())
|
||||
jamMulai.Hour(), jamMulai.Minute(), jamMulai.Second(), 0, sekarang.Location())
|
||||
|
||||
jamSelesaiHariIni := time.Date(sekarang.Year(), sekarang.Month(), sekarang.Day(),
|
||||
endHour, endMin, 0, 0, sekarang.Location())
|
||||
jamSelesai.Hour(), jamSelesai.Minute(), jamSelesai.Second(), 0, sekarang.Location())
|
||||
|
||||
// Toleransi masuk kelas: 15 Menit sebelum jam dimulai
|
||||
// -------------------------------------------------------------
|
||||
// LOGIKA PENOLAKAN TOKEN MASA DEPAN
|
||||
// -------------------------------------------------------------
|
||||
// Toleransi masuk: Hanya bisa masuk 15 menit sebelum jadwal.
|
||||
batasMasukAwal := jamMulaiHariIni.Add(-15 * time.Minute)
|
||||
|
||||
if sekarang.Before(batasMasukAwal) {
|
||||
fmt.Printf("[VERIFY] Ditolak: Kelas %s belum mulai\n", tokenInput)
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "Jadwal kelas belum dimulai"})
|
||||
return
|
||||
}
|
||||
|
||||
// Cek sisa waktu kelas
|
||||
// -------------------------------------------------------------
|
||||
// LOGIKA PENOLAKAN TOKEN KADALUARSA
|
||||
// -------------------------------------------------------------
|
||||
selisihWaktu := jamSelesaiHariIni.Sub(sekarang)
|
||||
sisaMenit := int(selisihWaktu.Minutes())
|
||||
|
||||
if sisaMenit <= 0 {
|
||||
fmt.Printf("[VERIFY] Ditolak: Waktu kelas %s sudah habis\n", tokenInput)
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "Waktu peminjaman sudah habis"})
|
||||
return
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// JIKA LOLOS SEMUA UJIAN: IZINKAN MASUK
|
||||
// -------------------------------------------------------------
|
||||
DeviceStatusCache["lampu1"] = "on"
|
||||
DeviceStatusCache["lampu2"] = "on"
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user