quotation service fixed

This commit is contained in:
Stephan D
2026-02-24 16:14:09 +01:00
parent 6444813f38
commit 2fe90347a8
76 changed files with 769 additions and 230 deletions

View File

@@ -123,6 +123,7 @@ func (p *PlanTemplates) GetByID(ctx context.Context, id bson.ObjectID) (*model.P
}
return nil, err
}
entity.Normalize()
return entity, nil
}
@@ -133,11 +134,15 @@ func (p *PlanTemplates) List(ctx context.Context, filter *model.PaymentPlanTempl
query := repository.Query()
if from := strings.ToUpper(strings.TrimSpace(string(filter.FromRail))); from != "" {
query = query.Filter(repository.Field("fromRail"), from)
if from := normalizedRailFilterValues(filter.FromRail); len(from) == 1 {
query = query.Filter(repository.Field("fromRail"), from[0])
} else if len(from) > 1 {
query = query.In(repository.Field("fromRail"), stringSliceToAny(from)...)
}
if to := strings.ToUpper(strings.TrimSpace(string(filter.ToRail))); to != "" {
query = query.Filter(repository.Field("toRail"), to)
if to := normalizedRailFilterValues(filter.ToRail); len(to) == 1 {
query = query.Filter(repository.Field("toRail"), to[0])
} else if len(to) > 1 {
query = query.In(repository.Field("toRail"), stringSliceToAny(to)...)
}
if network := strings.ToUpper(strings.TrimSpace(filter.Network)); network != "" {
query = query.Filter(repository.Field("network"), network)
@@ -152,6 +157,7 @@ func (p *PlanTemplates) List(ctx context.Context, filter *model.PaymentPlanTempl
if err := cur.Decode(item); err != nil {
return err
}
item.Normalize()
templates = append(templates, item)
return nil
}

View File

@@ -120,6 +120,7 @@ func (r *Routes) GetByID(ctx context.Context, id bson.ObjectID) (*model.PaymentR
}
return nil, err
}
entity.Normalize()
return entity, nil
}
@@ -130,11 +131,15 @@ func (r *Routes) List(ctx context.Context, filter *model.PaymentRouteFilter) (*m
query := repository.Query()
if from := strings.ToUpper(strings.TrimSpace(string(filter.FromRail))); from != "" {
query = query.Filter(repository.Field("fromRail"), from)
if from := normalizedRailFilterValues(filter.FromRail); len(from) == 1 {
query = query.Filter(repository.Field("fromRail"), from[0])
} else if len(from) > 1 {
query = query.In(repository.Field("fromRail"), stringSliceToAny(from)...)
}
if to := strings.ToUpper(strings.TrimSpace(string(filter.ToRail))); to != "" {
query = query.Filter(repository.Field("toRail"), to)
if to := normalizedRailFilterValues(filter.ToRail); len(to) == 1 {
query = query.Filter(repository.Field("toRail"), to[0])
} else if len(to) > 1 {
query = query.In(repository.Field("toRail"), stringSliceToAny(to)...)
}
if network := strings.ToUpper(strings.TrimSpace(filter.Network)); network != "" {
query = query.Filter(repository.Field("network"), network)
@@ -149,6 +154,7 @@ func (r *Routes) List(ctx context.Context, filter *model.PaymentRouteFilter) (*m
if err := cur.Decode(item); err != nil {
return err
}
item.Normalize()
routes = append(routes, item)
return nil
}
@@ -163,3 +169,38 @@ func (r *Routes) List(ctx context.Context, filter *model.PaymentRouteFilter) (*m
}
var _ storage.RoutesStore = (*Routes)(nil)
func normalizedRailFilterValues(rail model.Rail) []string {
clean := strings.ToUpper(strings.TrimSpace(string(rail)))
if clean == "" {
return nil
}
if parsed := model.ParseRail(string(rail)); parsed != model.RailUnspecified {
switch parsed {
case model.RailCrypto:
return []string{string(model.RailCrypto), "RAIL_CRYPTO"}
case model.RailProviderSettlement:
return []string{string(model.RailProviderSettlement), "PROVIDER_SETTLEMENT", "RAIL_SETTLEMENT", "RAIL_PROVIDER_SETTLEMENT"}
case model.RailLedger:
return []string{string(model.RailLedger), "RAIL_LEDGER"}
case model.RailCardPayout:
return []string{string(model.RailCardPayout), "CARD_PAYOUT", "RAIL_CARD", "RAIL_CARD_PAYOUT"}
case model.RailFiatOnRamp:
return []string{string(model.RailFiatOnRamp), "FIAT_ONRAMP", "RAIL_ONRAMP", "RAIL_FIAT_ONRAMP"}
case model.RailFiatOffRamp:
return []string{string(model.RailFiatOffRamp), "FIAT_OFFRAMP", "RAIL_OFFRAMP", "RAIL_FIAT_OFFRAMP"}
default:
return []string{string(parsed)}
}
}
return []string{clean}
}
func stringSliceToAny(values []string) []any {
out := make([]any, 0, len(values))
for _, value := range values {
out = append(out, value)
}
return out
}