Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -23,6 +23,58 @@ type PricingRuleBulkSavePayload struct {
|
||||
Items []queries.PricingRuleSaveItem `json:"items"`
|
||||
}
|
||||
|
||||
type PricingRuleImportItem struct {
|
||||
AskiliYan string `json:"askili_yan"`
|
||||
Kategori string `json:"kategori"`
|
||||
UrunIlkGrubu string `json:"urun_ilk_grubu"`
|
||||
UrunAnaGrubu string `json:"urun_ana_grubu"`
|
||||
UrunAltGrubu string `json:"urun_alt_grubu"`
|
||||
Icerik string `json:"icerik"`
|
||||
Marka string `json:"marka"`
|
||||
BrandCode string `json:"brand_code"`
|
||||
BrandGroupSec string `json:"brand_group"`
|
||||
IsActive bool `json:"is_active"`
|
||||
TryBase float64 `json:"try_base"`
|
||||
Try1 float64 `json:"try1"`
|
||||
Try2 float64 `json:"try2"`
|
||||
Try3 float64 `json:"try3"`
|
||||
Try4 float64 `json:"try4"`
|
||||
Try5 float64 `json:"try5"`
|
||||
Try6 float64 `json:"try6"`
|
||||
TryWholesaleStep float64 `json:"try_wholesale_step"`
|
||||
TryRetailStep float64 `json:"try_retail_step"`
|
||||
UsdBase float64 `json:"usd_base"`
|
||||
Usd1 float64 `json:"usd1"`
|
||||
Usd2 float64 `json:"usd2"`
|
||||
Usd3 float64 `json:"usd3"`
|
||||
Usd4 float64 `json:"usd4"`
|
||||
Usd5 float64 `json:"usd5"`
|
||||
Usd6 float64 `json:"usd6"`
|
||||
UsdWholesaleStep float64 `json:"usd_wholesale_step"`
|
||||
UsdRetailStep float64 `json:"usd_retail_step"`
|
||||
EurBase float64 `json:"eur_base"`
|
||||
Eur1 float64 `json:"eur1"`
|
||||
Eur2 float64 `json:"eur2"`
|
||||
Eur3 float64 `json:"eur3"`
|
||||
Eur4 float64 `json:"eur4"`
|
||||
Eur5 float64 `json:"eur5"`
|
||||
Eur6 float64 `json:"eur6"`
|
||||
EurWholesaleStep float64 `json:"eur_wholesale_step"`
|
||||
EurRetailStep float64 `json:"eur_retail_step"`
|
||||
}
|
||||
|
||||
type PricingRuleImportPayload struct {
|
||||
Items []PricingRuleImportItem `json:"items"`
|
||||
}
|
||||
|
||||
type PricingRuleImportResult struct {
|
||||
Success bool `json:"success"`
|
||||
Processed int `json:"processed"`
|
||||
Updated int `json:"updated"`
|
||||
ActivatedScopeCount int `json:"activated_scope_count"`
|
||||
ErrorCount int `json:"error_count"`
|
||||
}
|
||||
|
||||
func GetPricingRulesHandler(pg *sql.DB) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||
@@ -85,6 +137,109 @@ func SavePricingRulesBulkHandler(pg *sql.DB) http.HandlerFunc {
|
||||
}
|
||||
}
|
||||
|
||||
func ImportPricingRulesHandler(pg *sql.DB) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||
|
||||
var payload PricingRuleImportPayload
|
||||
if err := json.NewDecoder(r.Body).Decode(&payload); err != nil {
|
||||
http.Error(w, "invalid payload", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
if len(payload.Items) == 0 {
|
||||
_ = json.NewEncoder(w).Encode(PricingRuleImportResult{Success: true})
|
||||
return
|
||||
}
|
||||
|
||||
traceID := utils.TraceIDFromRequest(r)
|
||||
ctx := utils.ContextWithTraceID(r.Context(), traceID)
|
||||
|
||||
tx, err := pg.BeginTx(ctx, nil)
|
||||
if err != nil {
|
||||
http.Error(w, "pg transaction start error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
defer tx.Rollback()
|
||||
|
||||
updated := 0
|
||||
activatedScopeCount := 0
|
||||
for _, raw := range payload.Items {
|
||||
if raw.TryWholesaleStep < 0 || raw.TryRetailStep < 0 || raw.UsdWholesaleStep < 0 || raw.UsdRetailStep < 0 || raw.EurWholesaleStep < 0 || raw.EurRetailStep < 0 {
|
||||
http.Error(w, "invalid rounding step", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
pricingParameterID, activated, err := queries.EnsureActivePricingParameterByScope(ctx, tx, queries.PricingParameterRowForImport(
|
||||
raw.AskiliYan,
|
||||
raw.Kategori,
|
||||
raw.UrunIlkGrubu,
|
||||
raw.UrunAnaGrubu,
|
||||
raw.UrunAltGrubu,
|
||||
raw.Icerik,
|
||||
raw.Marka,
|
||||
raw.BrandCode,
|
||||
raw.BrandGroupSec,
|
||||
))
|
||||
if err != nil {
|
||||
http.Error(w, "pricing parameter resolve error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
if activated {
|
||||
activatedScopeCount++
|
||||
}
|
||||
|
||||
_, err = queries.UpsertPricingRule(ctx, tx, queries.PricingRuleSaveItem{
|
||||
PricingParameterID: pricingParameterID,
|
||||
IsActive: raw.IsActive,
|
||||
TryBase: raw.TryBase,
|
||||
Try1: raw.Try1,
|
||||
Try2: raw.Try2,
|
||||
Try3: raw.Try3,
|
||||
Try4: raw.Try4,
|
||||
Try5: raw.Try5,
|
||||
Try6: raw.Try6,
|
||||
TryWholesaleStep: raw.TryWholesaleStep,
|
||||
TryRetailStep: raw.TryRetailStep,
|
||||
UsdBase: raw.UsdBase,
|
||||
Usd1: raw.Usd1,
|
||||
Usd2: raw.Usd2,
|
||||
Usd3: raw.Usd3,
|
||||
Usd4: raw.Usd4,
|
||||
Usd5: raw.Usd5,
|
||||
Usd6: raw.Usd6,
|
||||
UsdWholesaleStep: raw.UsdWholesaleStep,
|
||||
UsdRetailStep: raw.UsdRetailStep,
|
||||
EurBase: raw.EurBase,
|
||||
Eur1: raw.Eur1,
|
||||
Eur2: raw.Eur2,
|
||||
Eur3: raw.Eur3,
|
||||
Eur4: raw.Eur4,
|
||||
Eur5: raw.Eur5,
|
||||
Eur6: raw.Eur6,
|
||||
EurWholesaleStep: raw.EurWholesaleStep,
|
||||
EurRetailStep: raw.EurRetailStep,
|
||||
})
|
||||
if err != nil {
|
||||
http.Error(w, "pricing rule import error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
updated++
|
||||
}
|
||||
|
||||
if err := tx.Commit(); err != nil {
|
||||
http.Error(w, "pg transaction commit error", http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
_ = json.NewEncoder(w).Encode(PricingRuleImportResult{
|
||||
Success: true,
|
||||
Processed: len(payload.Items),
|
||||
Updated: updated,
|
||||
ActivatedScopeCount: activatedScopeCount,
|
||||
ErrorCount: 0,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func GetPricingRuleOptionsHandler(pg *sql.DB) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||
|
||||
Reference in New Issue
Block a user