filters #26
1
.env
1
.env
@@ -57,3 +57,4 @@ FILE_MAAL_PL_USER=git_operator
|
|||||||
FILE_MAAL_PL_PASSWORD=1FnwqcEgIUjQHjt1
|
FILE_MAAL_PL_PASSWORD=1FnwqcEgIUjQHjt1
|
||||||
|
|
||||||
IMAGE_PREFIX=https://www.naluconcept.com # remove prefix to serv them from same host as presta
|
IMAGE_PREFIX=https://www.naluconcept.com # remove prefix to serv them from same host as presta
|
||||||
|
CORS_ORGIN=https://www.naluconcept.com
|
||||||
@@ -11,8 +11,8 @@
|
|||||||
},
|
},
|
||||||
"servers": [
|
"servers": [
|
||||||
{
|
{
|
||||||
"url": "http://localhost:3000",
|
"url": "/",
|
||||||
"description": "Development server"
|
"description": "Development server on same host"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"tags": [
|
"tags": [
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ type Config struct {
|
|||||||
Pdf PdfPrinter
|
Pdf PdfPrinter
|
||||||
GoogleTranslate GoogleTranslateConfig
|
GoogleTranslate GoogleTranslateConfig
|
||||||
Image ImageConfig
|
Image ImageConfig
|
||||||
|
Cors CorsConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
type I18n struct {
|
type I18n struct {
|
||||||
@@ -33,6 +34,10 @@ type ServerConfig struct {
|
|||||||
Host string `env:"SERVER_HOST,0.0.0.0"`
|
Host string `env:"SERVER_HOST,0.0.0.0"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type CorsConfig struct {
|
||||||
|
Origins []string `env:"CORS_ORGIN"`
|
||||||
|
}
|
||||||
|
|
||||||
type ImageConfig struct {
|
type ImageConfig struct {
|
||||||
ImagePrefix string `env:"IMAGE_PREFIX"`
|
ImagePrefix string `env:"IMAGE_PREFIX"`
|
||||||
}
|
}
|
||||||
@@ -176,6 +181,11 @@ func load() *Config {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("not possible to load env variables for google translate : ", err.Error(), "")
|
slog.Error("not possible to load env variables for google translate : ", err.Error(), "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = loadEnv(&cfg.Cors)
|
||||||
|
if err != nil {
|
||||||
|
slog.Error("not possible to load env variables for google translate : ", err.Error(), "")
|
||||||
|
}
|
||||||
return cfg
|
return cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,23 @@
|
|||||||
package middleware
|
package middleware
|
||||||
|
|
||||||
import "github.com/gofiber/fiber/v3"
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"git.ma-al.com/goc_daniel/b2b/app/config"
|
||||||
|
"github.com/gofiber/fiber/v3"
|
||||||
|
)
|
||||||
|
|
||||||
// CORSMiddleware creates CORS middleware
|
// CORSMiddleware creates CORS middleware
|
||||||
func CORSMiddleware() fiber.Handler {
|
func CORSMiddleware() fiber.Handler {
|
||||||
return func(c fiber.Ctx) error {
|
return func(c fiber.Ctx) error {
|
||||||
c.Set("Access-Control-Allow-Origin", "*")
|
|
||||||
|
if strings.Contains(c.Get("Host"), "localhost") {
|
||||||
|
c.Set("Access-Control-Allow-Origin", c.Get("Host"))
|
||||||
|
} else {
|
||||||
|
origins := strings.Join(config.Get().Cors.Origins, ",")
|
||||||
|
c.Set("Access-Control-Allow-Origin", origins)
|
||||||
|
}
|
||||||
|
|
||||||
c.Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
|
c.Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
|
||||||
c.Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
|
c.Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package restricted
|
package restricted
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"git.ma-al.com/goc_daniel/b2b/app/config"
|
"git.ma-al.com/goc_daniel/b2b/app/config"
|
||||||
"git.ma-al.com/goc_daniel/b2b/app/service/listProductsService"
|
"git.ma-al.com/goc_daniel/b2b/app/service/listProductsService"
|
||||||
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
|
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
|
||||||
@@ -36,6 +38,64 @@ func ListProductsHandlerRoutes(r fiber.Router) fiber.Router {
|
|||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// var columnMapping map[string]string = map[string]string{
|
||||||
|
// "product_id": "id",
|
||||||
|
// "price": "price_taxed",
|
||||||
|
// "name": "name",
|
||||||
|
// "category_id": "category_id",
|
||||||
|
// "feature_id": "feature_id",
|
||||||
|
// "feature": "feature_name",
|
||||||
|
// "value_id": "value_id",
|
||||||
|
// "value": "value_name",
|
||||||
|
// "status": "active_sale",
|
||||||
|
// "stock": "in_stock",
|
||||||
|
// }
|
||||||
|
|
||||||
|
// type FeatVal = map[uint][]uint
|
||||||
|
|
||||||
|
// func featureValueFilters(feats FeatVal) filters.Filter {
|
||||||
|
// filt := func(db *gorm.DB) *gorm.DB {
|
||||||
|
// return db.Where("value_id IN ?", lo.Flatten(lo.Values(feats))).Group("id").Having("COUNT(id) = ?", len(lo.Keys(feats)))
|
||||||
|
// }
|
||||||
|
// return filters.NewFilter(filters.FEAT_VAL_PRODUCT_FILTER, filt)
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func ParseProductFilters(c fiber.Ctx) (find.Paging, *filters.FiltersList, error) {
|
||||||
|
// var p find.Paging
|
||||||
|
// fl := filters.NewFiltersList()
|
||||||
|
// productFilters := new(model.ProductFilters)
|
||||||
|
// fmt.Printf("fl: %v\n", fl)
|
||||||
|
// err := c.Bind().Query(productFilters)
|
||||||
|
// if err != nil {
|
||||||
|
// return p, &fl, err
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if productFilters.Name != "" {
|
||||||
|
// fl.Append(filters.Where("name LIKE ?", fmt.Sprintf("%%%s%%", productFilters.Name)))
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if productFilters.Sort != "" {
|
||||||
|
// ord, err := query_params.ParseOrdering[model.Product](c, columnMapping)
|
||||||
|
// if err != nil {
|
||||||
|
// return p, &fl, err
|
||||||
|
// }
|
||||||
|
// for _, o := range ord {
|
||||||
|
// fl.Append(filters.Order(o.Column, o.IsDesc))
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if len(productFilters.Features) > 0 {
|
||||||
|
// fl.Append(featureValueFilters(productFilters.Features))
|
||||||
|
// }
|
||||||
|
|
||||||
|
// fl.Append(query_params.ParseWhereScopes[model.Product](c, []string{"name"}, columnMapping)...)
|
||||||
|
|
||||||
|
// pageNum, pageElems := query_params.ParsePagination(c)
|
||||||
|
// p = find.Paging{Page: pageNum, Elements: pageElems}
|
||||||
|
|
||||||
|
// return p, &fl, nil
|
||||||
|
// }
|
||||||
|
|
||||||
func (h *ListProductsHandler) GetListing(c fiber.Ctx) error {
|
func (h *ListProductsHandler) GetListing(c fiber.Ctx) error {
|
||||||
paging, filters, err := ParseProductFilters(c)
|
paging, filters, err := ParseProductFilters(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -64,6 +124,8 @@ func ParseProductFilters(c fiber.Ctx) (find.Paging, *filters.FiltersList, error)
|
|||||||
var p find.Paging
|
var p find.Paging
|
||||||
fl := filters.NewFiltersList()
|
fl := filters.NewFiltersList()
|
||||||
|
|
||||||
|
fmt.Printf("fl: %v\n", fl.All())
|
||||||
|
|
||||||
pageNum, pageElems := query_params.ParsePagination(c)
|
pageNum, pageElems := query_params.ParsePagination(c)
|
||||||
p = find.Paging{Page: pageNum, Elements: pageElems}
|
p = find.Paging{Page: pageNum, Elements: pageElems}
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,11 @@ var swaggerHTML = `
|
|||||||
url: "/openapi.json",
|
url: "/openapi.json",
|
||||||
dom_id: '#swagger-ui',
|
dom_id: '#swagger-ui',
|
||||||
deepLinking: true,
|
deepLinking: true,
|
||||||
|
withCredentials: true,
|
||||||
|
"servers": [
|
||||||
|
{ "url": "http://localhost:3000" },
|
||||||
|
{ "url": "http://localhost:5173" }
|
||||||
|
],
|
||||||
presets: [
|
presets: [
|
||||||
SwaggerUIBundle.presets.apis,
|
SwaggerUIBundle.presets.apis,
|
||||||
SwaggerUIStandalonePreset
|
SwaggerUIStandalonePreset
|
||||||
|
|||||||
Reference in New Issue
Block a user