6 maret 2026

This commit is contained in:
[Valentino Heman Budiarto]
2026-03-06 13:53:39 +07:00
parent bad2d21fc2
commit 2a3440ebe9
3 changed files with 69 additions and 21 deletions
+39 -9
View File
@@ -4,7 +4,7 @@ import (
"fmt"
"net/http"
"s-class-backend/config"
"s-class-backend/helpers" // Import helper pembuat kode acak
"s-class-backend/helpers"
"s-class-backend/models"
"time"
@@ -26,7 +26,7 @@ func CreateBooking(c *gin.Context) {
return
}
// --- Handle UUID ---
//Handle UUID
userIDInterface, exists := c.Get("user_id")
if !exists {
c.JSON(http.StatusUnauthorized, gin.H{"error": "User ID tidak ditemukan"})
@@ -51,7 +51,7 @@ func CreateBooking(c *gin.Context) {
return
}
// CEK BENTROK (Overlap Check)
// (Overlap Check)
var count int64
config.DB.Model(&models.Booking{}).Where("room_id = ? AND status != 'Cancelled' AND ((start_time < ? AND end_time > ?) OR (start_time < ? AND end_time > ?) OR (start_time >= ? AND end_time <= ?))",
input.RoomID, input.EndTime, input.StartTime, input.EndTime, input.StartTime, input.StartTime, input.EndTime).Count(&count)
@@ -105,10 +105,10 @@ func GetUserBookings(c *gin.Context) {
}
type UpdateStatusInput struct {
Status string `json:"status" binding:"required"`
Status string `json:"status" binding:"required"`
}
// --- FUNGSI UPDATE STATUS (ADMIN) ---
//UPDATE STATUS (ADMIN)
func UpdateBookingStatus(c *gin.Context) {
bookingID := c.Param("id")
@@ -126,14 +126,12 @@ func UpdateBookingStatus(c *gin.Context) {
booking.Status = input.Status
// 👇 LOGIKA PEMBUATAN REDEEM CODE 👇
//REDEEM CODE
if input.Status == "Approved" {
// Buat kode dari helper jika sebelumnya belum punya kode
if booking.RedeemCode == "" {
booking.RedeemCode = helpers.GenerateRedeemCode()
}
} else if input.Status == "Rejected" || input.Status == "Cancelled" {
// Kosongkan kode jika peminjaman ditolak/dibatalkan
booking.RedeemCode = ""
}
@@ -143,4 +141,36 @@ func UpdateBookingStatus(c *gin.Context) {
"message": "Status booking berhasil diperbarui!",
"data": booking,
})
}
}
//INPUT UNTUK ESP3
type RedeemInput struct {
RedeemCode string `json:"redeem_code" binding:"required"`
}
//VERIFIKASI KODE DARI ESP32
func VerifyRedeemCode(c *gin.Context) {
var input RedeemInput
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Format data salah"})
return
}
var booking models.Booking
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
}
booking.Status = "Completed"
booking.RedeemCode = ""
config.DB.Save(&booking)
c.JSON(http.StatusOK, gin.H{
"message": "Kode valid!",
"room": booking.Room.Name,
"status": "success",
})
}