Comments (3)
I have posted a question on SO with the full details of my set up and why I need to implement this solution. I assume it is somewhat similar to the apollo example, but I'm not sure how to go about it.
from graphql-to-mongodb.
Hi, I did something like this for TypeOrm:
@InputType()
class GqlQueryFilter {}
export function GqlFilter<T>(classRef: Type<T>): Type<T> {
const { fields, decoratorFactory } = getFieldsAndDecoratorForType(classRef);
abstract class Filter {}
decoratorFactory({ isAbstract: true })(GqlQueryFilter);
Object.values(constantOptions) // this is an object with the operators like: EQ, NOT EQ, CONTAINS, NOT...
.filter(prop => prop !== constantOptions.NOT)
.forEach(prop => {
Field(() => String, { nullable: true })(GqlQueryFilter.prototype, prop);
Field(() => String, { nullable: true })(
GqlQueryFilter.prototype,
constantOptions.NOT + prop,
);
});
decoratorFactory({ isAbstract: true })(Filter);
fields.forEach(item => {
if (isFunction(item.typeFn)) {
/**
* Execute type function eagarly to update the type options object (before "clone" operation)
* when the passed function (e.g., @Field(() => Type)) lazily returns an array.
*/
item.typeFn = () => GqlQueryFilter;
item.typeFn();
}
Field(item.typeFn, { ...item.options, nullable: true })(
Filter.prototype,
item.name,
);
});
return Filter as Type<T>;
}
export function GqlQueryObject<T>(classRef: Type<T>): Type<T> {
const { fields, decoratorFactory } = getFieldsAndDecoratorForType(classRef);
abstract class QueryObject {}
decoratorFactory({ isAbstract: true })(QueryObject);
Field(() => Int, { nullable: true })(QueryObject.prototype, 'limit');
Field(() => Int, { nullable: true })(QueryObject.prototype, 'page');
Field(() => [classRef], { nullable: true })(QueryObject.prototype, 'filter');
return QueryObject as Type<T>;
}
and the usage is like that:
// define the query ObjectType for the gql schema
@InputType()
class UsuarioFilter extends GqlFilter(Usuario) {}
@InputType()
export class UsuarioQuery extends GqlQueryObject(UsuarioFilter) {}
---
//on resolver we add the query as type
@Query(returns => [Usuario])
async usuarios(
@Args('query', { nullable: true }) gqlQuery: UsuarioQuery,
): Promise<Usuario[]> {
return this.usuarioApi.buscarUsuarios(gqlQuery);
}
the query:
usuarios(query: { name: { eq: "test" } }) {
id
}
I'm doing it right now for mongo, In case u need I can share it.
from graphql-to-mongodb.
Hey @fikani Would love to get the MongoDB class
from graphql-to-mongodb.
Related Issues (20)
- GraphQL schema generation failed when using Union type HOT 8
- Example usage of OR and AND? HOT 2
- How to use mutations? HOT 4
- Please please please create an example with Apollo. Please! HOT 1
- FilterType no load fields on models HOT 1
- Cannot read property 'resolve' of undefined.
- Typo in README.md with request for clarification HOT 1
- Does graphql-to-mongodb handle relationships? HOT 1
- How to use it with type-graphql HOT 1
- How to ingrate this with a .graphql schema file? HOT 2
- Handling ObjectId in filter HOT 4
- Mongo DateTime fields. HOT 1
- Warning Field TradeId of type t_TradeType has a resolve function and no dependencies HOT 2
- build error mongoDbFilter.ts HOT 1
- Add exist | not exist to leaf types
- Is there a contains/like string filter? HOT 2
- Is this support for mongoose and schema definition language(SDL)
- Caching issue HOT 1
- New directive syntax example
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from graphql-to-mongodb.