.
This commit is contained in:
parent
8164d7c1db
commit
51a0939a10
@ -164,34 +164,80 @@ func UpdateBookingStatus(c *gin.Context) {
|
||||
}
|
||||
|
||||
// INPUT UNTUK ESP32
|
||||
type RedeemInput struct {
|
||||
RedeemCode string `json:"redeem_code" binding:"required"`
|
||||
type TokenInput struct {
|
||||
Token string `json:"token" binding:"required"` // Berubah menjadi 'token' menyesuaikan payload ESP32
|
||||
}
|
||||
|
||||
// VERIFIKASI KODE DARI ESP32
|
||||
// VERIFIKASI KODE DARI ESP32 (Booking & Jadwal Kuliah)
|
||||
func VerifyRedeemCode(c *gin.Context) {
|
||||
var input RedeemInput
|
||||
var input TokenInput
|
||||
|
||||
if err := c.ShouldBindJSON(&input); err != nil {
|
||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Format data salah"})
|
||||
return
|
||||
}
|
||||
|
||||
var booking models.Booking
|
||||
currentTime := time.Now()
|
||||
var endTime time.Time
|
||||
var roomName string
|
||||
|
||||
if err := config.DB.Preload("Room").First(&booking, "redeem_code = ? AND status = 'Approved'", input.RedeemCode).Error; err != nil {
|
||||
c.JSON(http.StatusUnauthorized, gin.H{"error": "Kode tidak valid, belum disetujui, atau sudah digunakan!"})
|
||||
return
|
||||
// 1. CARI DI TABEL BOOKING (REDEEM CODE)
|
||||
var booking models.Booking
|
||||
errBooking := config.DB.Preload("Room").First(&booking, "redeem_code = ? AND status = 'Approved'", input.Token).Error
|
||||
|
||||
if errBooking == nil {
|
||||
// LOGIKA BOOKING (Sudah menggunakan time.Time)
|
||||
if currentTime.Before(booking.StartTime) {
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "Belum waktunya peminjaman!"})
|
||||
return
|
||||
}
|
||||
if currentTime.After(booking.EndTime) {
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "Waktu peminjaman sudah habis!"})
|
||||
return
|
||||
}
|
||||
endTime = booking.EndTime
|
||||
roomName = booking.Room.Name
|
||||
|
||||
} else {
|
||||
// 2. JIKA TIDAK KETEMU, CARI DI TABEL JADWAL KELAS (KODE MK)
|
||||
var schedule models.ClassSchedule
|
||||
errSchedule := config.DB.Preload("Room").First(&schedule, "kode_mk = ?", input.Token).Error
|
||||
|
||||
if errSchedule != nil {
|
||||
c.JSON(http.StatusUnauthorized, gin.H{"error": "Token atau Kode MK tidak valid!"})
|
||||
return
|
||||
}
|
||||
|
||||
// LOGIKA JADWAL KULIAH (Konversi String Jam ke time.Time hari ini)
|
||||
todayStr := currentTime.Format("2006-01-02")
|
||||
// Gabungkan tanggal hari ini dengan jam dari database (JamMulai & JamSelesai)
|
||||
startTime, _ := time.Parse("2006-01-02 15:04:05", todayStr+" "+schedule.JamMulai)
|
||||
endTimeParsed, _ := time.Parse("2006-01-02 15:04:05", todayStr+" "+schedule.JamSelesai)
|
||||
|
||||
if currentTime.Before(startTime) {
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "Belum waktunya jadwal kuliah!"})
|
||||
return
|
||||
}
|
||||
if currentTime.After(endTimeParsed) {
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "Waktu perkuliahan sudah habis!"})
|
||||
return
|
||||
}
|
||||
|
||||
endTime = endTimeParsed
|
||||
roomName = schedule.Room.Name
|
||||
}
|
||||
|
||||
booking.Status = "Completed"
|
||||
booking.RedeemCode = ""
|
||||
config.DB.Save(&booking)
|
||||
// 3. HITUNG SISA WAKTU
|
||||
sisaWaktuMenit := int(endTime.Sub(currentTime).Minutes())
|
||||
if sisaWaktuMenit < 1 {
|
||||
sisaWaktuMenit = 1
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"message": "Kode valid!",
|
||||
"room": booking.Room.Name,
|
||||
"status": "success",
|
||||
"status": "success",
|
||||
"message": "Token valid!",
|
||||
"room": roomName,
|
||||
"duration_minutes": sisaWaktuMenit,
|
||||
})
|
||||
}
|
||||
|
||||
@ -208,4 +254,4 @@ func GetAllBookings(c *gin.Context) {
|
||||
"status": "success",
|
||||
"data": bookings,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user