def fromRowOpt()

in app/model/editions/EditionsCard.scala [138:183]


  def fromRowOpt(
      rs: WrappedResultSet,
      prefix: String = ""
  ): Option[EditionsCard] = {
    for {
      id <- rs.stringOpt(prefix + "id")
      cardType <- rs
        .stringOpt(prefix + "card_type")
        .flatMap(CardType.withNameOption)
      addedOn <- rs
        .zonedDateTimeOpt(prefix + "added_on")
        .map(_.toInstant.toEpochMilli)
    } yield cardType match {
      case CardType.Article =>
        EditionsArticle(
          id,
          addedOn,
          metadata = extractMetadata[EditionsArticleMetadata](
            rs,
            prefix,
            EditionsArticleMetadata.default
          )
        )
      case CardType.Chef =>
        EditionsChef(
          id,
          addedOn,
          metadata = extractMetadata[EditionsChefMetadata](
            rs,
            prefix,
            EditionsChefMetadata()
          )
        )
      case CardType.Recipe => EditionsRecipe(id, addedOn)
      case CardType.FeastCollection =>
        EditionsFeastCollection(
          id,
          addedOn,
          metadata = extractMetadata[EditionsFeastCollectionMetadata](
            rs,
            prefix,
            EditionsFeastCollectionMetadata()
          )
        )
    }
  }