– Unsafe case class Movie(id: String, title: String, credits: List[Credit], productionYear: Int, languages: List[String], imageUrl: String) { require(id.nonEmpty) } • Smart constructors case class Movie private (id: String, title: String, credits: List[Credit], productionYear: Int, languages: List[String], imageUrl: String) { def copy(id: String = id, title: String = title, credits: List[Credit] = credits, productionYear: Int = productionYear, languages: List[String] = languages, imageUrl: String = imageUrl): Either[Invalid, Movie] = Movie(id, title, credits, productionYear, languages, imageUrl) } object Movie { def apply(id: String, title: String, credits: List[Credit], productionYear: Int, languages: List[String], imageUrl: String): Either[Invalid, Movie] = ??? }