Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class HtmlController (private val houseRepository: HouseRepository,
- private val pointsRepository: PointsRepository) {
- @GetMapping("/")
- fun frontpage(model: Model): String {
- model["title"] = "Harry Potter partay"
- val houses = houseRepository.findAllByOrderByNameAsc().toList()
- val housesAndPoints = houses
- .map { Pair(it, pointsRepository.findAllByHouseOrderByAddedAtAsc(it)
- .sumBy { point -> point.value }) }
- model["houses"] = createHouseRows(housesAndPoints)
- return "frontpage"
- }
- @GetMapping("/house/{name}")
- fun house(@PathVariable name: String, model: Model): String {
- val house = houseRepository.findByName(name)
- ?: throw IllegalArgumentException("Wrong house name provided")
- val points = pointsRepository.findAllByHouseOrderByAddedAtAsc(house)
- .sumBy { it.value }
- val renderedHouse = house?.render(points)
- model["title"] = house.name
- model["house"] = renderedHouse
- return "house"
- }
- @GetMapping("/house/{name}/points")
- fun points(@PathVariable name: String, model: Model): String {
- val house = houseRepository.findByName(name)
- ?: throw IllegalArgumentException("Wrong house name provided")
- val points = pointsRepository.findAllByHouseOrderByAddedAtAsc(house)
- model["title"] = house.name
- model["points"] = points
- return "points"
- }
- fun createHouseRows(houses: List<Pair<House, Int>>) : List<HouseRow> {
- return houses.chunked(2).map { HouseRow(it) }
- }
- class HouseRow(val h: List<Pair<House, Int>>) {
- val houses = h.map { RenderedHouse(it.first.name, it.second) }
- }
- fun House.render(points: Int) = RenderedHouse(
- name,
- points
- )
- data class RenderedHouse(
- val name: String,
- val points: Int
- )
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement