rcerka01 / cs23

0 stars 0 forks source link

Code-review comments #1

Open Kirill5k opened 1 year ago

Kirill5k commented 1 year ago

Тут метод не должен требовать никаких енвайронментс:

https://github.com/rcerka01/cs23/blob/17b25627ead159fa5b0a312249098477f25ad2d2/src/main/scala/cs/dispatch/services/UpstreamImitatorService.scala#L11-L13

В целом, у тебя проблема с лейерами. Ты когде лейер декларируешь для того, чтобы создать компонент, то тебе надо там сразу же все необходимые компоненты доставать

Ты этот конфиг должен достать еще в самом лейере тут: https://github.com/rcerka01/cs23/blob/17b25627ead159fa5b0a312249098477f25ad2d2/src/main/scala/cs/dispatch/services/UpstreamImitatorService.scala#L28-L31

кстати, сам лейер может сделать как вал.

Я бы создал отдельный класс (апстреам серсив клиент), который бы отвечал за остылку запросов к этому сервису и обработке ответов. RecommendationService не должен таким занимаьтся: https://github.com/rcerka01/cs23/blob/17b25627ead159fa5b0a312249098477f25ad2d2/src/main/scala/cs/dispatch/services/RecommendationService.scala#L26-L32

вообще, если у тебя много времени и тебе нечего делать, то раздели этот проэкт на 2 модуля: рекоммендатионс и апстрим

Kirill5k commented 1 year ago
import cs.dispatch.config
import cs.dispatch.config.{AppConfig, ConfigError}
import zio.http.Response
import zio.{IO, URLayer, ZIO, ZLayer}

enum CallType:
  case CreditCards, Cards

trait UpstreamImitatorService {
  def cardImitator(callType: CallType): IO[ConfigError, String]
}

final private case class UpstreamImitatorServiceImpl(
    appConfig: AppConfig
) extends UpstreamImitatorService {

  def cardImitator(callType: CallType): IO[ConfigError, String] = {
    appConfig.upstreamResponse.callTypes.find(_.callType.equals(callType.toString.toLowerCase())) match {
      case Some(config) => ZIO.succeed(config.response.stripMargin)
      case _ =>
        ZIO.logError("Service failed due missing config") *>
        ZIO.fail(new ConfigError("Config for this call type not exists"))
    }
  }
}

object UpstreamImitatorService {
  lazy val live: URLayer[AppConfig, UpstreamImitatorService] =
    ZLayer.fromZIO {
      ZIO.service[AppConfig].map(UpstreamImitatorServiceImpl.apply)
    }
}