Лично я, уже больше 4 месяцев работая на проекте, использующем кодогенерацию (не prisma, а собственное решение компании) уяснил что для хоть мало-мальски больших приложений с большим количеством серверной логики не стоит прибегать к кодогенерации.
Приходится использовать, как писали выше, два уровня graphql-api: с одним общается клиент, с другим - бэкенд, для доступа к БД.
Я работаю по такой схеме:
1) Создаю/меняю схему данных с помощью StarUML (редактор uml-схем).
2) Генерирую код на основе схемы. Генерируется полное GraphQL-API со всеми crud операциями, фильтрацией и пагинацией, по всем канонам Relay.
3) Дальше - самое веселое. Я пишу кастомные запросы и мутации для уровня клиента. И здесь мне уже нечем генерировать код - всю пагинацию, сортировку, фильтрацию я должен делать сам. При написании resolvers для этих кастомных запросов использую сгенеренное graphql-api. И здесь вторая проблема - все, что сгенерено - не оптимизировано так как я бы это сделал вручную при исопльзовании mongodb driver или mongoose. Ведь множество операций я, зная логику приложения, мог бы писать асинхронно, мог бы отправлять пользователю ответ а сам доделывать нужные мне операции, просто имел бы больше власти. Не вижу профита в использовании graphql для доступа к БД по сравнениию например с использованием mongoose.