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

80 lines
2.2 KiB
Go

package main
import (
"net/http"
"s-class-backend/config"
"s-class-backend/controllers"
"s-class-backend/middleware"
"s-class-backend/models"
"github.com/gin-gonic/gin"
)
func main() {
// 1. Konek Database
config.ConnectDatabase()
// 2. AutoMigrate (Membuat tabel jika belum ada)
config.DB.AutoMigrate(&models.User{}, &models.Room{}, &models.Booking{})
r := gin.Default()
// 3. CORS Middleware (Agar Frontend bisa masuk)
r.Use(CORSMiddleware())
r.GET("/", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "Server S-CLASS Backend Berjalan!"})
})
// 4. Routes
auth := r.Group("/api/auth")
{
auth.POST("/register", controllers.Register)
auth.POST("/login", controllers.Login)
}
r.POST("/api/verify-code", controllers.VerifyRedeemCode)
protected := r.Group("/api")
protected.Use(middleware.AuthMiddleware())
{
protected.GET("/profile", func(c *gin.Context) {
userID, _ := c.Get("user_id")
role, _ := c.Get("role")
c.JSON(http.StatusOK, gin.H{"message": "Masuk!", "user_id": userID, "role": role})
})
// Rooms
protected.GET("/rooms", controllers.GetRooms)
protected.POST("/rooms", controllers.CreateRoom)
// Bookings
protected.POST("/bookings", controllers.CreateBooking)
protected.GET("/bookings", controllers.GetAllBookings)
protected.PUT("/bookings/:id/status", controllers.UpdateBookingStatus) // <-- Cukup tulis satu kali saja
// Admin (Manage Rooms)
protected.PUT("/admin/rooms/:id/status", controllers.UpdateRoomStatus) // <-- Pastikan baris ini ada
}
// 5. Jalur IoT ESP32 (Di luar protected)
r.POST("/api/sensor/energy", controllers.UpdateRoomPower)
r.Run(":8080")
}
func CORSMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, PATCH")
if c.Request.Method == "OPTIONS" {
c.AbortWithStatus(204)
return
}
c.Next()
}
}