Size: a a a

F# Flood: Be a cheif

2021 January 27

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
type Foo =
 { A: string
   B: int }
 member this.SlaziyVBazu() = task {
   do! Task.Delay 100
   return this.A + this.B
 }
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
Roman
type T = { A: string; B int }
       with
       member this.SlazijVBazu() =
                       task {
                              do! Async.Sleep 100
                              return A + B
                       }
и ты считаешь, что это хорошее решение?
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
каждый раз вычислять
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
у тебя есть какой то пример из продакшен кода?
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
если конечно есть F# на проде
источник

R

Roman in F# Flood: Be a cheif
Ilya Chernoudov
и ты считаешь, что это хорошее решение?
Я сразу написал, что делать ИО вызовы в пропертях это ебанько, особенно с триггером на смену значения в полях.

Совершенно не ясно, при чем тут вообще язык только
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
Roman
Я сразу написал, что делать ИО вызовы в пропертях это ебанько, особенно с триггером на смену значения в полях.

Совершенно не ясно, при чем тут вообще язык только
а зачем ты выбрал такое решение?
источник

IC

Ilya Chernoudov in F# Flood: Be a cheif
в исходных данных не было ничего про проперти
источник

R

Roman in F# Flood: Be a cheif
т.е. ты сначала просишь меня сделать говно, а потом такой "А тебе не кажется, что это говно?!!1111"

ну да, просил говно — получил говно. А виноват фшарп?
источник

R

Roman in F# Flood: Be a cheif
Ну так может ты уже перестанешь страдать хуйней и покажешь на сишарпе, что ты имеешь ввиду?
источник

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
О, я ж могу теперь джетовскими сорцами делиться
источник

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
щас я вам простыни говнокода буду кидать
источник

R

Roman in F# Flood: Be a cheif
а то я че-то уже начинаю терять самообладание и тянусь к банхаммеру!
источник

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
    let getPriceControl priceControlOverride
                       priceControlBrandRules
                       priceControlCategoryRules
                       priceControlsManufacturerCatalog
                       priceControlDefaultRule
                       taxonomyItems
                       (approvedCompetitiveSourcesMap: Map<RegionId, string Set>)
                       (isOnePNode: NodeId->bool)
                       (brandOption: string option)
                       (offersMap: Map<RegionId, OfferAndShippingCost[]>)
                       (retailSku: SlimmedRetailSku)
                       (marginBasedPricingMap: Map<RegionId, MarginBasedPricingCalculationResults>)
       : Map<RegionId, PriceControlResult option> =

       let invertMapLevel mapLevel =
           match mapLevel with
           | PriceControlPolicies.Constants.Msp -> 1
           | PriceControlPolicies.Constants.Map -> 2
           | PriceControlPolicies.Constants.NoPrice -> 3
           | _ -> 4

       let sortOffers maybeMarginTarget offers  =
           offers
           |> Seq.choose (fun offer ->
               if offer.sourceSkuMapLevel = PriceControlPolicies.Constants.Map then
                   if Options.checkIfNoneOrNonPostivieDecimal offer.sourceSkuMapPrice then
                       None
                   else
                       let mapPrice = offer.sourceSkuMapPrice.Value * offer.originalSourceSkuFactor
                       Some { offer with offerKind = OfferKind.Price mapPrice }
               else
                   match offer.offerKind with
                   | OfferKind.Price price ->
                       Some { offer with offerKind = OfferKind.Price (price * offer.originalSourceSkuFactor) }
                   | OfferKind.CostWithOptionalPrice (cost, Some price) ->
                       Some { offer with offerKind = OfferKind.CostWithOptionalPrice (cost, price * offer.originalSourceSkuFactor |> Some) }
                   | OfferKind.CostWithOptionalPrice (_, None) ->
                       Some offer
                       )
           |> Seq.map (fun offer ->
               // Amazon 3P offers should have shipping included in their price.
               match (offer.source = Sources.Indirect) && (offer.merchantId <> Constants.AmazonMerchantId) with
               | true ->
                   match offer.offerKind with
                   | OfferKind.Price price ->
                       { offer with offerKind = OfferKind.Price (price + Option.getValueOr 0m offer.shippingAmount) }
                   | OfferKind.CostWithOptionalPrice _ -> offer
               | false -> offer)
           |> Seq.sortBy(fun offer ->
               let priceControlPrice =
                   Offer.tryGetPriceOrTargetPrice offer maybeMarginTarget |> Option.getValueOr Decimal.MaxValue

               priceControlPrice, invertMapLevel offer.sourceSkuMapLevel)

       AllRegions
       |> Seq.map ^fun regionId ->
           //check global override first. This should apply to all regions no matter what
           checkPriceControlOverride priceControlOverride retailSku.id
           |> Option.orElseWith ^fun _ -> maybe {

               let maybeMarginTarget =
                   marginBasedPricingMap.TryFind regionId
                   |> Option.map (fun x -> x.marginTarget)

               let! notSortedOffers = offersMap.TryFind regionId
               let offers =
                   notSortedOffers
                   |> Seq.map ^fun x -> x.offer
                   |> sortOffers maybeMarginTarget
                   |> Seq.toArray
источник

AH

Ayrat Hudaygulov in F# Flood: Be a cheif


               return!
                   //check manufacturer which is region specific
                   checkManufacturerCatalog priceControlsManufacturerCatalog offers maybeMarginTarget
                   |> Option.orElseWith ^fun _ -> maybe {
                       let retailSkuCategory: CategoryId = int retailSku.category
                       let! merchants = approvedCompetitiveSourcesMap.TryFind regionId
                       let approvedCompOffers =
                           offers
                           |> Array.filter ^fun offer -> merchants.Contains offer.merchantId ||
                                                         offer.source = OfferSource.Indirect
                       let directApprovedCompOffers =
                           approvedCompOffers
                           |> Array.filter ^fun offer -> offer.source = OfferSource.Merchant ||
                                                         offer.source = OfferSource.Jet
                       return!
                           //check brand override which is region specific
                           checkBrandOverride priceControlBrandRules taxonomyItems brandOption offers approvedCompOffers directApprovedCompOffers retailSkuCategory maybeMarginTarget
                           ////check category override which is region specific
                           |> Option.orElseWith ^fun _ -> checkCategoryOverride priceControlCategoryRules taxonomyItems offers approvedCompOffers directApprovedCompOffers retailSkuCategory maybeMarginTarget
                           ////check other overrides which is region specific
                           |> Option.orElseWith ^fun _ -> checkOtherSources priceControlDefaultRule isOnePNode approvedCompOffers directApprovedCompOffers maybeMarginTarget
                   }
           }
           |> tuple2 regionId
       |> Map.ofSeq
источник

R

Roman in F# Flood: Be a cheif
ну зачем же так делать, когда можно в гист?
источник

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
да я чот думал что поместится
источник

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
если чо, то джетовский код просто пример дикого прода на фшарпе, взлетело за год
источник

R

Roman in F# Flood: Be a cheif
Ayrat Hudaygulov
да я чот думал что поместится
илья тоже думал, да в бан попал
источник

AH

Ayrat Hudaygulov in F# Flood: Be a cheif
Roman
а то я че-то уже начинаю терять самообладание и тянусь к банхаммеру!
он просто троллит, забей
источник