.
This commit is contained in:
@@ -45,7 +45,7 @@ func CreateBooking(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 🌟 PERBAIKAN 1: Ambil Role User dari Token
|
||||
// 🌟 Ambil Role User dari Token
|
||||
userRoleInterface, _ := c.Get("role")
|
||||
userRole, _ := userRoleInterface.(string)
|
||||
|
||||
@@ -55,6 +55,21 @@ func CreateBooking(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// =========================================================
|
||||
// 🌟 PERBAIKAN: PROTEKSI STATUS MAINTENANCE RUANGAN
|
||||
// =========================================================
|
||||
var targetRoom models.Room
|
||||
if err := config.DB.First(&targetRoom, input.RoomID).Error; err != nil {
|
||||
c.JSON(http.StatusNotFound, gin.H{"error": "Ruangan tidak ditemukan di database"})
|
||||
return
|
||||
}
|
||||
|
||||
if targetRoom.Status == "Maintenance" {
|
||||
c.JSON(http.StatusForbidden, gin.H{"error": "Akses Ditolak: Ruangan ini sedang dalam perawatan teknis dan tidak dapat dipesan saat ini."})
|
||||
return
|
||||
}
|
||||
// =========================================================
|
||||
|
||||
// Overlap Check (Mencegah bentrok jadwal)
|
||||
var count int64
|
||||
config.DB.Model(&models.Booking{}).Where(
|
||||
@@ -67,7 +82,7 @@ func CreateBooking(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 🌟 PERBAIKAN 1 Lanjutan: Penentuan Status Otomatis
|
||||
// Penentuan Status Otomatis
|
||||
statusPeminjaman := "Pending" // Default untuk student
|
||||
if userRole == "lecturer" {
|
||||
statusPeminjaman = "Approved" // Dosen otomatis disetujui!
|
||||
@@ -80,7 +95,7 @@ func CreateBooking(c *gin.Context) {
|
||||
StartTime: input.StartTime,
|
||||
EndTime: input.EndTime,
|
||||
Purpose: input.Purpose,
|
||||
Status: statusPeminjaman, // <-- Gunakan variabel statusPeminjaman
|
||||
Status: statusPeminjaman,
|
||||
}
|
||||
|
||||
if err := config.DB.Create(&booking).Error; err != nil {
|
||||
@@ -95,7 +110,7 @@ func CreateBooking(c *gin.Context) {
|
||||
})
|
||||
}
|
||||
|
||||
// 🌟 PERBAIKAN 3: Fungsi khusus untuk mengambil riwayat pribadi
|
||||
// Fungsi khusus untuk mengambil riwayat pribadi
|
||||
func GetMyBookings(c *gin.Context) {
|
||||
var bookings []models.Booking
|
||||
|
||||
@@ -150,7 +165,6 @@ func UpdateBookingStatus(c *gin.Context) {
|
||||
|
||||
booking.Status = input.Status
|
||||
|
||||
// 🌟 PERBAIKAN 2: Menghapus blok Save dan JSON ganda yang bikin error
|
||||
if err := config.DB.Save(&booking).Error; err != nil {
|
||||
fmt.Println("🔥 ERROR DARI DATABASE:", err.Error())
|
||||
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
|
||||
@@ -255,4 +269,4 @@ func GetAllBookings(c *gin.Context) {
|
||||
"status": "success",
|
||||
"data": bookings,
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user