Выпуск GraphQL API Parameters - Эликсир

У меня есть требование оставлять комментарии в приложении. Это было реализовано и работает нормально. Теперь у меня есть дополнительное требование для загрузки фотографии вместе с комментарием. Итак, я реализовал функцию камеры в приложении и сейчас отправляю URI изображения в API GraphQL. Я переработал схему и типы в эликсире. Но каким-то образом параметры исчезают, когда достигают класса обслуживания.

comment.ex

defmodule MyApp.Comment do
  use MyApp.Schema

  schema "comments" do
    field :art_id    , :string
    field :body      , :string
    field :image_url   , :string
    field :image_name  , :string

    belongs_to :user , User
    timestamps()
  end

  @optional_attributes ~w(body art_id image_url image_name)a

  def changeset(%Comment{} = schema, params) do
    schema
    |> cast(params, @optional_attributes)
    |> validate_required(@required_attributes)
  end
end

schema.ex содержит:

 field :create_comment, :comment do
      arg :art_id, non_null(:string)
      arg :base64_image, :string
      arg :image_name, :string
      arg :body, :string

      middleware RequireAuth
      resolve &CommentService.create_comment/2
      middleware HandleErrors
 end

types.ex

object :comment do
    field :id     , :id
    field :art_id , :string
    field :body   , :string
    field :image_name  , :string
    field :image_url   , :image_url
    field :user   , :user do
      resolve &UserResolver.resolve/2
    end
  end

scalar :image_url, description: "S3 image url" do
    serialize fn(arg) ->
      {:ok, url} = MyApp.FileService.get_object_url(Application.get_env(:ex_aws, :bucket), arg)
      url
    end
  end

На моем локальном сервере логи:

[info] POST / api / graphql
[debug] QUERY OK source = "users" db = 1.6ms
ВЫБЕРИТЕ u0."Id", u0."Email", u0."Fb_id", u0."Full_name", u0."Avatar_url", u0."Password_digest", u0."Email_confirmed_at", u0."Insert_at", u0."updated_at" ОТ "пользователей" КАК u0 ГДЕ (u0."id" = $ 1) [1]
[Отладка] абсент схема =MyApp.API.Schema переменных =%{"artId" => "разделители-2005-06", "base64Image" => "данные: изображение / JPEG;base64,/9J /4QMMRXhpZgAASUkqAAgAAAA3ADIBAgAUAAAAogIAAA8BAgAKAAAAtgIAAAEBAwABAAAAIAoAABABAgAIAAAAwAIAAAmSAwABAAAAEAAAAAiSAwABAAAAAAAAAAqkAwABAAAAAQAAAAikAwABAAAAAAAAAAmkAwABAAAAAAAAAAABAwABAAAAmAcAABIBAwABAAAAAAAAAAeSAwABAAAA/////yWIBAABAAAAyAIAAGmHBAABAAAA /bAEMABQMEBAQDBQQEBAUFBQYHDAgHBwcHDwsLCQwRDxISEQ8RERMWHBcTFBoVEREYIRgaHR0fHx8TFyIkIh4kHB4fHv/bAEMBBQUFBwYHDggIDh4UERQeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHv/AABEICiAHmAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+ FR /xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+ FR /2gAMAwEAAhEDEQA/APcLa1klu0w5KryRk1rPaK8e3IPHpUNpGIySARnpnrVxM+vWsUF+qMoaagmY7ckD9KcRtYgjkehrUIC5JwB25qnNtDblxnHUGmFyKIlVIX8aeuSc7jRtzinoSgIwKBXLNtIixbWAOfamyOEPHeokB6kUlwVWEux4FAiSbyfL3bxuPQ5/Soy3GM/jWbLOqo0jvtUdSTVYagzsQjEsTge9A0jUeVFnwoB4+8PWrSanbrJl8rxWeIWTJOB681S1lwsDoq7s4yfSgV7FfVdUF3fGW2un8pRwqngjNWbO6ubmQCOOQlQPm2kgVzUTWtkpaWUKFPU+/ в /wrq989tJ5UUYtw/yNklmPcH0HpQTeysT6jqS/aUtrqYA4yAv+NYt6bK6vYkiRVcD5Gc4ye9WtPk0uyupb7VZfmJLYPzDr6Vj3982u6uf7Nt/s8UY8sykYO3sQKBppEPjDUotKvYmvb5pI9oIQtk/Sm+IfEltqemx2mjRqshUZlMfU46DPrzXE6rai28QrFrt817hgThj868ds8V2Hh6KK/MT6Pbl4j8sZCkAD8enemkJaaFO+8M6rDoEVxdaw7Ip8zyA3C+3vXMT6naWEZjt1V5TyechT6n1ru/Fj31pYJb3e1bfvyPlz34rz/xhP4b0zQkjtYIri/Y/IYj949eT+I96d+5Wm1i74F0uTUr5726uxFCpKj5wGY+ о +nT8aj8T69ovhfV2tcyTbR83R8Z989q4zw1qniuO5ebT4VigZvL2Sp0zySM/zqWN9KjvXutbjLGNOFYk4OfTPzfShpoqcHzWTuT+L/EMniG6it7OHyVBBEmNvmE4646V0OkaBHDC7apdRsCu0qMAEdB16iuLvtX0+71V4NF0+YsRxtXHmHuf9kdvwqzc2l2xRNR3PsIAUngD047UaoTjZ7WPQr2/0zStOBdFWB1ICx8kj2FcL4nuLfULZlVm8tX3hd+P5Vb8SsE0wkneyLlvlJ6e1ee3c2oz2zOFKRN0bJH/AOqkTfQ6Xwxqek2Qla7hEssfMbdSD6cnv71hy3Nzq2uSpptkixyybhFAhKoMc/ RZ +Nc7omml7wzXTfvB8oJOSB9a7vw5eNots0scAl3IVAzg5/CnfzGlo2iO50y8SZVvZTlflK7snA46ms3xVqVgLKOCOPzWjBIIyAnPIx0Prmi61rUbu5d7k7ctkEcYH071R1OS1ijVpiHZugA3ZFSTZp2W7LOi6nf3lkHYvHDn5QRyV5A59PQdKni8Ox3cDyNKXVSeC+Npx3/Ssg61cpaIsRCxjJClai0+aUGaR7hwshBI7YoCCdpJon0R38P3M5toUZphiTPX8+uKg1VrjV78i/uCtuWwQgx8v5jNWVzKxdMntzVW8hlmwsS5btiglGsZ9FtIYotPjjFwF+fYGAJx3zWfq2q3V2xWSHy0I4Cjg8fqKoRwT2dwsdyoDEA4LZyK6CSTztPEakMWXByOlFim9blvwnqV3YWM7xbVndcxuAcrznPB6+/vTj4g1K71DdcXryRZysTPkE4Ayc9egpvh61nWzMTCM5J2hT0H40y1l0OzlZpooxOjHBRckmgPQk1dBcqzFfmJyD6Huay9MjaK6feQxY9M4wK0k1YallI4igKgkZ+4fSsueGa3umEnGDwQeo9aBJXRo+IPElvb2n2SNFeU7QwH3075H1rJsriWQEM21W5IH4/nVXXFt/PWSIjd0IA5+tRNNJ5IZHKsR1FO1yoc0Xc6/R7jT7OyuTJaxyzS5JLAc1x89zvu5XgUoN5x82Tj3NXvtQurQRN8vHUHrTdN0ae54t4iwwcH1q1sSlYriV5diyyF5O7EdatzR2T7XEKs7AZB5xiq0elzSXTiV/L8pyrZFWo5baxuhmNLjaOGPApoUHFLlRD4hubuS1eKWVxayPuMKghQ553DHSorOwtzapO2RK2SCDU+v6q1+uyKDyohnCk7vxrLtYH4k+7t6c0dRqL5bs0vtSRQJbwIAEOcgdTWffwTXMuOQpHzE9a1LGKFIjIyqzY5PWmRCS9uTHGMccfSnsF0zP0iymtphl1cDknpzW3q2qXdwqW4ghREUAFGK5OOpGOvvUYtxa3Xl3DKoH4gj1puqX0VwI4bWIRqg5OeSaLArSlfcngtwtuS5DsVH5Vm3lusoYbc5G3noRTImnRijysg9R6VpL5fkBkIbjsc0dR3ktLmXZLJbNKYnZFlXY6g4DAEEA/iKdZJEt0Wk" <> ..., "тело" => "Sample картина", "ImageName" => "1-1536824593426"}


mutation createComment($artId: String!, $body: String) {
  createComment(artId: $artId, body: $body) {
    id
    user {
      id
    }
    artId
    body
  }
}

Я не уверен, что с этим не так. Но мутация показывает только старые аргументы. Он не содержал добавленных новых аргументов. Кроме того, в моей службе распознавания я получаю только art_id и body в качестве параметров, как показано ниже.

%{art_id: "comma-2005-06", body: "Sample picture"}

Я что-то пропустил? Может кто-нибудь, пожалуйста, помогите?

1 ответ

Решение

Не ошибка эликсира

Это было связано с тем, что определение схемы в FE не содержит новых атрибутов.

Язык определения схемы

Чтобы упростить понимание возможностей сервера, в GraphQL реализован понятный человеку синтаксис схемы, известный как язык определения схемы или "SDL". SDL используется для выражения типов, доступных в схеме, и того, как эти типы связаны друг с другом.

Обновив схему, как показано ниже в schema.graphql:

mutation createComment($artId: String!, $body: String, $base64Image: String, $imageName: String) {
  createComment(artId: $artId, body: $body, base64Image: $base64Image, imageName: $imageName) {
    ...commentData
  }
}

fragment commentData on Comment {
  id
  user {
    id
    fullName
  }
  artId
  body
  imageUrl
  imageName
}

GraphQL API теперь работает нормально.

Другие вопросы по тегам