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

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

352 members

Архив канала @graphql_ru 4 октября 2018 г.

04:20:33 ДП
User 41361143
Да вроде норм, но vesper впервые вижу
02:31:24 ПП
User 299096137
Ребят, кто использовал prisma? Есть какие-то подводные камни? Я уже целый день читаю доку и вроде все круто и прям из коробки но я не могу это в одно целое собрать. 
Хочу собрать бек на ts и использовать призму слой для орм/graphql и все такое. 
Но никак в доке не могу понять, как мне переиспользовать например те же crud резолверы, что они генерируют. 
Точней если с graphql схемой понятно, можно заюзать graphql-import и накидать свою схему импортируе нужное. То как поступать с резовлерами не знаю, если нужный резолвер не найдется, его клиент автоматом на свой заменит чтоль?
Есть еще у них либа graphql-middleware, если ее заюзать, я смогу накинуть свои миддлы на их резолверы ?
Еще не понятно как проект разворачивать, в доке указаны всего 2 либы, а в сгенерированном коде их несколько.
У них в ts-example есть в папке generated файлик resolvers.ts с типами всех револверов, но у меня prisma generate его не делает, в чем прикол?
02:35:10 ПП
User 144022504
User 299096137
Ребят, кто использовал prisma? Есть какие-то подводные камни? Я уже целый день читаю доку и вроде все круто и прям из коробки но я не могу это в одно целое собрать. 
Хочу собрать бек на ts и использовать призму слой для орм/graphql и все такое. 
Но никак в доке не могу понять, как мне переиспользовать например те же crud резолверы, что они генерируют. 
Точней если с graphql схемой понятно, можно заюзать graphql-import и накидать свою схему импортируе нужное. То как поступать с резовлерами не знаю, если нужный резолвер не найдется, его клиент автоматом на свой заменит чтоль?
Есть еще у них либа graphql-middleware, если ее заюзать, я смогу накинуть свои миддлы на их резолверы ?
Еще не понятно как проект разворачивать, в доке указаны всего 2 либы, а в сгенерированном коде их несколько.
У них в ts-example есть в папке generated файлик resolvers.ts с типами всех револверов, но у меня prisma generate его не делает, в чем прикол?
свежий видеокурс по теме
https://www.udemy.com/learning-graphql-with-prisma-and-nodejs/
udemy.com/learning-graphql-with-prisma-and-nodejs
Build and Secure GraphQL APIs with NodeJs, Prisma, and MySQL
02:37:01 ПП
User 148739346
>Но никак в доке не могу понять, как мне переиспользовать например те же crud резолверы, что они генерируют. 

https://github.com/prisma/prisma-binding
https://github.com/prisma/prisma-binding#forwardto
If you just want to forward a query to the exact same underlying prisma query, you can use forwardTo
github.com/prisma/prisma-binding
GraphQL Binding for Prisma services (GraphQL Database) - prisma/prisma-binding
02:38:24 ПП
User 299096137
User 148739346
>Но никак в доке не могу понять, как мне переиспользовать например те же crud резолверы, что они генерируют. 

https://github.com/prisma/prisma-binding
https://github.com/prisma/prisma-binding#forwardto
If you just want to forward a query to the exact same underlying prisma query, you can use forwardTo
github.com/prisma/prisma-binding
GraphQL Binding for Prisma services (GraphQL Database) - prisma/prisma-binding
бля, есть graphql-bindind и есть prisma-binding???
02:41:29 ПП
User 299096137
в общем получается такая тема, я накидываю свою схему из сгенерированной призмы схемы + дописываю что-то свое, если мне нужно просто заюзать готовый из резолверов то использую forward ?
02:41:52 ПП
User 299096137
а я смогу обернуть этот метод, чтоб накинуть свою какую-нить логику?
02:42:12 ПП
User 299096137
или graphql-middleware лучше использовать?
02:51:05 ПП
User 352892335
User 299096137
в общем получается такая тема, я накидываю свою схему из сгенерированной призмы схемы + дописываю что-то свое, если мне нужно просто заюзать готовый из резолверов то использую forward ?
это тот же вопрос, что я вчера тут задавал. пока что я накопал, что для этого проще всего использовать prisma-bindings. но придется каждую операцию crud в ручную прописывать
02:52:27 ПП
User 299096137
переписывать или юзать forward?
02:53:04 ПП
User 299096137
а что насчет сгенерированных типов для резолверов, как их получить?
02:54:01 ПП
User 299096137
User 144022504
свежий видеокурс по теме
https://www.udemy.com/learning-graphql-with-prisma-and-nodejs/
udemy.com/learning-graphql-with-prisma-and-nodejs
Build and Secure GraphQL APIs with NodeJs, Prisma, and MySQL
как не попаду на этот сайт, так вечно 93% скидка
02:54:51 ПП
User 144022504
User 299096137
как не попаду на этот сайт, так вечно 93% скидка
везет) не часто такие скидки 😉
02:55:36 ПП
User 352892335
мне кажется forward сейчас не нужен.
я хочу просто сделать так:
users: (_, args, context, info) => {
      return context.prisma.query.users(args, info);
    },
02:56:20 ПП
User 352892335
а чтобы в схему добавить просто # import Query.*, * from './generated/prisma.graphql'
02:56:28 ПП
User 299096137
я просто не понимаю, откуда берутся изначальные резолверы и если я прокину свой объект, то все похерится?
02:57:29 ПП
User 352892335
если ты используешь prisma-client - то он тебе сгенирит схему
02:57:36 ПП
User 352892335
из нее импортируй
02:57:46 ПП
User 299096137
это схема
02:57:49 ПП
User 299096137
а резолверы?
02:58:43 ПП
User 352892335
ну вот руками получается прописывать надо. сам пытаюсь найти что-то более адекватное. получается на каждый тип по 5 операций
03:00:40 ПП
User 352892335
Смотри, еще статья такая попадалась
https://medium.com/@lastmjs/advanced-graphql-directive-permissions-with-prisma-fdee6f846044
Но не уверен, что она актуальна сейчас. Она в марте написана, а в мае вышли prisma-bindings@2
medium.com/@lastmjs/advanced-graphql-directive-permissions-with-prisma-fdee6f846044
A deeper dive into a sane Prisma setup with declarative GraphQL directive permissions.
03:03:22 ПП
User 352892335
User 299096137
а я смогу обернуть этот метод, чтоб накинуть свою какую-нить логику?
ну вроде как в резолверах и надо это делать, авторизацию, например
03:07:31 ПП
User 299096137
пиздец какой-то, вроде все то, нужная тема которая решит кучу головной боли и самописного кода, но даже по доке не видно как стартануть и как не обосраться
03:07:56 ПП
User 299096137
в доке часто встречаются мертвые ссылки или ссылки на старую доку
03:08:06 ПП
User 299096137
не понятно кому верить и чему
03:10:34 ПП
User 352892335
User 299096137
в доке часто встречаются мертвые ссылки или ссылки на старую доку
Ага, с графкулом вообще ж... там половина не работает. Они его сейчас забросили совсем. А призма тоже пока не допилиная. Чтоб нормально разобраться нужно параллельно читать доки по 1.17 и по 1.14
03:11:12 ПП
User 299096137
они держали проект, но дропнули, теперь взяли новый проект
03:11:15 ПП
03:11:36 ПП
User 352892335
Ну они там грант немереный подняли, вот забили на все остальное
03:11:57 ПП
User 299096137
грант?
03:15:05 ПП
User 352892335
User 299096137
грант?
ага, что-то типа того. бабла много привалило
03:15:55 ПП
User 299096137
бля, я надеюсь я целый рабочий день не проебал на херь которую даже поднять не смогу
03:17:44 ПП
User 352892335
У меня в принципе все нормально заработало. Остался вопрос только как все CRUD сделать доступными для фронта. Судя по отзывам - это до сих пор не решенная проблема, периодически обсуждения всплывают
03:18:44 ПП
User 299096137
если не писать свои резолверы и отдать схему как есть, то круд работать будет?
03:18:53 ПП
User 144022504
User 299096137
бля, я надеюсь я целый рабочий день не проебал на херь которую даже поднять не смогу
GraphCool 2.x переименовали в Prisma и начили новую ветку развития.
03:19:24 ПП
User 299096137
и понизили в версии до 1.х)
03:19:27 ПП
User 352892335
User 299096137
если не писать свои резолверы и отдать схему как есть, то круд работать будет?
да, но не будет авторизации. т.е. все как есть отдаваться будет
03:19:54 ПП
User 299096137
User 352892335
да, но не будет авторизации. т.е. все как есть отдаваться будет
ты graphql-middleware юзал?
03:20:19 ПП
User 144022504
User 299096137
и понизили в версии до 1.х)
Вообщем Prisma с нового года появилась и они только ей занимаются.
03:20:19 ПП
User 352892335
User 144022504
GraphCool 2.x переименовали в Prisma и начили новую ветку развития.
то, что сейчас называется graphcool - это все таки другой продукт
03:21:16 ПП
User 352892335
User 299096137
ты graphql-middleware юзал?
нет. вроде они мне не нужны. хотя хз. у меня сейчас задача с graphcool на призму мигрировать. желательно с минимальными потерями
03:21:33 ПП
User 299096137
User 352892335
нет. вроде они мне не нужны. хотя хз. у меня сейчас задача с graphcool на призму мигрировать. желательно с минимальными потерями
для авторизации не нужны?
03:22:16 ПП
User 352892335
авторизацию ты руками сам делаешь на своем сервере. как раз в ресолверах
03:22:36 ПП
User 299096137
я не знаю че мне делать с аутификацией и пермиссиями, там же на каждое поле надо писать резолвер
03:23:41 ПП
User 299096137
и вообще я хз как развернуть проект. Ебата
И там вопрос с кешированием не решен, так?
03:23:57 ПП
User 352892335
ты же главное понимаешь, что бэк на призме - это два отдельных сервера: 1) призма 2) твой сервак на graphql-yoga
03:24:10 ПП
User 299096137
да я понимаю
03:24:24 ПП
User 299096137
мой сервер должен быть щитом перед призмой и аутификатором
03:24:51 ПП
User 299096137
мне эта идея понятна и нравится, но херня с крудом какая-та жесть
03:25:27 ПП
User 299096137
почему там нет просто мержда круда с другими резолверами
03:25:27 ПП
User 352892335
ага... а призма по тихому умывает руки. видимо то решение, что в графкуле было оказалось бесперспективным, хз... но типа теперь это твоя головная проблема а призма не причем
03:26:17 ПП
User 299096137
лан, тошнит от графа уже
03:26:24 ПП
User 299096137
5 дней, я ничего еще несделал
03:26:32 ПП
User 299096137
все сырое и хуевое
03:26:40 ПП
User 299096137
4 года уже в проде эта херь
03:27:01 ПП
User 299096137
в общем как и реакт, все сырое
03:27:07 ПП
User 352892335
напиши если накопаешь что... я сам сейчас парюсь, как это нормально сделать
04:26:22 ПП
User 299096137
User 352892335
напиши если накопаешь что... я сам сейчас парюсь, как это нормально сделать
Если)
04:27:07 ПП
User 99248986
призма всегда была бесперспективным решением)
04:33:16 ПП
User 299096137
User 99248986
призма всегда была бесперспективным решением)
Можно аргументы? Я просто серьезно пытаюсь бек написать, но тонны бойлер плейт кода убивает, а призма это решает
04:34:51 ПП
User 299096137
Но ебанная дока тратит время.
04:36:46 ПП
User 99248986
киллер фича призмы это трансформация gql запроса в запрос бд, но они помимо этого накрутили еще миллион всего чтобы пустить пыть в глаза инвесторам
04:36:51 ПП
User 99248986
какая у тебя база?
04:37:08 ПП
User 99248986
и почему так много бойлерплейта, много сущностей и всем нужен crud?
04:37:52 ПП
User 299096137
User 99248986
какая у тебя база?
Постгресс. Выбрал ее потому, что популярна и мне нужна релационка, много связей будет.
04:38:37 ПП
User 299096137
User 99248986
и почему так много бойлерплейта, много сущностей и всем нужен crud?
Да, сейчас нужно много круда + в будущем создать систему пермиссий.
04:39:35 ПП
User 99248986
на всякий случай посмотри на appsync, это по мне как лучшее и самое стабильное что сейчас есть из высокоуровневной поддержки gql, но это aws и nosql dynamo https://itnext.io/graphql-made-easy-by-aws-appsync-21dfae586d51
itnext.io/graphql-made-easy-by-aws-appsync-21dfae586d51
Getting started with GraphQL can be tough. However, I’ve still to hear from someone joining the hype-train of this technology that they…
04:40:03 ПП
User 299096137
User 99248986
на всякий случай посмотри на appsync, это по мне как лучшее и самое стабильное что сейчас есть из высокоуровневной поддержки gql, но это aws и nosql dynamo https://itnext.io/graphql-made-easy-by-aws-appsync-21dfae586d51
itnext.io/graphql-made-easy-by-aws-appsync-21dfae586d51
Getting started with GraphQL can be tough. However, I’ve still to hear from someone joining the hype-train of this technology that they…
Нужно локально.
04:40:03 ПП
User 99248986
если постгрес, то есть https://github.com/graphile/postgraphile
github.com/graphile/postgraphile
Execute one command (or mount one Node.js middleware) and get an instant high-performance GraphQL API for your PostgreSQL database! - graphile/postgraphile
04:41:10 ПП
User 99248986
сгенерирует тебе круд и резолверы
04:41:19 ПП
User 99248986
на основе схемы бд
04:42:32 ПП
04:42:45 ПП
User 99248986
+ поддержка от фб частично, то есть более менее стабильно
04:42:54 ПП
User 99248986
и просто либа, а не аттракцион с цыганами
04:46:11 ПП
User 299096137
User 99248986
и просто либа, а не аттракцион с цыганами
Спасибо, я почитаю. А то в призме это умеет, это умеет. Как соединить это все и не ебаться, ходишь по миллионам ссылкам и пытаешься понять , что куда вставлять.
04:46:53 ПП
User 299096137
В примерах одно, а при попытке сделать тоже самое, результат другой.
04:49:30 ПП
User 299096137
User 99248986
если постгрес, то есть https://github.com/graphile/postgraphile
github.com/graphile/postgraphile
Execute one command (or mount one Node.js middleware) and get an instant high-performance GraphQL API for your PostgreSQL database! - graphile/postgraphile
Вышла 4 версия? Типо еще быстрей? А у тебя есть опыт использования?
04:49:49 ПП
User 99248986
User 299096137
Вышла 4 версия? Типо еще быстрей? А у тебя есть опыт использования?
в продакшене нет, у нас все на апсинке
04:49:57 ПП
User 99248986
но слышал нормальные отзывы
04:53:49 ПП
User 144022504
User 99248986
сгенерирует тебе круд и резолверы
подписки там есть? 🤔
04:55:47 ПП
User 99248986
User 144022504
подписки там есть? 🤔
в апсинке есть, а в постграфиле и не должно быть, это либа работающая с типами базы и занимающася одним делом как и полагается либе
04:55:54 ПП
User 99248986
если нужны подписки есть https://github.com/apollographql/graphql-subscriptions например
github.com/apollographql/graphql-subscriptions
:newspaper: A small module that implements GraphQL subscriptions for Node.js - apollographql/graphql-subscriptions
04:57:20 ПП
User 144022504
User 99248986
призма всегда была бесперспективным решением)
для тех, кто не умеет готовить, да!
04:57:52 ПП
05:02:43 ПП
User 299096137
User 144022504
для тех, кто не умеет готовить, да!
Серьезное заявление. Ты смог приготовить?
05:04:49 ПП
User 299096137
Вообще тут много призма юзеров?
05:05:37 ПП
User 144022504
User 299096137
Серьезное заявление. Ты смог приготовить?
Не только я! В нете полно проектов на Prisma и видеокурсов по ней. Вот например:
https://docs.commerceql.com/
05:06:11 ПП
User 144022504
https://www.youtube.com/watch?v=nyE6shIRzxM&list=PLN3n1USn4xlmqhVdKMurNREwtiUpq-SFy
youtube.com/watch?v=nyE6shIRzxM&list=PLN3n1USn4xlmqhVdKMurNREwtiUpq-SFy
Introduction for a new project I'm starting. It's going to be an eCommerce app built with React Native and Prisma GraphQL. Playlist: https://www.youtube.com/...
05:07:07 ПП
User 144022504
https://www.youtube.com/watch?v=-n30pzgnkW0&list=PLs2PzMqLzi7Xmx44xTLfOBCwCAxVgQvE_
youtube.com/watch?v=-n30pzgnkW0&list=PLs2PzMqLzi7Xmx44xTLfOBCwCAxVgQvE_
In this video series we will create all that is required to build a website similar to ProductHunt. There is one slight catch: Products can only be upvoted o...
05:08:43 ПП
User 299096137
Тогда там решили на изи вопрос автогенерируемыеми резолверами?
05:09:30 ПП
User 299096137
Там дошли до шага когда тебе нужен сгенерированный круд и твои резолверы?
05:10:52 ПП
User 144022504
User 299096137
Там дошли до шага когда тебе нужен сгенерированный круд и твои резолверы?
Скорее всего вам нужна скатерть самобранка, а не Prisma! 😜
05:11:15 ПП
User 299096137
Я не понял по доке и примерам, что произойдет, если ты закинешь свои резолверы, но хочешь оставить резолверы призмы
05:11:50 ПП
User 144022504
User 299096137
Я не понял по доке и примерам, что произойдет, если ты закинешь свои резолверы, но хочешь оставить резолверы призмы
смотрите курсы, все сразу поймете!
05:12:15 ПП
User 299096137
User 144022504
смотрите курсы, все сразу поймете!
Это которые за 20$ или текущии ссылки?
05:13:26 ПП
User 144022504
User 299096137
Это которые за 20$ или текущии ссылки?
Лично я купил курс и бесплатные посмотрел.
05:14:34 ПП
User 352892335
User 144022504
Лично я купил курс и бесплатные посмотрел.
тогда ответь на вопрос))
05:15:00 ПП
User 299096137
Реально бля, че за цирк. Зачем так людей злить по приколу.
05:15:45 ПП
User 299096137
Как вообще можно покупать курсы на инструмент который возможно даже не решит твоей проблемы
05:16:59 ПП
User 352892335
зачем покупать курсы, если есть slack, форум, github, medium...
05:19:16 ПП
User 299096137
User 352892335
зачем покупать курсы, если есть slack, форум, github, medium...
Ну, не все так ужасно. Просто по тайтлам в курсе того, нет ничего, что меня интересует в призме
05:19:23 ПП
User 299096137
И человек не отвечает прямо
05:19:44 ПП
User 299096137
Такое ощущение, что человек сам их снял и теперь пытается их продать.
05:21:45 ПП
User 352892335
User 299096137
Такое ощущение, что человек сам их снял и теперь пытается их продать.
👍
05:21:53 ПП
User 210944655
UsulPro (0) увеличил репутацию Nikita Nafranets 👓 (1)
05:24:25 ПП
User 352892335
что это???)))
05:26:41 ПП
User 352892335
Слушай, forwardTo это же просто функция, она даже ни к чему не привязана.
вот ее код
https://github.com/graphql-binding/graphql-binding/blob/eb9367e260466519531e33c0709ce2c0430282d8/src/utils/index.ts#L84-L107
я вот думаю, нельзя ли из нее что-то сделать, чтоб точно так же только для всех круд автоматом срабатывало
github.com/graphql-binding/graphql-binding/blob/eb9367e260466519531e33c0709ce2c0430282d8/src/utils/index.ts
Auto-generated SDK for your GraphQL API (supports schema stitching & codegen) - graphql-binding/graphql-binding
05:33:29 ПП
05:33:55 ПП
User 299096137
получается все резолверы хранятся в контексте все равно и не куда не исчезают
05:35:17 ПП
User 299096137
либо попробовать написать функцию которая по дереву соберет нужные резолверы и смерджит их с твоими резолверами
05:35:45 ПП
User 299096137
у меня все в теории и я не проверял, но если закинешь свои резолверы, реально автоматические просто пропадают?
05:37:11 ПП
05:37:12 ПП
05:37:14 ПП
User 299096137
ты не ту либу открыл
05:37:20 ПП
User 352892335
я не очень понимаю, что ты под автоматическими понимаешь? в моем представлении автоматические - это то что призма создает. а свои - это ты на йоге пишешь
05:37:55 ПП
User 299096137
User 352892335
я не очень понимаю, что ты под автоматическими понимаешь? в моем представлении автоматические - это то что призма создает. а свои - это ты на йоге пишешь
да
05:37:57 ПП
User 352892335
User 299096137
ты не ту либу открыл
как не ту?))
05:37:58 ПП
User 299096137
я про это и говорю
05:38:03 ПП
User 299096137
User 352892335
как не ту?))
https://github.com/prisma/prisma-binding
github.com/prisma/prisma-binding
GraphQL Binding for Prisma services (GraphQL Database) - prisma/prisma-binding
05:38:31 ПП
User 299096137
а, лол
05:38:32 ПП
05:38:49 ПП
User 352892335
https://github.com/prisma/prisma-binding/blob/598c0fcac6be40c52dd8596b9d1dc2294bea06cc/src/index.ts#L4
github.com/prisma/prisma-binding/blob/598c0fcac6be40c52dd8596b9d1dc2294bea06cc/src/index.ts
GraphQL Binding for Prisma services (GraphQL Database) - prisma/prisma-binding
05:38:57 ПП
User 299096137
prisma просто тупо экспортирует из той либы
05:39:19 ПП
05:39:53 ПП
User 352892335
вот смотри еще, в слаке ихнем нашел. чувак, примерно так же пытается сделать:

const { forwardTo } = require("prisma-binding");
const { buildSchema } = require("graphql");

const schemaFile = `${__dirname}/schema/prisma.graphql`;
const schema = require("fs")
  .readFileSync(schemaFile)
  .toString();
const s = buildSchema(schema);
const queries = Object.keys(s.getQueryType().getFields());
const mutations = Object.keys(s.getMutationType().getFields());
const Query = {};
queries.forEach(element => {
  Query[element] = forwardTo("prisma");
});
const Mutation = {};
mutations.forEach(element => {
  Mutation[element] = forwardTo("prisma");
});

const resolvers = {
  Query,
  Mutation,
};
05:40:03 ПП
User 299096137
меня эта каша из либ и путает
05:40:46 ПП
User 352892335
User 299096137
меня эта каша из либ и путает
ага, есть такое. помоему их пишут одни и теже люди))
06:22:37 ПП
User 352892335
Короче, вот. Готово
06:22:49 ПП
User 352892335
const { GraphQLServer } = require('graphql-yoga');
const { Prisma: PrismaBinding } = require('prisma-binding');
const { typeDefs } = require('./generated/prisma-client/prisma-schema');

const binding = new PrismaBinding({
  typeDefs,
  endpoint: 'http://localhost:4466',
  secret: "abcd1234",
});

const autoForwardTo = crud => Object.keys(crud)
.map(key => ({
  [key]: (_, args, __, info) => crud[key](args, info),
}))
.reduce((obj, fn) => ({ ...obj, ...fn }), {})

const resolvers = {
  Query: autoForwardTo(binding.query),
  Mutation: autoForwardTo(binding.mutation),
};

const server = new GraphQLServer({
  typeDefs: 'src/schema.graphql',
  resolvers,
  context: req => ({
    ...req,
    binding,
    debug: true,
  }),

});
server.start(() =>
  console.log(`GraphQL server is running on http://localhost:4000`)
);
06:23:14 ПП
User 352892335
полностью зеркалит prisma crud
06:23:26 ПП
User 352892335
Народ, че скажете?
06:30:20 ПП
User 299096137
я ничего не скажу, потому, что проект на работе, а не дома