package tv.miracle.backend.graphql object Episode extends Enumeration { val NEWHOPE, EMPIRE, JEDI = Value } trait Character { def id: String def name: Option[String] def friends: List[String] def appearsIn: List[Episode.Value] } case class Human( id: String, name: Option[String], friends: List[String], appearsIn: List[Episode.Value], homePlanet: Option[String]) extends Character case class Droid( id: String, name: Option[String], friends: List[String], appearsIn: List[Episode.Value], primaryFunction: Option[String]) extends Character class CharacterRepo { import CharacterRepo._ def getHero(episode: Option[Episode.Value]): Character = episode flatMap (_ => getHuman("1000")) getOrElse droids.last def getHuman(id: String): Option[Human] = humans.find(c => c.id == id) def getDroid(id: String): Option[Droid] = droids.find(c => c.id == id) def getHumans(limit: Int, offset: Int): List[Human] = humans.slice(offset, offset + limit) def getDroids(limit: Int, offset: Int): List[Droid] = droids.slice(offset, offset + limit) } object CharacterRepo { val humans = List( Human( id = "1000", name = Some("Luke Skywalker"), friends = List("1002", "1003", "2000", "2001"), appearsIn = List(Episode.NEWHOPE, Episode.EMPIRE, Episode.JEDI), homePlanet = Some("Tatooine")), Human( id = "1001", name = Some("Darth Vader"), friends = List("1004"), appearsIn = List(Episode.NEWHOPE, Episode.EMPIRE, Episode.JEDI), homePlanet = Some("Tatooine")), Human( id = "1002", name = Some("Han Solo"), friends = List("1000", "1003", "2001"), appearsIn = List(Episode.NEWHOPE, Episode.EMPIRE, Episode.JEDI), homePlanet = None), Human( id = "1003", name = Some("Leia Organa"), friends = List("1000", "1002", "2000", "2001"), appearsIn = List(Episode.NEWHOPE, Episode.EMPIRE, Episode.JEDI), homePlanet = Some("Alderaan")), Human( id = "1004", name = Some("Wilhuff Tarkin"), friends = List("1001"), appearsIn = List(Episode.NEWHOPE, Episode.EMPIRE, Episode.JEDI), homePlanet = None)) val droids = List( Droid( id = "2000", name = Some("C-3PO"), friends = List("1000", "1002", "1003", "2001"), appearsIn = List(Episode.NEWHOPE, Episode.EMPIRE, Episode.JEDI), primaryFunction = Some("Protocol")), Droid( id = "2001", name = Some("R2-D2"), friends = List("1000", "1002", "1003"), appearsIn = List(Episode.NEWHOPE, Episode.EMPIRE, Episode.JEDI), primaryFunction = Some("Astromech"))) }