@graphql_ru
GraphQL — русскоговорящее сообщество

Общаемся на темы, посвященные GraphQL и опыту его использования. Проблемы. Новости. Решения. Вам могут быть полезны: @apollo_ru, @react_js, @vuejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание в чате было полезным и комфортным.

352 members

Архив канала @graphql_ru 29 декабря 2017 г.

02:36:06 ПП
User 144022504
В схеме я определил, что event_times: Array, массив.
Но в самом GraphQL не нашел тип Array.
Как передать массив в поле event_times:?
02:55:42 ПП
02:56:09 ПП
User 341172775
new GraphQLList или как то так
03:29:17 ПП
User 321317845
Кстати, просто ради понтов, поспамлю чуток: Опубликовал квикстарт моего SDL компилятора + рантайма: https://github.com/railt/railt#quick-start

В ближайших планах (январь) завести опкод сборку, для поднятия бинарников на JS сервере, например.
github.com/railt/railt
A PHP GraphQL Framework. Contribute to railt/railt development by creating an account on GitHub.
03:31:15 ПП
User 321317845
На вопрос "зачем ещё один SDL"  - отвечаю: Это не оригинал, а диалект. Там есть всё, что есть в самом последнем драфте SDL, но кроме этого алгебраические типы и более гибкое приведение типов. Скоро дженерики, наследование скаляров и ещё плюшек завезём)

Пока ещё пишется, не публиковал нигде.
03:50:03 ПП
User 144022504
Может я не правильно выразился, поэтому попробую показать задачу, что я хочу решить. Нужно отправить массив дат.
03:50:07 ПП
04:01:17 ПП
User 321317845
на сервере есть поддержка DateTime скаляра?
04:01:31 ПП
User 321317845
если есть, то в RFC3339 перегоняешь и отправляешь массивчик
04:02:43 ПП
User 144022504
User 321317845
на сервере есть поддержка DateTime скаляра?
есть
04:04:24 ПП
User 321317845
items.map(d => d.dateString);
04:04:25 ПП
User 144022504
User 321317845
если есть, то в RFC3339 перегоняешь и отправляешь массивчик
не понимаю что писать в это поле event_times: 

  type Event {
    _id: ID 
    title: String
    event_times: ???,
    masterlink: Master
  }
04:04:49 ПП
User 321317845
type Event {
    ...
    event_times: [DateTime!]!
    ...
}
04:07:01 ПП
User 144022504
User 321317845
type Event {
    ...
    event_times: [DateTime!]!
    ...
}
у меня на сервере scalar Date
04:07:20 ПП
User 321317845
ну Date значит
04:07:32 ПП
User 321317845
пофигу, в принципе)
04:09:45 ПП
User 144022504
User 321317845
ну Date значит
а в схеме монгус что Date или Array?

event_times: Date
04:09:59 ПП
04:10:09 ПП
04:10:15 ПП
User 321317845
я не работал с монгой никогда)
04:10:31 ПП
User 321317845
но это массив из дат или строк (если нет дат)
04:11:11 ПП
User 321317845
и всё же, присылай в RFC3339
04:11:19 ПП
User 321317845
есть такая вещь как таймзона
04:12:11 ПП
User 321317845
если чел у себя в 23:30, например, выбирает число 23, то присылается 23-12-2017 (например), так?
04:12:47 ПП
User 321317845
Но а если они из америки присылает, где таймзона отличается на 12 часов, то это будет уже 24-12-2017, а не 23
04:13:34 ПП
User 321317845
я просто не в курсе твоей задачи, по-этому просто на всякий случай предупреждаю))
04:23:33 ПП
User 144022504
User 321317845
я не работал с монгой никогда)
у меня там не только даты, в каждом объекте массива, для этого нужно использовать тип Input ?
04:28:13 ПП
User 321317845
Дата - это скаляр
04:28:37 ПП
User 144022504
http://facebook.github.io/graphql/October2016/#ListValue
04:28:39 ПП
User 321317845
каждый скаляр является Inputable типом
04:29:15 ПП
User 321317845
User 144022504
у меня там не только даты, в каждом объекте массива, для этого нужно использовать тип Input ?
только даты и никак иначе
04:29:40 ПП
User 321317845
оригианльный GraphQL не поддерживает Union типы в качестве Inputable
04:29:56 ПП
User 321317845
только скаляры (включая Enum) и сам Input
04:30:52 ПП
User 321317845
если я вопрос понял
04:34:21 ПП
User 144022504
вопрос в том, что нужно отправить вот этот массив в одно поле схемы event_times:
04:34:26 ПП
04:34:58 ПП
User 144022504
проект здесь
https://github.com/gHashTag/test-graphql-server/tree/1toMany
github.com/gHashTag/test-graphql-server/tree/1toMany
Contribute to test-graphql-server development by creating an account on GitHub.
04:45:56 ПП
User 321317845
А накой хрен тебе весь массив?
04:46:09 ПП
User 321317845
у тебя строка и так содержит и дни и месяцы
04:47:02 ПП
User 141958411
User 144022504
в схеме у тебя дата скаляр, значит ты сможешь отправить массив скаляров, а не массив объектов
04:47:55 ПП
User 144022504
User 321317845
А накой хрен тебе весь массив?
согласен)
04:48:07 ПП
04:48:10 ПП
User 321317845
не массив
04:48:12 ПП
User 321317845
а объект
04:48:15 ПП
User 321317845
ну ты понял
04:48:24 ПП
User 321317845
я же говорю, превращаешь в RFC3339
04:48:36 ПП
User 321317845
там будет и дата, и время, и таймзона
04:49:11 ПП
User 321317845
но если всё же прям так надо, то придётся тебе самому описывать
04:49:18 ПП
User 321317845
input DateObject {
    dateString: Date!
    day: Int!
   ...
}

# ###

type Event {
    event_times: [DateObject!]!
}
04:50:26 ПП
User 141958411
User 321317845
input DateObject {
    dateString: Date!
    day: Int!
   ...
}

# ###

type Event {
    event_times: [DateObject!]!
}
да, в этом случае можно отправить то что на скриншоте, т.е. массив объектов
04:50:54 ПП
04:51:22 ПП
04:51:44 ПП
User 144022504
Mongoose: events.insert({ updatedAt: new Date("Fri, 29 Dec 2017 16:50:08 GMT"), createdAt: new Date("Fri, 29 Dec 2017 16:50:08 GMT"), title: 'Hello', masterlink: ObjectId("5a464fdaf17e9682d50b1f78"), _id: ObjectId("5a467240e666468d3a63ffb2"), event_times: [ false, false ], __v: 0 })
04:51:48 ПП
User 321317845
потому что дата должна быть в нужном формате, ща
04:52:08 ПП
User 321317845
я не помню где искать
04:52:11 ПП
04:53:52 ПП
User 321317845
вот чот нашлось: https://github.com/graphql/graphql-js/issues/497
github.com/graphql/graphql-js/issues/497
Hi, I tried to use a custom scalar type Date in my schema, written with the GraphQL schema language. It seems that buildSchema takes only one param. Is there a way to "register" my custom type in ...
04:54:01 ПП
User 141958411
User 144022504
false false
проверь свой резолвер, часть которая на сервере, GraphQL тут не при чем
04:54:38 ПП
User 141958411
createEvent: async (_, args) => {
    // Create new event
    return await Event.create(args) 
вот тут в args что приходит от мутации?
04:55:53 ПП
User 321317845
а точно дата позволяет указывать dd-mm-yyyy формат?
04:56:13 ПП
User 321317845
я просто хз как там на JS
04:56:39 ПП
User 144022504
User 321317845
потому что дата должна быть в нужном формате, ща
дату в мутации отправля ю так 2017-11-24T13:08:56.504Z
и все равно false
04:57:03 ПП
User 321317845
ну значит @SReflex правильно написал
04:57:06 ПП
User 321317845
где-то косяк
04:57:12 ПП
User 321317845
console.log(args) поможет
05:03:53 ПП
User 144022504
User 141958411
createEvent: async (_, args) => {
    // Create new event
    return await Event.create(args) 
вот тут в args что приходит от мутации?
event_times: [ false, false ],
05:04:51 ПП
User 141958411
сделай в схеме
  type Event {
    _id: ID 
    title: String
    event_times: [String!]!
    masterlink: Master
  }
05:05:01 ПП
User 141958411
т.е сделай дату строкой и попробуй еще раз
05:06:46 ПП
User 144022504
User 141958411
сделай в схеме
  type Event {
    _id: ID 
    title: String
    event_times: [String!]!
    masterlink: Master
  }
event_times: [ '2017-11-24T13:08:56.504Z', '2017-11-29T13:08:56.504Z' ],
так норм
05:08:00 ПП
User 141958411
в базу пишет?
05:09:46 ПП
User 144022504
User 141958411
в базу пишет?
ругает Error: listen EADDRINUSE :::3000
05:10:09 ПП
User 144022504
там   event_times: Array,
05:10:43 ПП
User 141958411
[String] или [Date]
05:10:49 ПП
User 141958411
нужно что то из этого
05:11:01 ПП
User 141958411
лучше второе, но не факт что гладко приведение типа пройдет
05:12:35 ПП
User 144022504
User 141958411
[String] или [Date]
не знал что так можно, спасибо в который раз за ликбез
05:12:51 ПП
User 144022504
в базу записали)
05:14:12 ПП
User 141958411
нужно бы с scalar Date  этим разобраться
05:14:23 ПП
User 141958411
чтобы не валить базу неправильными данными с клиента
05:15:31 ПП
User 144022504
ок попробую переписать на Date
05:16:13 ПП
User 141958411
User 144022504
event_times: [ false, false ],
приходят false, возможно из за формата даты, но я не знаю точно
05:16:53 ПП
User 144022504
User 141958411
приходят false, возможно из за формата даты, но я не знаю точно
тоже так думаю, сейчас поищу правильный формат и проверю
05:24:46 ПП
User 144022504
2017-12-18T19:24:41.000Z формат даты верный, передаю их так:
event_times: ["2017-12-18T19:24:41.000Z", "2017-12-18T19:24:47.000Z"]
05:29:08 ПП
User 141958411
результат тот же false?
05:29:36 ПП
User 144022504
User 141958411
результат тот же false?
да event_times: [ false, false ],
05:30:28 ПП
User 141958411
const Date = new GraphQLScalarType({
  name: 'Date',
  serialize(value) {
    return value;
  },
});
05:30:58 ПП
User 141958411
наверное нужно что то типа этого
05:31:10 ПП
User 141958411
просто так scalar Date не работает
05:32:46 ПП
User 141958411
но должно работать вроде
05:35:45 ПП
User 141958411
https://github.com/tjmehta/graphql-date
github.com/tjmehta/graphql-date
graphql-date - GraphQL Date Type
05:39:02 ПП
User 144022504
в резолвер забыл добавить
import GraphQLDate from 'graphql-date'
Date: GraphQLDate,

и scalar Date в схеме заработал. Ура! Можно собирать календарь)