.
This commit is contained in:
parent
4afddbed68
commit
3c1a979e17
@ -34,6 +34,9 @@ var DeviceStatusCache = map[string]string{
|
|||||||
"projector": "off",
|
"projector": "off",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =========================================================================
|
||||||
|
// FUNGSI 1: VERIFIKASI HARDWARE & HITUNG SISA WAKTU DINAMIS
|
||||||
|
// =========================================================================
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
// FUNGSI 1: VERIFIKASI HARDWARE & HITUNG SISA WAKTU DINAMIS
|
// FUNGSI 1: VERIFIKASI HARDWARE & HITUNG SISA WAKTU DINAMIS
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
@ -48,42 +51,34 @@ func VerifyHardwareCode(c *gin.Context) {
|
|||||||
tokenInput := req.Token
|
tokenInput := req.Token
|
||||||
sekarang := time.Now()
|
sekarang := time.Now()
|
||||||
|
|
||||||
// =====================================================================
|
// 1. Token Master CS
|
||||||
// 🌟 FITUR BARU: MASTER TOKEN UNTUK CS DAN ADMIN (BYPASS DATABASE)
|
|
||||||
// =====================================================================
|
|
||||||
|
|
||||||
// 1. Token Khusus Cleaning Service (Waktu: 60 Menit)
|
|
||||||
if tokenInput == "CS2026" {
|
if tokenInput == "CS2026" {
|
||||||
fmt.Printf("[VERIFY] Master Token Cleaning Service digunakan pada %v\n", sekarang.Format("15:04:05"))
|
fmt.Printf("[VERIFY] Master Token CS digunakan\n")
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"status": "success",
|
"status": "success", "message": "Token CS Valid", "duration_minutes": 60,
|
||||||
"message": "Token CS Valid",
|
|
||||||
"duration_minutes": 60,
|
|
||||||
})
|
})
|
||||||
return // Berhenti di sini, Golang tidak akan mengecek database
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Token Khusus Admin / Teknisi (Waktu: 999 Menit / ~16.5 Jam)
|
// 2. Token Master Admin
|
||||||
if tokenInput == "ADM999" {
|
if tokenInput == "ADM999" {
|
||||||
fmt.Printf("[VERIFY] Master Token Admin digunakan pada %v\n", sekarang.Format("15:04:05"))
|
fmt.Printf("[VERIFY] Master Token Admin digunakan\n")
|
||||||
c.JSON(http.StatusOK, gin.H{
|
c.JSON(http.StatusOK, gin.H{
|
||||||
"status": "success",
|
"status": "success", "message": "Token Admin Valid", "duration_minutes": 999,
|
||||||
"message": "Token Admin Valid",
|
|
||||||
"duration_minutes": 999,
|
|
||||||
})
|
})
|
||||||
return // Berhenti di sini, Golang tidak akan mengecek database
|
return
|
||||||
}
|
}
|
||||||
// =====================================================================
|
|
||||||
|
|
||||||
// Jika bukan Master Token, jalankan pengecekan ke Database seperti biasa
|
// -------------------------------------------------------------
|
||||||
var jamMulai time.Time
|
// 🌟 PERBAIKAN DATABASE CASTING BUG (Menggunakan String)
|
||||||
var jamSelesai time.Time
|
// -------------------------------------------------------------
|
||||||
|
var jamMulaiStr string
|
||||||
|
var jamSelesaiStr string
|
||||||
isTokenValid := false
|
isTokenValid := false
|
||||||
|
|
||||||
// Menarik start_time dan end_time sekaligus dari Database
|
|
||||||
type ResultTime struct {
|
type ResultTime struct {
|
||||||
JamMulai time.Time `gorm:"column:start_time"`
|
JamMulai string `gorm:"column:start_time"`
|
||||||
JamSelesai time.Time `gorm:"column:end_time"`
|
JamSelesai string `gorm:"column:end_time"`
|
||||||
}
|
}
|
||||||
var result ResultTime
|
var result ResultTime
|
||||||
|
|
||||||
@ -92,9 +87,9 @@ func VerifyHardwareCode(c *gin.Context) {
|
|||||||
Where("redeem_code = ?", tokenInput).
|
Where("redeem_code = ?", tokenInput).
|
||||||
Scan(&result).Error
|
Scan(&result).Error
|
||||||
|
|
||||||
if errBooking == nil && !result.JamSelesai.IsZero() {
|
if errBooking == nil && result.JamSelesai != "" {
|
||||||
jamMulai = result.JamMulai
|
jamMulaiStr = result.JamMulai
|
||||||
jamSelesai = result.JamSelesai
|
jamSelesaiStr = result.JamSelesai
|
||||||
isTokenValid = true
|
isTokenValid = true
|
||||||
} else {
|
} else {
|
||||||
errSchedule := config.DB.Table("class_schedules").
|
errSchedule := config.DB.Table("class_schedules").
|
||||||
@ -102,9 +97,9 @@ func VerifyHardwareCode(c *gin.Context) {
|
|||||||
Where("kode_mk = ?", tokenInput).
|
Where("kode_mk = ?", tokenInput).
|
||||||
Scan(&result).Error
|
Scan(&result).Error
|
||||||
|
|
||||||
if errSchedule == nil && !result.JamSelesai.IsZero() {
|
if errSchedule == nil && result.JamSelesai != "" {
|
||||||
jamMulai = result.JamMulai
|
jamMulaiStr = result.JamMulai
|
||||||
jamSelesai = result.JamSelesai
|
jamSelesaiStr = result.JamSelesai
|
||||||
isTokenValid = true
|
isTokenValid = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,28 +109,26 @@ func VerifyHardwareCode(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// Samakan tanggalnya menjadi tanggal hari ini agar perbandingannya akurat
|
// 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)
|
||||||
|
|
||||||
jamMulaiHariIni := time.Date(sekarang.Year(), sekarang.Month(), sekarang.Day(),
|
jamMulaiHariIni := time.Date(sekarang.Year(), sekarang.Month(), sekarang.Day(),
|
||||||
jamMulai.Hour(), jamMulai.Minute(), jamMulai.Second(), 0, sekarang.Location())
|
startHour, startMin, 0, 0, sekarang.Location())
|
||||||
|
|
||||||
jamSelesaiHariIni := time.Date(sekarang.Year(), sekarang.Month(), sekarang.Day(),
|
jamSelesaiHariIni := time.Date(sekarang.Year(), sekarang.Month(), sekarang.Day(),
|
||||||
jamSelesai.Hour(), jamSelesai.Minute(), jamSelesai.Second(), 0, sekarang.Location())
|
endHour, endMin, 0, 0, sekarang.Location())
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// Toleransi masuk kelas: 15 Menit sebelum jam dimulai
|
||||||
// 🌟 LOGIKA BARU: CEK APAKAH JADWAL SUDAH DIMULAI?
|
|
||||||
// -------------------------------------------------------------
|
|
||||||
// Berikan toleransi bisa masuk ruangan maksimal 15 menit sebelum kelas dimulai
|
|
||||||
batasMasukAwal := jamMulaiHariIni.Add(-15 * time.Minute)
|
batasMasukAwal := jamMulaiHariIni.Add(-15 * time.Minute)
|
||||||
|
|
||||||
if sekarang.Before(batasMasukAwal) {
|
if sekarang.Before(batasMasukAwal) {
|
||||||
// Jika saat ini belum waktunya masuk (masih terlalu awal)
|
|
||||||
c.JSON(http.StatusForbidden, gin.H{"error": "Jadwal kelas belum dimulai"})
|
c.JSON(http.StatusForbidden, gin.H{"error": "Jadwal kelas belum dimulai"})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
// Cek sisa waktu kelas
|
||||||
// CEK APAKAH JADWAL SUDAH BERAKHIR?
|
|
||||||
// -------------------------------------------------------------
|
|
||||||
selisihWaktu := jamSelesaiHariIni.Sub(sekarang)
|
selisihWaktu := jamSelesaiHariIni.Sub(sekarang)
|
||||||
sisaMenit := int(selisihWaktu.Minutes())
|
sisaMenit := int(selisihWaktu.Minutes())
|
||||||
|
|
||||||
@ -144,9 +137,6 @@ func VerifyHardwareCode(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------
|
|
||||||
// OPTIONAL: Jika token benar, paksa otomatis catat Lampu ON di Web
|
|
||||||
// -------------------------------------------------------------
|
|
||||||
DeviceStatusCache["lampu1"] = "on"
|
DeviceStatusCache["lampu1"] = "on"
|
||||||
DeviceStatusCache["lampu2"] = "on"
|
DeviceStatusCache["lampu2"] = "on"
|
||||||
|
|
||||||
@ -299,4 +289,4 @@ func GetHardwareStatus(c *gin.Context) {
|
|||||||
"status": "success",
|
"status": "success",
|
||||||
"data": DeviceStatusCache,
|
"data": DeviceStatusCache,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user