Возврат частичного объекта в Vapor 3 - PullRequest
0 голосов
/ 23 марта 2019

Я хотел бы вернуть частичный объект в ответе для другого типа объекта.

Например, у меня есть модель UserProfile:

  var id: Int?
  var email: String
  var firstName: String?
  var lastName: String?

и модель для взрослых:

  var id: Int?
  var nickname: String
  var type: String
  var user: User.UserProfile
  var family: Family

Скажем, я хотел бы вернуть только адрес электронной почты UserProfile в ответе для взрослых, как это сделать?

Я пробовал подход с отношениями ребенок / родитель, где моя модель для взрослых больше похожа на:

  var id: Int?
  var nickname: String
  var type: String
  var user: User.ID
  var family: Family

.. но тогда мой ответ просто содержит идентификатор объекта, но я действительно хочу вернуть частичный (или даже полный в некоторых случаях) объект.

Заранее спасибо.

1 Ответ

0 голосов
/ 23 марта 2019

Способ сделать это - создать «публичное» определение вашей модели, которое будет представлять JSON, который вы возвращаете с вашего маршрута.

Для вашей модели вы можете создать такую ​​структуру:

struct AdultResponse: Content {
    var id: Int?
    var nickname: String
    var type: String
    var email: String
    var family: Family

    init(adult: Adult) {
        self.id = adult.id
        self.nickname = adult.nickname
        self.type = adult.type
        self.email = adult.user.email
        self.family = adult.family
    }
}

Затем вы можете получить модель Adult из базы данных, создать AdultResponse и вернуть ее из своего маршрута.

...