Producte show
Producte werden nun angezeigt .
This commit is contained in:
@@ -160,6 +160,9 @@ func (server *Server) routeInit() {
|
||||
server.Router.HandleFunc("/register", server.DoRegister).Methods("POST")
|
||||
server.Router.HandleFunc("/logout", server.Logout).Methods("GET")
|
||||
|
||||
server.Router.HandleFunc("/products", server.Products).Methods("GET")
|
||||
server.Router.HandleFunc("/products/{slug}", server.GetProductByID).Methods("GET")
|
||||
|
||||
staticFileDirectory := http.Dir("./assets/")
|
||||
staticFileHandler := http.StripPrefix("/public/", http.FileServer(staticFileDirectory))
|
||||
server.Router.PathPrefix("/public/").Handler(staticFileHandler).Methods("GET")
|
||||
|
||||
62
app/controllers/product_controller.go
Normal file
62
app/controllers/product_controller.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/gorilla/mux"
|
||||
"github.com/unrolled/render"
|
||||
"moretcgshop/app/models"
|
||||
"net/http"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func (server *Server) Products(w http.ResponseWriter, r *http.Request) {
|
||||
renderer := render.New(render.Options{
|
||||
Layout: "layout",
|
||||
Extensions: []string{".html", ".tmpl"},
|
||||
})
|
||||
|
||||
q := r.URL.Query()
|
||||
|
||||
page, _ := strconv.Atoi(q.Get("page"))
|
||||
if page <= 0 {
|
||||
page = 1
|
||||
}
|
||||
perPage := 9
|
||||
|
||||
productModel := models.Product{}
|
||||
products, totalRows, err := productModel.GetProducts(server.DB, perPage, page)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
_ = totalRows
|
||||
|
||||
_ = renderer.HTML(w, http.StatusOK, "products", map[string]interface{}{
|
||||
"products": products,
|
||||
})
|
||||
}
|
||||
|
||||
func (server *Server) GetProductByID(w http.ResponseWriter, r *http.Request) {
|
||||
renderer := render.New(render.Options{
|
||||
Layout: "layout",
|
||||
Extensions: []string{".html", ".tmpl"},
|
||||
})
|
||||
|
||||
vars := mux.Vars(r)
|
||||
|
||||
if vars["slug"] == "" {
|
||||
return
|
||||
}
|
||||
|
||||
productModel := models.Product{}
|
||||
product, err := productModel.FindByID(server.DB, vars["slug"])
|
||||
if err != nil {
|
||||
println(err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
_ = renderer.HTML(w, http.StatusOK, "product", map[string]interface{}{
|
||||
"product": product,
|
||||
"success": GetFlash(w, r, "success"),
|
||||
"error": GetFlash(w, r, "error"),
|
||||
})
|
||||
}
|
||||
16
app/models/ProductImage.go
Normal file
16
app/models/ProductImage.go
Normal file
@@ -0,0 +1,16 @@
|
||||
package models
|
||||
|
||||
import "time"
|
||||
|
||||
type ProductImage struct {
|
||||
ID string `gorm:"size:36;not null;uniqueIndex;primary_key"`
|
||||
Product Product
|
||||
ProductID string `gorm:"size:36;index"`
|
||||
Path string `gorm:"type:text"`
|
||||
ExtraLarge string `gorm:"type:text"`
|
||||
Large string `gorm:"type:text"`
|
||||
Medium string `gorm:"type:text"`
|
||||
Small string `gorm:"type:text"`
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
}
|
||||
@@ -10,5 +10,6 @@ func RegisterModels() []Model {
|
||||
{Model: Product{}},
|
||||
{Model: Category{}},
|
||||
{Model: Section{}},
|
||||
{Model: ProductImage{}},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,55 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"github.com/shopspring/decimal"
|
||||
"gorm.io/gorm"
|
||||
"time"
|
||||
)
|
||||
|
||||
type Product struct {
|
||||
ID string
|
||||
ParentID string
|
||||
Name string
|
||||
Categories []Category `gorm:"many2many:product_categories;"`
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
DeletedAt gorm.DeletedAt
|
||||
ID string `gorm:"size:36;not null;uniqueIndex;primary_key"`
|
||||
ParentID string `gorm:"size:36;index"`
|
||||
Name string `gorm:"size:255"`
|
||||
Slug string `gorm:"size:255"`
|
||||
ProductImages []ProductImage
|
||||
Price decimal.Decimal `gorm:"type:decimal(16,2);"`
|
||||
Categories []Category `gorm:"many2many:product_categories;"`
|
||||
ShortDescription string `gorm:"type:text"`
|
||||
Description string `gorm:"type:text"`
|
||||
|
||||
CreatedAt time.Time
|
||||
UpdatedAt time.Time
|
||||
DeletedAt gorm.DeletedAt
|
||||
}
|
||||
|
||||
func (p *Product) GetProducts(db *gorm.DB, perPage int, page int) (*[]Product, int64, error) {
|
||||
|
||||
var count int64
|
||||
var products []Product
|
||||
|
||||
err := db.Debug().Model(&Product{}).Count(&count).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
offset := (page - 1) * perPage
|
||||
|
||||
err = db.Debug().Model(&Product{}).Order("created_at desc").Limit(perPage).Offset(offset).Find(&products).Error
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
return &products, count, nil
|
||||
}
|
||||
|
||||
func (p *Product) FindByID(db *gorm.DB, productID string) (*Product, error) {
|
||||
var err error
|
||||
var product Product
|
||||
|
||||
err = db.Debug().Preload("ProductImages").Model(&Product{}).Where("id = ?", productID).First(&product).Error
|
||||
//err = db.Debug().Model(&Product{}).Where("id = ?", productID).First(&product).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &product, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user