adonis_async_serializer

0.1.1 • Public • Published

ADONIS ASYNC SERIALIZER

Install

npm i adonis_async_serializer

Adonis setup

  • Setup as service

providers/AsyncSerializerProvider.js

'use strict'

const { ServiceProvider } = require('@adonisjs/fold')
const AdonisAsyncSerializer = require('adonis_async_serializer')

class AsyncSerializerProvider extends ServiceProvider {
  register () {
    this.app.singleton('BaseAsyncSerializer', () => {
      return AdonisAsyncSerializer
    })
  }
}

module.exports = AsyncSerializerProvider

start/app.js

'use strict'

const path = require('path')

const providers = [
  path.join(__dirname, '..', 'providers', 'AsyncSerializerProvider')
]

//........

Usage

Simple

app/Serializers/UserSerializer.js

'use strict'

const BaseAsyncSerializer = use('BaseAsyncSerializer')

class UserSerializer extends BaseAsyncSerializer {
  constructor (serializableResource) {
    super(serializableResource)
    
    this.addAttributes(
      'id', 'firstName', 'lastName', 'email'
    )
    
    this.addHasOne('profile', 'ProfileSerializer')
    this.addHasMany('posts', 'PostSerializer')
  }
}

module.exports = UserSerializer

app/Controllers/Http/UserController.js

'use strict'

const UserSerializer = use('App/Serializers/UserSerializer')

class UserController {
  async show ({ params }) {
    const user = await User.find(params.id)
    const userSerializer = new UserSerializer(user)
    const userSerialized = await userSerializer.toJSON() 
    
    return { resource: userSerialized }
  }
  
  async index () {
    const users = await User.all()
    const userSerializer = new UserSerializer(users)
    const usersSerialized = await userSerializer.toJSON() 
    
    return { resources: usersSerialized }
  }
}

With callback

app/Serializers/UserSerializer.js

'use strict'

const BaseAsyncSerializer = use('BaseAsyncSerializer')
const PostSerializer = use('App/Serializers/PostSerializer')

class UserSerializer extends BaseAsyncSerializer {
  constructor (serializableResource) {
    super(serializableResource)
    
    /* some code*/
    
    this.addWithCallback('posts', async (user) => {
      const posts = await user.posts().where({ isPublished: true }).fetch()
      const postSerializer = new PostSerializer(posts)
    
      return postSerializer.toJSON()
    })
    
    this.addWithCallback('fullName', (user) => {
      return `${user.firstName} ${user.lastName}`
    })
    
    /* some code*/
  }
}

module.exports = UserSerializer

With service data

! The root serializer transfers service data to all nested serializers.

app/Serializers/UserSerializer.js

'use strict'

const BaseAsyncSerializer = use('BaseAsyncSerializer')
const PostSerializer = use('App/Serializers/PostSerializer')

class UserSerializer extends BaseAsyncSerializer {
  constructor (serializableResource, serviceData) {
    super(serializableResource, serviceData)
    
    /* some code*/
    
    this.addWithCallback('posts', async (user, serviceData) => {
      const posts = await user.posts().where({ isPublished: serviceData.isPublished }).fetch()
      const postSerializer = new PostSerializer(posts)
    
      return postSerializer.toJSON()
    })
    /* some code*/
  }
}

module.exports = UserSerializer

app/Controllers/Http/UserController.js

'use strict'

const UserSerializer = use('App/Serializers/UserSerializer')

class UserController {
  async show ({ params }) {
    const user = await User.find(params.id)
    const userSerializer = new UserSerializer(user, {isPublished: true})
    const userSerialized = await userSerializer.toJSON() 
    
    return { resource: userSerialized }
  }
}

License

This project is licensed under the MIT License - see the LICENSE file for details

Package Sidebar

Install

npm i adonis_async_serializer

Weekly Downloads

0

Version

0.1.1

License

MIT

Unpacked Size

11.1 kB

Total Files

9

Last publish

Collaborators

  • vladimir8470