Дима, привет!
createdById String @db.VarChar(32)
CreatedBy User @relation(fields: [createdById], references: [id])
createdById - с маленькой буквы. А ты что пишешь? CreatedById с большой буквы. Ты бы хотя бы Ctrl + Space нажал, тебе вскод подсказал бы.

В наименовании поля тоже перепутал, написал t.nonNull.field('CreatedById' (с большой буквы).
И здесь ты в целом не очень хорошо поступил. На примере того же "правильного" поля mashroomId: У тебя в БД mashroomId - это строка (в призма-схеме), а связанный объект - Mashroom. А ты у себя в нексусе эти строчные поля перебиваешь объектами. Это не хорошо. Получается, если тебе нужен будет всего-лишь id связанного объекта, тебе придется прям запрашивать этот объект. Представь, ты получаешь список сотни объектов и к ним надо будет id связанных объектов: на получение списка у тебя будет 1 запрос, а потом на каждый объект еще сотня запросов. А если ты и второй связанный объект захочешь, то еще сотня запросов. И все это без необходимости. Резюме: строчное поле должно возвращать строчное значение. Для объектов делай другое поле.
И еще, вот ты гриб сделал не обязательным полем, а кем создано - обязательным. Я тебе говорил: это не хорошая практика, она будет от тебя требовать в каждом запросе прописывать запрос и на связанный объект.
Переделывай, я не буду тебе сейчас отправлять ПР. Подсказок достаточно.