feat: single country page, borders

This commit is contained in:
efim
2023-09-24 13:37:39 +00:00
parent 433ff827b7
commit ae2b3d1327
5 changed files with 311 additions and 8 deletions

View File

@@ -1,6 +1,7 @@
package example
import upickle.default._
import scala.jdk.CollectionConverters._
final case class Country(
name: String,
@@ -15,7 +16,10 @@ final case class Country(
currencies: List[Currency] = List.empty,
languages: List[Language],
borders: List[String] = List.empty,
) derives ReadWriter
) derives ReadWriter {
def currenciesView = currencies.map(_.name).asJava
def languagesView = languages.map(_.name).asJava
}
final case class Currency(
code: String,

View File

@@ -13,10 +13,9 @@ case class Routes(countries: List[Country])(implicit
log: cask.Logger
) extends cask.Routes {
/**
* initializing thymeleaf template engine
* which finds and renders html templates by name
*/
/** initializing thymeleaf template engine which finds and renders html
* templates by name
*/
def buildTemplateEngine(): TemplateEngine = {
val templateResolver = new ClassLoaderTemplateResolver()
templateResolver.setTemplateMode(TemplateMode.HTML)
@@ -37,7 +36,7 @@ case class Routes(countries: List[Country])(implicit
val regions = countries.map(_.region).distinct.sorted.asJava
val selectedCountries = region match {
case None => countries
case None => countries
case Some(selectedRegion) => countries.filter(_.region == selectedRegion)
}
@@ -55,7 +54,23 @@ case class Routes(countries: List[Country])(implicit
@cask.get("/country")
def getCountryPage(countryName: String) = {
s"counrty $countryName was requested"
val context = new Context()
countries.find(_.name == countryName) match {
case Some(selectedCountry) =>
context.setVariable("country", selectedCountry)
val borderCountries = countries
.filter(c => selectedCountry.borders.contains(c.alpha3Code))
.map(_.name).asJava
context.setVariable("borderCountries", borderCountries)
val countryPage = engine.process("country", context)
Response(
countryPage,
headers = Seq("Content-Type" -> "text/html; charset=utf-8")
)
case None => Response("", 400)
}
}
@cask.post("/do-thing")