Сангрия: как обрабатывать пользовательские типы - PullRequest
0 голосов
/ 21 февраля 2019

пытается работать с Сангрией и Сликом .Новое для них обоих.

У меня есть несколько таблиц, которые разделяют список общих полей.Слик представляет это ниже:

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, используя производный макрос макросов, он жалуется, что

Не удается найти подходящий тип вывода GraphQL для .CommonFields.Если вы уже определили его, рассмотрите возможность сделать его неявным и убедитесь, что он доступен в области.

[error] lazy val UserType: ObjectType [Unit, User] = DerveObjectType [Unit, User] (

Как мне сказать Sangria / Graphql , как обрабатывать этот вложенный список полей (из CommonFields)?

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 16 июля 2019

Вы получаете тип для пользователя, но у пользователя также есть общие поля, которые вы не получили.Поэтому он не может найти информацию о типе для CommonFields.Получите оба и сделайте вывод неявным для CommonFields.

implicit val CommonFieldsType: ObjectType[Unit, CommonFields] = deriveObjectType[Unit, CommonFields]     
implicit val UserType: ObjectType[Unit, User] = deriveObjectType[Unit, User]
...