Skip to content

Instantly share code, notes, and snippets.

@SylvainEstevez
Last active July 6, 2016 23:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SylvainEstevez/c5c81715299ab227ac045a191097b33c to your computer and use it in GitHub Desktop.
Save SylvainEstevez/c5c81715299ab227ac045a191097b33c to your computer and use it in GitHub Desktop.
Real life example of deep filtering
class TransactionsResource extends Restypie.Resources.SequelizeResource {
get schema() {
return {
id: { type: String, isPrimaryKey: true, isFilterable: true },
tasks: {
type: Restypie.Fields.ToManyField,
to() { return api.resources.tasks; },
toKey: 'transaction_id',
isFilterable: true,
filteringStrategy: FilteringStrategies.BottomToTop // Will first filter tasks to get transaction ids and apply those to the filters
}
};
}
}
class TasksResource extends Restypie.Resources.SequelizeResource {
get schema() {
return {
id: { type: String, isPrimaryKey: true, isFilterable: true },
transaction_id: { type: String, isFilterable: true },
tokens: {
type: Restypie.Fields.ToManyField,
to() { return api.resources.tokens; },
toKey: 'task_id',
isFilterable: true,
filteringStrategy: FilteringStrategies.BottomToTop // Will first filter tokens
},
transaction: {
type: Restypie.Fields.ToOneField,
to() { return api.resources.transactions; },
fromKey: 'transaction_id',
isReadable: true
}
};
}
}
class TokensResource extends Restypie.Resources.SequelizeResource {
get schema() {
return {
id: { type: String, isPrimaryKey: true, isFilterable: true },
task_id: { type: String, isFilterable: true }
task: {
type: Restypie.Fields.ToOneField,
to() { return api.resources.tasks; }
fromKey: 'task_id',
isReadable: true
}
};
}
}
// Now let's try to get incomplete transactions for a specific valet
request
.get('/v2/transactions')
.query({
canceled_at: null,
completed_at: null,
'tasks.tokens.actor_id': 123,
'tasks.tokens.actor_type': 'valet',
'tasks.tokens.retired_at': null
})
// Original request :
// /v2/transactions?canceled_at=null&completed_at=null&tasks.tokens.actor_id=123&tasks.tokens.actor_type=valet&tasks.tokens.retired_at=null
// Request 1 : grab all tokens that correspond to filters, selecting only task ids
// Request 2 : grab all tasks that correspond to filters, selecting only transaction ids
// Request 3 : finally grab transations including id__in filter with previous results
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment