mirror of
https://github.com/marcusDenslow/terminalShop.git
synced 2026-10-25 02:52:20 +02:00
66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
"time"
|
|
|
|
"terminalShop/api/middleware"
|
|
"terminalShop/pkg/database"
|
|
"terminalShop/pkg/models"
|
|
"terminalShop/pkg/utils"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// ViewHandler handles bulk TUI bootstrap data
|
|
type ViewHandler struct{}
|
|
|
|
func NewViewHandler() *ViewHandler {
|
|
return &ViewHandler{}
|
|
}
|
|
|
|
func (h *ViewHandler) GetViewInit(w http.ResponseWriter, r *http.Request) {
|
|
db := database.GetDB().WithContext(r.Context())
|
|
userID := middleware.UserIDFromContext(r.Context())
|
|
|
|
var user models.User
|
|
if err := db.First(&user, userID).Error; err != nil {
|
|
utils.RespondError(w, http.StatusUnauthorized, "USER_NOT_FOUND", "user not found", nil)
|
|
return
|
|
}
|
|
|
|
var products []models.Coffee
|
|
db.Find(&products)
|
|
|
|
var cart models.Cart
|
|
db.Where("user_id = ?", userID).First(&cart)
|
|
|
|
var addresses []models.Address
|
|
db.Where("user_id = ?", userID).Find(&addresses)
|
|
|
|
var cards []models.Card
|
|
db.Where(
|
|
"user_id = ? AND (storage_expires_at IS NULL OR storage_expires_at > ?)",
|
|
userID, time.Now(),
|
|
).Order("is_default DESC, created_at DESC").Find(&cards)
|
|
|
|
var orders []models.Order
|
|
db.Where("user_id = ?", userID).
|
|
Preload("Items").
|
|
Preload("Events", func(tx *gorm.DB) *gorm.DB { return tx.Order("created_at ASC") }).
|
|
Order("created_at DESC").Find(&orders)
|
|
var cartItems []models.CartItem
|
|
if cart.ID != 0 {
|
|
db.Where("cart_id = ? AND quantity > 0", cart.ID).Preload("Coffee").Find(&cartItems)
|
|
}
|
|
|
|
utils.RespondSuccess(w, http.StatusOK, map[string]any{
|
|
"user": user.ToPublic(),
|
|
"products": products,
|
|
"cart": cartItems,
|
|
"addresses": addresses,
|
|
"cards": cards,
|
|
"orders": orders,
|
|
})
|
|
}
|