@teikei/api
Version:
Teikei API server. Teikei is the software that powers ernte-teilen.org, a website that maps out Community-supported Agriculture in Germany.
79 lines (73 loc) • 1.79 kB
JavaScript
import createService from 'feathers-objection'
import Farm from '../models/farms'
import wrapFeatureCollection from '../hooks/geoJson'
import {
relateOwner,
withEager,
selectEntryColumns,
relate,
entryColumns
} from '../hooks/relations'
import { setCreatedAt, setUpdatedAt } from '../hooks/audit'
import { sendNewEntryNotification } from '../hooks/email'
export default app => {
const service = createService({
model: Farm,
allowedEager: '[depots, products, ownerships]',
eagerFilters: [
{
expression: 'depots',
filter: builder => {
builder.select(entryColumns('depots'))
}
},
{
expression: 'products',
filter: builder => {
builder.select(['products.id', 'category', 'name'])
}
},
{
expression: 'ownerships',
filter: builder => {
builder.select(['users.id', 'email', 'name'])
}
}
]
})
app.use('/farms', service)
app.service('farms').hooks({
before: {
all: [],
find: [withEager('[products]'), selectEntryColumns],
get: [withEager('[depots, products]')],
create: [setCreatedAt],
update: [setUpdatedAt],
patch: [setUpdatedAt],
remove: []
},
after: {
all: [],
find: [wrapFeatureCollection],
get: [],
create: [
relate(Farm, 'products'),
relate(Farm, 'depots'),
relateOwner,
sendNewEntryNotification
],
update: [relate(Farm, 'products'), relate(Farm, 'depots')],
patch: [relate(Farm, 'products'), relate(Farm, 'depots')],
remove: []
},
error: {
all: [],
find: [],
get: [],
create: [],
update: [],
patch: [],
remove: []
}
})
}