88 lines
2.1 KiB
Go
88 lines
2.1 KiB
Go
package middleware
|
|
|
|
import (
|
|
"fmt"
|
|
"gestion/db"
|
|
"log"
|
|
"net/http"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
func OrderHoursMiddleware(c *gin.Context) {
|
|
loc, err := time.LoadLocation("Europe/Paris")
|
|
if err != nil {
|
|
loc = time.UTC
|
|
}
|
|
now := time.Now().In(loc)
|
|
weekday := now.Weekday()
|
|
hour := now.Hour()
|
|
min := now.Minute()
|
|
|
|
// Récupérer le planning depuis les settings DB
|
|
database := c.MustGet("database").(*db.Database)
|
|
settings, err := database.GetSettings()
|
|
if err != nil {
|
|
log.Printf("⚠️ [CLOCK-MWARE] Erreur lecture settings: %v — accès autorisé par défaut", err)
|
|
c.Next()
|
|
return
|
|
}
|
|
|
|
sched := settings.DeliverySchedule
|
|
var day db.DaySchedule
|
|
switch weekday {
|
|
case time.Monday:
|
|
day = sched.Monday
|
|
case time.Tuesday:
|
|
day = sched.Tuesday
|
|
case time.Wednesday:
|
|
day = sched.Wednesday
|
|
case time.Thursday:
|
|
day = sched.Thursday
|
|
case time.Friday:
|
|
day = sched.Friday
|
|
case time.Saturday:
|
|
day = sched.Saturday
|
|
case time.Sunday:
|
|
day = sched.Sunday
|
|
}
|
|
|
|
if !day.Enabled {
|
|
log.Printf("❌ [CLOCK-MWARE] Commande refusée — jour fermé (%s)", weekday)
|
|
c.JSON(http.StatusForbidden, gin.H{
|
|
"error": "Commandes non disponibles aujourd'hui",
|
|
"message": "La livraison n'est pas disponible ce jour",
|
|
"current_time": now.Format("15:04"),
|
|
})
|
|
c.Abort()
|
|
return
|
|
}
|
|
|
|
parseTime := func(t string) int {
|
|
var h, m int
|
|
fmt.Sscanf(t, "%d:%d", &h, &m)
|
|
return h*60 + m
|
|
}
|
|
|
|
currentMinutes := hour*60 + min
|
|
openMinutes := parseTime(day.OpenTime)
|
|
closeMinutes := parseTime(day.CloseTime)
|
|
|
|
if currentMinutes < openMinutes || currentMinutes >= closeMinutes {
|
|
log.Printf("❌ [CLOCK-MWARE] Commande refusée à %02d:%02d (plage autorisée: %s - %s)", hour, min, day.OpenTime, day.CloseTime)
|
|
c.JSON(http.StatusForbidden, gin.H{
|
|
"error": "Commandes non disponibles à cette heure",
|
|
"message": fmt.Sprintf("Vous pouvez commander entre %s et %s", day.OpenTime, day.CloseTime),
|
|
"current_time": now.Format("15:04"),
|
|
"open_at": day.OpenTime,
|
|
"close_at": day.CloseTime,
|
|
})
|
|
c.Abort()
|
|
return
|
|
}
|
|
|
|
log.Printf("✅ [CLOCK-MWARE] Commande autorisée à %02d:%02d", hour, min)
|
|
c.Next()
|
|
}
|