Я пытаюсь получить список сообщений, включая все вложения указанных сообщений. До сих пор мне приходилось выбирать объекты: MessageEntity и AttachmentEntity с внешним ключом от AttachmentsEntity до MessageEntity.
Я попытался сгруппировать эти два результата и отобразить их таким образом, чтобы каждое сообщение было связано с опцией списка вложений
val messages = TableQuery[MessageLifted]
val messagesAndAttachmentsLeftJoin = messages joinLeft piecesJointes on {
(_msg, _pj) => _msg.id === _pj.idMessage
}
val messagesAndAttachments = messagesAndAttachmentsLeftJoin .groupBy(_._1).map{ case (msg, req) => (msg, req.map(_._2)) }
def getMessagesConversation(isDemo: Boolean,
identifUser: String,
conversationId: String)(implicit messages: Messages): Future[List[Message]] = dbRepository.perform(isDemo) {
val messages = messagesAndAttachments.result.map(_.map {
case (message) => {
entityToMessage(message)
}
}.toList)
Я ожидаю, что у меня будет объект типа List [tuple2 (Message, List [Attachment])]], но я получаю следующую ошибку:
/root/projects/digifact/server/digifact/app/repositories/digifact/messagerie/MessagerieRepository.scala:146: No matching Shape found.
[error] Slick does not know how to map the given types.
[error] Possible causes: T in Table[T] does not match your * projection,
[error] you use an unsupported type in a Query (e.g. scala List),
[error] or you forgot to import a driver api into scope.
[error] Required level: slick.lifted.FlatShapeLevel
[error] Source type: (repositories.digifact.documentation.MessageLifted, slick.lifted.Query[slick.lifted.Rep[Option[repositories.digifact.documentation.PieceJointeLifted]],Option[repositories.digifact.documentation.PieceJointeEntity],[+A]Seq[A]])
[error] Unpacked type: T
[error] Packed type: G
[error] private val messagesAndAttachments = messagesAndAttachmentsLeftJoin.groupBy(_._1).map{ case (msg, req) => (msg, req.map(_._2))}
Любая помощь?