Fortune.js
APIs em 7 FUCKING minutos
1
Fortune.js
Fortune is a high-level I/O library for web applications. It provides an implementation of entity-relationship modelling, is agnostic about data storage, and can be used to power real-time (WebSocket) and hypermedia applications (RMM Level 3).
npm install --save fortune
APIs em 1 minuto
import fortune from 'fortune'
import http from 'http'
const store = fortune.create()
const server = http.createServer(fortune.net.http(store))
store.defineType('participante', {
nome: { type: String },
organizando: { link: 'evento', inverse: 'organizador', isArray: true }
eventos: { link: 'evento', inverse: 'participantes', isArray: true }
})
store.defineType('evento', {
nome: { type: String },
data: { type: Date },
organizador: { link: 'user', inverse: 'posts' },
participantes: { link: 'participante', inverse: 'eventos', isArray: true }
})
store.connect().then(() => server.listen(1337))Arquitetura
- Core (transforms)
- Adapters (MongoDB, Postgres)
- Serializers (JSON-API, Micro API)
APIs em 2 minutos
1
import fortune from 'fortune'
import mongodbAdapter from 'fortune-mongodb'
import microApi from 'fortune-micro-api'
import http from 'http'
const store = fortune.create({
adapter: {
type: mongodbAdapter,
options: {
url: 'DATABASE_CONFIG'
}
},
serializers: [ {
type: microApi,
options: { obfuscateURIs: false }
} ]
})
...
store.connect().then(() => server.listen(1337))APIs em 3 minutos
1
...
store.defineType('participante', {
criadoEm: { type: Date },
modificadoEm: { type: Date},
nome: { type: String },
organizando: { link: 'evento', inverse: 'organizador', isArray: true }
eventos: { link: 'evento', inverse: 'participantes', isArray: true }
})
store.transformOutput('participante', (context, record) => {
delete record modificadoEm;
return record;
})
...APIs em 5 minutos
1
...
const { Adapter } = fortune
const MongodbAdapter = mongodbAdapter(Adapter)
class CustomAdapter extends MongodbAdapter {
create (type, records) {
records = records.map((record) => {
return Object.assign({}, record, {criadoEm: new Date(), modificadoEm: new Date()})
})
return super.create(type, records)
}
update (type, updates) {
updates = updates.map((update) => {
return Object.assign({}, update, {modificadoEm: new Date()})
})
return super.update(type, updates)
}
}
...APIs em 7 minutos
1
const { Serializer } = fortune
const MicroApiSerializer = microApi(Serializer)
class CustomSerializer extends MicroApiSerializer {
processRequest (context, request, response) {
let ctx = super.processRequest(...arguments)
return (!!context.request.uriObject.relatedField ? ctx :
Promise.resolve(ctx))
.then((ctx) => {
let token = context.request.meta['access-token'];
if (token) {
// Realiza validação do token
} else {
throw new errors.UnauthorizedError(`Token não informado.`)
}
})
}
}Fortune.js
Jean Lucas de Carvalho
@jlcarvalho
Fortune.js
By Jean Lucas de Carvalho
Fortune.js
- 493