Quero converter a classe de caso UserDTO para a classe de caso User. Encontro a solução na conversão de classe de caso sem forma.
class SameFieldConverter[T] {
def apply[S, SR <: HList, TR <: HList, MR <: HList, IR <: HList](s: S)(implicit
genS: LabelledGeneric.Aux[S, SR],
genT: LabelledGeneric.Aux[T, TR],
merger: Merger.Aux[SR, HNil, MR],
intersection: Intersection.Aux[MR, TR, IR],
align: Align[IR, TR]) = genT.from(intersection(merger(genS.to(s), HNil)))
mas tenho problemas com campos diferentes, por exemplo, em UserDTO tenho o nome do campo, sobrenome, mas em User tenho o nome completo.
case class UserDTO(name:String, surname:String, age:Int){
def toDomain:User = User(name + surname, age)
}
case class User(fullName:String, age:Int)
Também tenho problemas com nomes de campos diferentes, por exemplo, nome -> sobrenome
case class UserDTO(name:String, surname:String, age:Int)
case class User(firstName:String, surname:String, age:Int)
Eu penso sobre a solução como em um alias de pena ("nome", _.surname), mas tenho um cérebro pequeno. Eu também estava pensando em olhar para o uso da API de reflexão scala