.
This commit is contained in:
parent
8164d7c1db
commit
51a0939a10
@ -164,34 +164,80 @@ func UpdateBookingStatus(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// INPUT UNTUK ESP32
|
// INPUT UNTUK ESP32
|
||||||
type RedeemInput struct {
|
type TokenInput struct {
|
||||||
RedeemCode string `json:"redeem_code" binding:"required"`
|
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) {
|
func VerifyRedeemCode(c *gin.Context) {
|
||||||
var input RedeemInput
|
var input TokenInput
|
||||||
|
|
||||||
if err := c.ShouldBindJSON(&input); err != nil {
|
if err := c.ShouldBindJSON(&input); err != nil {
|
||||||
c.JSON(http.StatusBadRequest, gin.H{"error": "Format data salah"})
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Format data salah"})
|
||||||
return
|
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 {
|
// 1. CARI DI TABEL BOOKING (REDEEM CODE)
|
||||||
c.JSON(http.StatusUnauthorized, gin.H{"error": "Kode tidak valid, belum disetujui, atau sudah digunakan!"})
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
booking.Status = "Completed"
|
// LOGIKA JADWAL KULIAH (Konversi String Jam ke time.Time hari ini)
|
||||||
booking.RedeemCode = ""
|
todayStr := currentTime.Format("2006-01-02")
|
||||||
config.DB.Save(&booking)
|
// 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
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. HITUNG SISA WAKTU
|
||||||
|
sisaWaktuMenit := int(endTime.Sub(currentTime).Minutes())
|
||||||
|
if sisaWaktuMenit < 1 {
|
||||||
|
sisaWaktuMenit = 1
|
||||||
|
}
|
||||||
|
|
||||||
c.JSON(http.StatusOK, gin.H{
|
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,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user