[Valentino Heman Budiarto] 4970220a24 update 15 mei
2026-05-15 18:48:59 +07:00

99 lines
2.7 KiB
Go

package controllers
import (
"net/http"
"s-class-backend/config"
"s-class-backend/models"
"github.com/gin-gonic/gin"
)
// GET ALL ROOMS
func GetRooms(c *gin.Context) {
var rooms []models.Room
if err := config.DB.Find(&rooms).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Gagal mengambil data ruangan"})
return
}
c.JSON(http.StatusOK, gin.H{"data": rooms})
}
// CREATE ROOM
func CreateRoom(c *gin.Context) {
var input models.Room
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if err := config.DB.Create(&input).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Gagal membuat ruangan"})
return
}
c.JSON(http.StatusOK, gin.H{"message": "Ruangan berhasil ditambahkan!", "data": input})
}
// --- STRUKTUR DATA UNTUK MENERIMA JSON ---
type UpdateRoomStatusInput struct {
Status string `json:"status" binding:"required"`
}
type EnergySensorInput struct {
RoomID int `json:"room_id" binding:"required"`
Power float64 `json:"power" binding:"required"`
}
// --- FUNGSI HANDLER ---
// UPDATE ROOM STATUS (Admin: Available <-> Maintenance)
func UpdateRoomStatus(c *gin.Context) {
roomID := c.Param("id")
var input UpdateRoomStatusInput
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
var room models.Room
// KUNCI PERBAIKANNYA: Cukup masukkan `roomID` langsung.
// GORM akan otomatis mencari berdasarkan Primary Key tanpa peduli nama kolomnya.
if err := config.DB.First(&room, roomID).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "Ruangan tidak ditemukan di tabel"})
return
}
// Ubah status dan simpan
room.Status = input.Status
if err := config.DB.Save(&room).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Gagal menyimpan perubahan"})
return
}
c.JSON(http.StatusOK, gin.H{
"message": "Status ruangan berhasil diperbarui",
"data": room,
})
}
// UPDATE ROOM POWER (Menerima data Watt dari ESP32 / Tuya)
func UpdateRoomPower(c *gin.Context) {
var input EnergySensorInput
if err := c.ShouldBindJSON(&input); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": "Format data sensor salah"})
return
}
var room models.Room
if err := config.DB.First(&room, "room_id = ?", input.RoomID).Error; err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": "Ruangan tidak ditemukan"})
return
}
// Pastikan kolom ini sesuai dengan nama di models.Room milikmu (misal: PowerConsumption)
room.PowerConsumption = input.Power
config.DB.Save(&room)
c.JSON(http.StatusOK, gin.H{"message": "Data daya ESP32 berhasil disimpan"})
}