Сангрия: как обрабатывать пользовательские типы
Пытается работать с Сангрией и Сликом. Новое для них обоих.
У меня есть куча таблиц, которые разделяют список общих полей. Слик представляет это ниже:
case class CommonFields(created_by: Int = 0, is_deleted: Boolean = false)
trait CommonModel {
def commonFields: CommonFields
def created_by = commonFields.created_by
def is_deleted = commonFields.is_deleted
}
case class User(id: Int,
name: String,
commonFields: CommonFields = CommonFields()) extends CommonModel
Гладкие столы:
abstract class CommonTable [Model <: CommonModel] (tag: Tag, tableName: String) extends Table[Model](tag, tableName) {
def created_by = column[Int]("created_by")
def is_deleted = column[Boolean]("is_deleted")
}
case class CommonColumns(created_by: Rep[Int], is_deleted: Rep[Boolean])
implicit object CommonShape extends CaseClassShape(
CommonColumns.tupled, CommonFields.tupled
)
class UsersTable(tag: Tag) extends CommonTable[User](tag, "USERS") {
def id = column[Int]("ID", O.PrimaryKey, O.AutoInc)
def name = column[String]("NAME")
def * = (id,
name,
CommonColumns(created_by, is_deleted)) <> (User.tupled, User.unapply)
}
val Users = TableQuery[UsersTable]
Проблема с Graphql:
lazy val UserType: ObjectType[Unit, User] = deriveObjectType[Unit, User]()
Когда я пытаюсь создать UserType с использованием производного макроса макросов, он жалуется, что
Can't find suitable GraphQL output type for <path>.CommonFields. If you have defined it already, please consider making it implicit and ensure that it's available in the scope.
[error] lazy val UserType: ObjectType[Unit, User] = deriveObjectType[Unit, User](
Как мне сказать Sangria/Graphql, как обрабатывать этот вложенный список полей (из CommonFields)?
Пожалуйста помоги.
0 ответов
Вы определяете тип для пользователя, но у пользователя также есть общие поля, которые вы не получили. Таким образом, он не может найти информацию о типе для CommonFields. Получите оба и сделайте вывод для CommonFields неявным.
implicit val CommonFieldsType: ObjectType[Unit, CommonFields] = deriveObjectType[Unit, CommonFields]
implicit val UserType: ObjectType[Unit, User] = deriveObjectType[Unit, User]