Como omitir campos de classe de caso em um mapeamento de tabela liso?

Estou aprendendo um pouco de Scala e atualmente estou molhando os pés com o framework slick (3.1) + play, então talvez a resposta seja simples aqui e estou perdendo algo óbvio. Eu tenho o seguinte modelo e tabela

case class User(id: Long = -1,
                username: String,
                passwordHash: String,
                email: Option[String] = None) 

class Users(tag: Tag) extends Table[User](tag, "USERS") {
    def id = column[Long]("ID", O.PrimaryKey, O.AutoInc)
    def username = column[String]("USERNAME")
    def email = column[Option[String]]("EMAIL")
    def passwordHash = column[String]("PASSWD_HASH")
    def * = (id, username, passwordHash, email) <>((User.apply _).tupled, User.unapply)
  }

Agora, isso acima funciona perfeitamente, mas eu gostaria de adicionar alguns campos aoUser classe de caso quenão são salvas na tabela USER, ou seja, permissões e funções, assim:

case class User(id: Long = -1,
                username: String,
                passwordHash: String,
                email: Option[String] = None,
                permissions: Seq[String] = Seq.empty,
                roles: Seq[String] = Seq.empty) 

Supõe-se que eles entrem em suas próprias tabelas como identificação do usuário -> permissão / mapeamento de funções (simples para muitos relacionamentos).

Por fim, esses devem ser consultados também, mas por enquanto eu gostaria de ignorar os campos adicionais (apenas como exercício). Como ajusto a projeção original na tabela para omitir / ignorar esses novos campos? Obviamente, o mapeamento original

 def * = (id, username, passwordHash, email) <>((User.apply _).tupled, User.unapply)

não funciona mais, pois o toque não corresponde à classe do caso. Tanto quanto eu posso dizer, não deve ser muito difícil, pois<> usa apenas duas funções que são convertidas de uma instância simples para uma de usuário e vice-versa e essas funções devem ignorar os novos campos (ou preenchê-los com seus valores padrão). Mas não consigo descobrir como expressar isso.

Eu tentei adicionar um novoapply() com uma assinatura mais curta para oUser objeto complementar, mas, em seguida, recebo um erro que basicamente me diz que o liso não sabe qualapply() usar. Faz sentido, mas não sei como referenciar um ou outro. Eu fiz a mesma coisa com um construtor adicional paraUser, o resultado é o mesmo problema. E eu tentei escrever funções básicas de conversão como esta:

class Users(tag: Tag) extends Table[User](tag, "USERS") {

    def constructUser = (id: Long, username: String, passwordHash: String, email: Option[String]) =>
      User(id, username, passwordHash, email)

    def extractUser = (user: User) => user match {
      case User(id, username, passwordHash, email, permissions, roles) =>
        Some((id, username, passwordHash, email))
    }

    def id = column[Long]("ID", O.PrimaryKey, O.AutoInc)
    def username = column[String]("USERNAME")
    def email = column[Option[String]]("EMAIL")
    def passwordHash = column[String]("PASSWD_HASH")
    def * = (id, username, passwordHash, email) <>(constructUser, extractUser)
  }

Infelizmente, isso também leva a um erro:

[error]  found   : (Long, String, String, Option[String]) => models.User
[error]  required: ? => ?
[error]     def * = (id, username, passwordHash, email) <>(constructUser, deconstructUser)

questionAnswers(1)

yourAnswerToTheQuestion