package mohong import "time" type CategoryDTO struct { ID uint64 `json:"id"` Name string `json:"name"` Code string `json:"code"` SortOrder int `json:"sort_order"` Status string `json:"status"` ProductCount int64 `json:"product_count"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type CreateCategoryRequest struct { Name string `json:"name" binding:"required,max=64"` Code string `json:"code"` SortOrder int `json:"sort_order"` Status string `json:"status"` } type UpdateCategoryRequest struct { Name *string `json:"name"` Code *string `json:"code"` SortOrder *int `json:"sort_order"` Status *string `json:"status"` } type ProductDTO struct { ID uint64 `json:"id"` CategoryID *uint64 `json:"category_id"` CategoryName string `json:"category_name,omitempty"` Title string `json:"title"` CoverURL string `json:"cover_url"` ImageURLs []string `json:"image_urls"` Description string `json:"description"` PriceCent int64 `json:"price_cent"` Price string `json:"price"` OriginalPriceCent int64 `json:"original_price_cent"` OriginalPrice string `json:"original_price,omitempty"` Unit string `json:"unit"` Stock int `json:"stock"` SortOrder int `json:"sort_order"` Status string `json:"status"` QrcodeImageURL string `json:"qrcode_image_url,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type ProductListQuery struct { Keyword string Status string CategoryID uint64 Page int PageSize int } type CreateProductRequest struct { CategoryID *uint64 `json:"category_id"` Title string `json:"title" binding:"required,max=128"` CoverURL string `json:"cover_url"` ImageURLs []string `json:"image_urls"` Description string `json:"description"` PriceCent int64 `json:"price_cent" binding:"required,min=1"` OriginalPriceCent int64 `json:"original_price_cent"` Unit string `json:"unit"` Stock *int `json:"stock"` SortOrder int `json:"sort_order"` Status string `json:"status"` QrcodeImageURL string `json:"qrcode_image_url"` } type UpdateProductRequest struct { CategoryID *uint64 `json:"category_id"` ClearCategory bool `json:"clear_category"` Title *string `json:"title"` CoverURL *string `json:"cover_url"` ImageURLs []string `json:"image_urls"` Description *string `json:"description"` PriceCent *int64 `json:"price_cent"` OriginalPriceCent *int64 `json:"original_price_cent"` Unit *string `json:"unit"` Stock *int `json:"stock"` SortOrder *int `json:"sort_order"` Status *string `json:"status"` QrcodeImageURL *string `json:"qrcode_image_url"` } type CreateOrderItemRequest struct { ProductID uint64 `json:"product_id" binding:"required"` Quantity int `json:"quantity" binding:"required,min=1,max=99"` } // CreateOrderRequest 支持单商品(product_id+quantity)或多商品(items)。 type CreateOrderRequest struct { ProductID uint64 `json:"product_id"` Quantity int `json:"quantity"` Items []CreateOrderItemRequest `json:"items"` } type OrderItemDTO struct { ProductID uint64 `json:"product_id"` Title string `json:"title"` CoverURL string `json:"cover_url"` Unit string `json:"unit"` Quantity int `json:"quantity"` UnitPriceCent int64 `json:"unit_price_cent"` UnitPrice string `json:"unit_price"` AmountCent int64 `json:"amount_cent"` Amount string `json:"amount"` } type OrderDTO struct { ID uint64 `json:"id"` OrderNo string `json:"order_no"` UserID uint64 `json:"user_id"` ProductID uint64 `json:"product_id"` Quantity int `json:"quantity"` UnitPriceCent int64 `json:"unit_price_cent"` UnitPrice string `json:"unit_price"` AmountCent int64 `json:"amount_cent"` Amount string `json:"amount"` Status string `json:"status"` ProductTitle string `json:"product_title"` ProductCoverURL string `json:"product_cover_url"` ProductUnit string `json:"product_unit"` Items []OrderItemDTO `json:"items,omitempty"` QrcodeURLSnapshot string `json:"qrcode_url_snapshot"` CopyText string `json:"copy_text"` BuyerNickname string `json:"buyer_nickname,omitempty"` BuyerPhone string `json:"buyer_phone,omitempty"` AdminRemark string `json:"admin_remark,omitempty"` CancelReason string `json:"cancel_reason,omitempty"` PaidAt *time.Time `json:"paid_at"` CompletedAt *time.Time `json:"completed_at"` CancelledAt *time.Time `json:"cancelled_at"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` } type OrderListQuery struct { UserID uint64 Status string Keyword string Page int PageSize int } type AdminCompleteOrderRequest struct { Remark string `json:"remark"` } type AdminReceiveOrderRequest struct { Remark string `json:"remark"` } type AdminCancelOrderRequest struct { Reason string `json:"reason"` } type ConfigDTO struct { DefaultQrcodeURL string `json:"default_qrcode_url"` OrderCopyTemplate string `json:"order_copy_template"` } type UpdateConfigRequest struct { DefaultQrcodeURL *string `json:"default_qrcode_url"` OrderCopyTemplate *string `json:"order_copy_template"` } type PaginatedResult struct { Items any `json:"items"` Total int64 `json:"total"` Page int `json:"page"` PageSize int `json:"page_size"` } type productSnapshot struct { ID uint64 `json:"id"` Title string `json:"title"` CoverURL string `json:"cover_url"` ImageURLs []string `json:"image_urls"` Description string `json:"description"` PriceCent int64 `json:"price_cent"` Unit string `json:"unit"` QrcodeImageURL string `json:"qrcode_image_url"` } // orderItemSnapshot 订单商品行快照(多商品结账)。 type orderItemSnapshot struct { ID uint64 `json:"id"` Title string `json:"title"` CoverURL string `json:"cover_url"` ImageURLs []string `json:"image_urls"` Description string `json:"description"` PriceCent int64 `json:"price_cent"` Unit string `json:"unit"` QrcodeImageURL string `json:"qrcode_image_url"` Quantity int `json:"quantity"` }