Перезапись резольвера graphql/prisma
Я использую призму в новой базе данных и раскручиваю отдельный сервер приложений graphql. Этот сервер graphql будет взаимодействовать как с новым сервером prisma, так и с существующими экземплярами базы данных mysql. Мне нужно иметь возможность получать данные из обеих этих баз данных, но у меня возникают некоторые проблемы, когда речь идет о вложенных запросах.
Прямо сейчас у меня есть следующее преобразование:
export const Query = prismaObjectType("Query", t => {
t.field("users", "User", {
...t.prismaType.users,
resolve: async (parent, args, ctx) => {
const result: Array<any> = await users();
console.log("result", result);
return result;
}
});
})
users()
Функция - это просто запрос к базе данных MySQL (а не к серверу призмы). Это работает, как и ожидалось, и я могу получить от всех пользователей, за исключением, когда дело доходит до вложенного ресурса
{
users{
id
first_name
last_name
email
address{
address_1
updatedAt
}
}
}
В этом запросе все пользовательские данные возвращаются за исключением поля адреса. Адрес всегда нулевой, хотя в моем ответе указаны данные об адресе. Ниже user()
определение. Может кто-нибудь сказать мне, как я могу получить поле адреса для заполнения в моем ответе?
function transform(user: any) {
return {
id: user.id,
first_name: user.first_name,
last_name: user.last_name,
email: user.email,
address: {
address_1: user.address_one,
address_2: user.return_address,
city: user.address_one_city,
state: user.address_one_state,
zip: user.return_address_zipcode,
createdAt: user.created,
updatedAt: user.modified
}
};
}
const users = () => {
return new Promise((resolve, reject) => {
connection.query(
"SELECT * FROM users",
(error: Error, results: Array<any>) => {
if (error) {
reject(error);
} else {
const users = results.map(transform);
resolve(users);
}
}
);
});
};