¿Cómo diseñar la siguiente resolución para el servidor GraphQL?
Estoy usando react-apollo en meteorito con mysql y secuela, todavía soy un principiante en JS. Supongamos que tengo la siguiente función de resolución en mi servidor Apollo:
export default resolvers = {
Query: {
posts(_, args){
return Post.findAndCountAll({ where: args });
},
numberOfPosts(){
return /// the number of selected posts
}
}
Me gustaría seleccionar algunos datos de la base de datos donde se cumplen algunas condiciones y luego contar la cantidad de filas seleccionadas y devolverlas en el campo "numberOfPosts".findAndCountAll()
devuelve un objeto, que contiene las filas seleccionadas y el recuento. Me gustaría obtener mipost()
para devolver solo las filas seleccionadas, y my numberOfPosts () para devolver solo el recuento de las publicaciones seleccionadas. En este momento, ambos son devueltos por posts ().
Mi esquema es:
type Post {
id: Int
date: Float
text: String
}
type NumberOfPosts{
total: Int
filtered: Int
}
type Query {
posts(
id: Ind,
offset: Int,
limit: Int,
filter: String): [Post]
numberOfPosts:[NumberOfPosts]
}
schema {
query: Query
}
El objetivo es recibir datos en el siguiente formato:
{
"data": {
"numberOfPosts": [
{
"total": 1000,
"filtered": 21
}
],
"posts": [
{
"id": 4,
"date": 5105626122,
"text": "jzybiwutudi"
},
...
]
}
}
Mi trabajo hasta ahora: Prueba 1:
let selectedCount;
export default resolvers = {
Query: {
posts(_, args){
return Post.findAndCountAll({where: args}).then(
function (results) {
selectedCount = results.count;
return results.rows
});
},
numberOfPosts(){
return selectedCount
}
}}
Así que estoy definiendo una variable de ayuda fuera de los resolvers, y la configuro en el número de filas seleccionadas, luego el conteo se devuelve ennumberOfPosts()
, que funciona, pero el problema con esto es,return results.rows
causa un error, y no entiendo por qué.
otro problema es queselectedCount
es siempre el número anterior de filas
Prueba 2
Otra solución que parece funcionar es pasar los argumentos dos veces a la consulta GraphQL, así:
{
numberOfPosts(filter: "example") {
total
filtered
}
posts(filter: "example") {
id
date
text
}
}
Luego, ambas funciones de resolución conocen los mismos argumentos, por lo que puedo seleccionar y contar las mismas publicaciones. Pero esto no me parece correcto, ya que tengo que pasar los mismos argumentos dos veces, también se transmitirán dos veces ...