Николай, посмотришь по возможности коммит? https://github.com/linklib/gribok-prisma/commit/db59452183788330442feb723124b610b37439c5 Там схема и нексус (описания запросов). А вот как мутации прописывать и вообще, что делать дальше: туманно.

Спасибо, переделываю схему.

И вот ты пишешь "добавляю картинку к посту. ". То есть в единственном числе (то есть один-к-одному). А схему какую пишешь? https://github.com/linklib/gribok-prisma/blob/7601402a1362dc6172f26d712f765dc9a62f51d2/prisma/schema.prisma#L131 А прописал множественную (то есть один-ко-многим). В твоем случае даже при множественном, твоя схема не очень удачная. Таким образом ты завязал файл на посте, а не пост на файле. Улавливай разницу. Здесь речь о первоисточниках. Если ты в дальнейшем будешь картинки добавлять к грибам, лайкам и т.п., ты для всех этих типов будешь прописывать ключи в объект картинки? Что в таком случае получится? Можно будет загрузить картинку, которая одновременно относится к посту, грибу, лайку и еще к чему-то? Ведь технически это будет возможно. (Хотя и в другом случае тоже можно будет, но не буду в дебри лезть). В твоем случае, если бы ты хотел сделать одну картинку на одну публикацию, то надо было ссылку на картинку писать в самом посте, а не в картинке. А если ты хочешь много картинок для поста, то правильней завести связующий тип PostImage, у которого два ключа: ссылка на пост и ссылка на картинку. А схема такая:

Дима, ну вот опять... >> и... не понимаю, а что дальше делать. А я откуда могу знать, что дальше? То есть я откуда могу знать, что ты хочешь сделать?

Николай, добавляю картинку к посту. 1. Изменил схему призмы https://github.com/linklib/gribok-prisma/blob/7601402a1362dc6172f26d712f765dc9a62f51d2/prisma/schema.prisma#L59-L60 https://github.com/linklib/gribok-prisma/blob/7601402a1362dc6172f26d712f765dc9a62f51d2/prisma/schema.prisma#L131 2. Дописал тип поля в нексусе https://github.com/linklib/gribok-prisma/blob/7601402a1362dc6172f26d712f765dc9a62f51d2/server/nexus/types/Post/index.ts#L55-L60 и... не понимаю, а что дальше делать. Можешь дать направляющий пинок?

Дима, привет! >> первый код оказался более понятен. Да, первый более понятен, потому что перед глазами полностью await then/catch. А вот второй получается чуть более запутанным, потому что не понятно что это вообще за onCompleted. Но на самом деле в случае с использованием аполло-клиент такой метод более правильный, потому что в рамках АПИ данной библиотеки. Смотри официальную документацию: https://www.apollographql.com/docs/react/data/mutations/#oncompleted То есть в качестве параметра onCompleted передается функция-обработчик, которая будет вызвана в случае успешного АПИ-запроса. Плюс здесь в том числе и в том, что ты еще до вызовы непосредственно запроса прописываешь какую логику ты хочешь получить, когда запрос будет выполнен и будет выполнен успешно. Иногда такой подход более понятный с организационной точки зрения. Но, опять-таки, это кому как больше нравится и совсем не обязательно делать именно так. Но понимать такие приемы очень важно, потому что часто библиотеки пишутся так, что в них приходится передавать обработчики. Это, что называется, callback hell (Ад обратных вызовов). Есть вот даже отдельный сайт, посвященный этому явлению :)

Николай, привет! Спасибо! С промисами более-менее разобрался: первый код оказался более понятен.

Дима, привет! Вот код-ревью: https://github.com/linklib/gribok-prisma/pull/3#pullrequestreview-774002390 >> 1. Как в случае удчного добавления поста правильно учести посетителя в перечень постов или чего-нибудь ему написать? 2. Я так погнял, зто здесь тесты проходят, но не понял как. Можешь объяснить, что происходит в коде? https://github.com/linklib/gribok-prisma/blob/6295a8f9af3e9a6eff46ec6796505275426c2884/src/pages/Posts/Createpost/View/Form/index.tsx#L85-L92 Это тебе надо получше освоить промисы (Promise). У тебя есть обработчик на успешное выполнение запроса. Убедись в ответе, что объект был получен (то есть создан). Далее уже решай что с этим делать. Для примера смотри создание технологий на текущем сайте. https://github.com/freecode-academy/freecode.academy/blob/83c82a066d10320733481fac06accc961c0b00d5/src/pages/Technologies/Create/index.tsx#L77-L87 Здесь в блоке then проверяю полученную технологию if (r.data?.createTechnology) и если все ОК, то 1. Сбрасываю кеш аполло-клиента (API-клиента) (одновременно со сбросом кеша выполняется перезапрос всех активных GraphQL-запросов на странице). 2. Выполняю переход на страницу технологии. А вот еще вот этот пример глянь: https://github.com/freecode-academy/freecode.academy/blob/83c82a066d10320733481fac06accc961c0b00d5/src/pages/Topics/Topic/Create/index.tsx#L31-L44 Здесь примерно все тоже самое делается (только что кеш забыл сбросить), но обработчик на сохранение передан параметром в сам хук мутации (параметр onCompleted). Смысл тот же, но структура кода так вроде как понятней.

Николай, привет! Посмотри, пожалуйста, коммит: https://github.com/linklib/gribok-prisma/commit/6295a8f9af3e9a6eff46ec6796505275426c2884 Можно как-то лучше сделать? И есть 2 вопроса, которые в которых нужна помощь: 1. Как в случае удчного добавления поста правильно учести посетителя в перечень постов или чего-нибудь ему написать? 2. Я так погнял, зто здесь тесты проходят, но не понял как. Можешь объяснить, что происходит в коде? https://github.com/linklib/gribok-prisma/blob/6295a8f9af3e9a6eff46ec6796505275426c2884/src/pages/Posts/Createpost/View/Form/index.tsx#L85-L92 Спасибо!