Pulls events off the new order_events table and shows them as a timeline block in the order detail view: Paid, Label created, In transit, Delivered (etc) with timestamps. Filters out ops-only events like payment_critical, label_orphaned, and tracking_marked_manually so the customer never sees internal plumbing. DisplayLabel on OrderEvent decides what's customer-visible and what's redacted, so the same order_events rows can later power an admin view with no filter.
61 lines
1.4 KiB
Go
61 lines
1.4 KiB
Go
package handlers
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"terminalShop/api/middleware"
|
|
"terminalShop/pkg/database"
|
|
"terminalShop/pkg/models"
|
|
"terminalShop/pkg/utils"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
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 = ?", userID).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]interface{}{
|
|
"user": user.ToPublic(),
|
|
"products": products,
|
|
"cart": cartItems,
|
|
"addresses": addresses,
|
|
"cards": cards,
|
|
"orders": orders,
|
|
})
|
|
}
|