130 lines
4.0 KiB
Go
130 lines
4.0 KiB
Go
package controllers
|
|
|
|
import (
|
|
"net/http"
|
|
"s-class-backend/config"
|
|
"s-class-backend/models"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// Struktur data untuk menerima input dari Frontend (Form Modal)
|
|
type ScheduleInput struct {
|
|
KodeMK string `json:"kode_mk" binding:"required"`
|
|
NamaMK string `json:"nama_mk" binding:"required"`
|
|
RoomID int `json:"room_id" binding:"required"` // 🌟 PERBAIKAN: Ubah uint menjadi int
|
|
Hari string `json:"hari" binding:"required"`
|
|
JamMulai string `json:"jam_mulai" binding:"required"`
|
|
JamSelesai string `json:"jam_selesai" binding:"required"`
|
|
JumlahSks int `json:"jumlah_sks" binding:"required"`
|
|
}
|
|
|
|
// =========================================================
|
|
// 1. GET SCHEDULES (Menampilkan Data ke Tabel/Kalender)
|
|
// =========================================================
|
|
func GetSchedules(c *gin.Context) {
|
|
var schedules []models.ClassSchedule
|
|
|
|
// Mengambil semua data jadwal dan diurutkan berdasarkan Hari dan Jam Mulai
|
|
if err := config.DB.Order("hari, jam_mulai").Find(&schedules).Error; err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "Gagal mengambil data jadwal kuliah"})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"data": schedules,
|
|
})
|
|
}
|
|
|
|
// =========================================================
|
|
// 2. CREATE SCHEDULE (Menambah Jadwal Baru)
|
|
// =========================================================
|
|
func CreateSchedule(c *gin.Context) {
|
|
var input ScheduleInput
|
|
if err := c.ShouldBindJSON(&input); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Format data tidak valid: " + err.Error()})
|
|
return
|
|
}
|
|
|
|
newSchedule := models.ClassSchedule{
|
|
KodeMK: input.KodeMK,
|
|
NamaMK: input.NamaMK,
|
|
RoomID: input.RoomID,
|
|
Hari: input.Hari,
|
|
JamMulai: input.JamMulai,
|
|
JamSelesai: input.JamSelesai,
|
|
JumlahSks: input.JumlahSks,
|
|
}
|
|
|
|
if err := config.DB.Create(&newSchedule).Error; err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "Gagal menyimpan jadwal baru ke database"})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusCreated, gin.H{
|
|
"message": "Jadwal berhasil ditambahkan",
|
|
"data": newSchedule,
|
|
})
|
|
}
|
|
|
|
// =========================================================
|
|
// 3. UPDATE SCHEDULE (Mengedit Jadwal Saat UTS/Berubah)
|
|
// =========================================================
|
|
func UpdateSchedule(c *gin.Context) {
|
|
scheduleID := c.Param("id")
|
|
|
|
var input ScheduleInput
|
|
if err := c.ShouldBindJSON(&input); err != nil {
|
|
c.JSON(http.StatusBadRequest, gin.H{"error": "Format data tidak valid"})
|
|
return
|
|
}
|
|
|
|
var schedule models.ClassSchedule
|
|
// Cari jadwal lama di database berdasarkan ID
|
|
if err := config.DB.First(&schedule, scheduleID).Error; err != nil {
|
|
c.JSON(http.StatusNotFound, gin.H{"error": "Jadwal tidak ditemukan"})
|
|
return
|
|
}
|
|
|
|
// Timpa data lama dengan inputan baru dari Admin
|
|
schedule.KodeMK = input.KodeMK
|
|
schedule.NamaMK = input.NamaMK
|
|
schedule.RoomID = input.RoomID
|
|
schedule.Hari = input.Hari
|
|
schedule.JamMulai = input.JamMulai
|
|
schedule.JamSelesai = input.JamSelesai
|
|
schedule.JumlahSks = input.JumlahSks
|
|
|
|
// Simpan perubahan ke database
|
|
if err := config.DB.Save(&schedule).Error; err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "Gagal memperbarui jadwal"})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{
|
|
"message": "Jadwal berhasil diperbarui",
|
|
"data": schedule,
|
|
})
|
|
}
|
|
|
|
// =========================================================
|
|
// 4. DELETE SCHEDULE (Menghapus Jadwal)
|
|
// =========================================================
|
|
func DeleteSchedule(c *gin.Context) {
|
|
scheduleID := c.Param("id")
|
|
|
|
var schedule models.ClassSchedule
|
|
// Pastikan data yang mau dihapus itu memang ada
|
|
if err := config.DB.First(&schedule, scheduleID).Error; err != nil {
|
|
c.JSON(http.StatusNotFound, gin.H{"error": "Jadwal tidak ditemukan"})
|
|
return
|
|
}
|
|
|
|
// Hapus secara permanen dari database
|
|
if err := config.DB.Delete(&schedule).Error; err != nil {
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "Gagal menghapus jadwal"})
|
|
return
|
|
}
|
|
|
|
c.JSON(http.StatusOK, gin.H{"message": "Jadwal berhasil dihapus"})
|
|
} |