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