-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
850f94c
commit 2764487
Showing
12 changed files
with
151 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
17 changes: 17 additions & 0 deletions
17
mainservice/src/main/scala/com/scalalazy/mainservice/model/dto/CreateCreditRequestDTO.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.scalalazy.mainservice.model.dto | ||
import zio.json.JsonCodec | ||
|
||
case class CreateCreditRequestDTO (amount: BigDecimal, | ||
timeLimitMonth: Month, | ||
accountBalance: BigDecimal, | ||
monthIncome: BigDecimal) | ||
|
||
case class Month(value: Double) extends AnyVal | ||
|
||
object CreateCreditRequestDTO{ | ||
implicit val codec: JsonCodec[CreateCreditRequestDTO] = zio.json.DeriveJsonCodec.gen[CreateCreditRequestDTO] | ||
} | ||
|
||
object Month{ | ||
implicit val codec: JsonCodec[Month] = zio.json.DeriveJsonCodec.gen[Month] | ||
} |
21 changes: 21 additions & 0 deletions
21
...rvice/src/main/scala/com/scalalazy/mainservice/model/dto/CreditApplicationResultDTO.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
package com.scalalazy.mainservice.model.dto | ||
|
||
import zio.json.{DeriveJsonCodec, DeriveJsonDecoder, DeriveJsonEncoder, JsonCodec, JsonDecoder, JsonEncoder} | ||
|
||
|
||
/** Кредитный тариф состоит из: | ||
* - нижней и верхней границ получаемой суммы | ||
* - кредитной ставки | ||
* - нижней и верхней границы получения кредита | ||
*/ | ||
|
||
case class CreditApplicationResultDTO(amountLowerBound: BigDecimal, amountUpperBound: BigDecimal, percentage: Double, timeLimitMonthLower: Month, timeLimitMonthUpper: Month) | ||
|
||
object CreditApplicationResultDTO { | ||
// implicit val codec: JsonCodec[CreditApplicationResultDTO] = DeriveJsonCodec.gen[CreditApplicationResultDTO] | ||
|
||
implicit val decoder = DeriveJsonDecoder.gen[CreditApplicationResultDTO] | ||
implicit val encoder = DeriveJsonEncoder.gen[CreditApplicationResultDTO] | ||
// implicit val decoder = JsonDecoder[List[Json]].map(list => list.map(ca => CreditApplicationResultDTO(ca))) | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
69 changes: 69 additions & 0 deletions
69
...ervice/src/main/scala/com/scalalazy/mainservice/route/CreditApplicationResultRoutes.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
package com.scalalazy.mainservice.route | ||
import com.scalalazy.mainservice.helpers.{RouteHelper, ServerOptionsHelper} | ||
import com.scalalazy.mainservice.model.{ConfigError, ExpectedFailure, NotFoundFailure} | ||
import com.scalalazy.mainservice.model.dto.{CreateCreditApplicationDTO, CreateCreditRequestDTO, CreditApplicationResultDTO, Month} | ||
import com.scalalazy.mainservice.model.dto.response.CreditApplicationCreatedDTO | ||
import com.scalalazy.mainservice.model.response.{ErrorResponse, InternalServerErrorResponse, NotFoundResponse} | ||
import com.scalalazy.mainservice.module.CreditApplicationDB | ||
import com.scalalazy.mainservice.module.CreditApplicationDB.CreditApplicationRepository | ||
import com.scalalazy.mainservice.module.PersonDB.PersonRepository | ||
import com.scalalazy.mainservice.module.logger.{Logger, debug} | ||
import com.typesafe.config.ConfigFactory | ||
import org.http4s.dsl.Http4sDsl | ||
import sttp.model.StatusCode | ||
import sttp.tapir.ztapir.{endpoint, oneOf, oneOfVariant, statusCode, _} | ||
import zio.RIO | ||
import sttp.tapir.generic.auto._ | ||
import io.circe.generic.auto._ | ||
import sttp.tapir.json.circe.jsonBody | ||
import sttp.tapir.server.ziohttp.ZioHttpInterpreter | ||
import zhttp.http.{Http, HttpData, Method, Request, Response} | ||
import zhttp.service.{ChannelFactory, Client, EventLoopGroup} | ||
import zio.json.{DecoderOps, EncoderOps} | ||
import zio.{RIO, ZIO} | ||
|
||
class CreditApplicationResultRoutes[R <: Logger with EventLoopGroup with ChannelFactory with CreditApplicationRepository] extends Http4sDsl[RIO[R, *]] with RouteHelper[R] with ServerOptionsHelper[R] { | ||
|
||
private val getCreditApplicationResultEndPoint = endpoint.get | ||
.description("Get credit application result") | ||
.in("creditapplication" / "result" / path[String].description("credit application ID")) | ||
.errorOut( | ||
oneOf[ErrorResponse]( | ||
oneOfVariant(statusCode(StatusCode.InternalServerError) and jsonBody[InternalServerErrorResponse] | ||
.description("Internal server error")), | ||
oneOfVariant(statusCode(StatusCode.NotFound) and jsonBody[NotFoundResponse].description("Not Found")) | ||
) | ||
) | ||
.out(jsonBody[List[CreditApplicationResultDTO]]) | ||
|
||
val getRoutes = ZioHttpInterpreter().toHttp( | ||
List( | ||
getCreditApplicationResultEndPoint.zServerLogic { applicationId => | ||
handleError(getResultForCreditApplication(applicationId)) | ||
} | ||
)) | ||
|
||
def getResultForCreditApplication(applicationId: String) = | ||
for { | ||
creditApplication <- CreditApplicationDB.get(applicationId) | ||
hostConf <- ZIO.from(ConfigFactory.load.getString("services.recommendationService")).mapError(e => ConfigError(e.toString)) | ||
// ca <- ZIO.fromOption(creditApplication).mapError(e => NotFoundFailure(s"not found application : $applicationId")) | ||
request = CreateCreditRequestDTO( | ||
amount = BigDecimal(creditApplication.map(_.sum).getOrElse(10000L)), | ||
timeLimitMonth = Month(creditApplication.map(_.periodInMonth.toDouble).getOrElse(3.0)), | ||
accountBalance = BigDecimal(1000), | ||
monthIncome = BigDecimal(100)) | ||
response <- Client.request( | ||
"http://localhost:8999/decision", | ||
Method.POST, | ||
content = HttpData.fromCharSequence(request.toJson)).mapError(e => NotFoundFailure("")) | ||
|
||
json <- response.bodyAsString.map(_.fromJson[List[CreditApplicationResultDTO]]).mapError(e => NotFoundFailure(s"can't parse response")) | ||
result <- json match { | ||
case Left(value) => ZIO.fail(NotFoundFailure(s"can't parse response: $value")) | ||
case Right(value) => ZIO.succeed(value) | ||
} | ||
} yield result | ||
|
||
def getEndpoints = List(getCreditApplicationResultEndPoint) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.9") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters