This commit is contained in:
2026-03-24 19:16:02 +01:00
parent a96efacb3e
commit c13365916c
6 changed files with 95 additions and 5 deletions

1
.env
View File

@@ -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

View File

@@ -11,8 +11,8 @@
}, },
"servers": [ "servers": [
{ {
"url": "http://localhost:3000", "url": "/",
"description": "Development server" "description": "Development server on same host"
} }
], ],
"tags": [ "tags": [

View File

@@ -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
} }

View File

@@ -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")

View File

@@ -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}

View File

@@ -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