Skip to content

Releases: robsontenorio/vue-api-query

Apply instances of relationships to nested objects.

09 Oct 13:23
Compare
Choose a tag to compare

Thanks @JoaoPedroAS51 !

You can also apply a model instance to a nested object by setting the key and the model in relations method.

If the backend responds with:

// response from API for /posts/1
{
  title: 'My title'
  body: 'Some text here',
  user: {
    firstName: 'John',
    lastName: 'Doe'
  }
}

We just need to set user to User model:

/models/Post.js

class Post extends Model {
  relations () {
    return {
      // Apply User model to `user` object
      user: User
    }
  }
}

It also works for collections. So if the backend responds with:

// response from API for /comments
{
  text: 'Some text here',
  user: {
    firstName: 'John',
    lastName: 'Doe'
  },
  replies: [
    {
      text: 'A reply here',
      user: {
        firstName: 'Joe',
        lastName: 'Doe'
      }
    },
    {
      text: 'Another reply here',
      user: {
        firstName: 'Mary',
        lastName: 'Doe'
      },
      replies: [
        {
          text: 'Yes, this is the reply of the reply!',
          user: {
            firstName: 'Max',
            lastName: 'Doe'
          }
        }
      ]
    }
  ]
}

Then we just need to set user to User model and replies to Comment model:

/models/Comment.js

class Comment extends Model {
  relations () {
    return {
      // Apply User model to `user` object
      user: User,
      // Apply Comment model to each object of `replies` array
      replies: Comment
    }
  }
}

Fixes

15 May 17:30
Compare
Choose a tag to compare
  • Update all dependencies
  • Small fix on README @manniL
  • Reset query string @MichMich
  • save() method makes a PUT request to the correct URL on nested object thas was fetched with find() method @taai

Thanks to @Peter-Krebs for reviewing.

Fix for $find to use a constructor on the result

02 May 18:02
Compare
Choose a tag to compare

Add 'fetch' based methods: $first() and $find()

18 Apr 01:05
Compare
Choose a tag to compare

Thanks @leeovery for #61.

Introduces new fetch style request for find() and first() methods. See README for more info.

let user = await User.$find(1)

let user = await User.$first()

Fix custom resources baseURL()

27 Feb 00:05
Compare
Choose a tag to compare

The `custom()` method takes multiples parameters

24 Feb 03:22
f9f4cec
Compare
Choose a tag to compare

Thanks @Peter-Krebs

The custom() method can be called with multiple arguments to build
resource endpoints and hierarchies. Simply supply them in the correct order.
Any combination of strings and models is possible.

    let user = new User({ id: 1 })
    let post = new Post()

    // GET /users/1/posts/latest
    const result = await Post.custom(user, post, 'latest').get()

Improvements and fixes

18 Feb 19:29
Compare
Choose a tag to compare

Update dependencies

Updated to latest babel and eslint features.

Added ability to customize query parameter names

If you need to change default values just override parametersName() on your Base Model. So, the generated query string will use this new values.

import { Model as BaseModel } from 'vue-api-query'

export default class Model extends BaseModel {

  parameterNames () {
    return {
      include: 'include_custom',
      filter: 'filter_custom',
      sort: 'sort_custom',
      fields: 'fields_custom',
      append: 'append_custom',
      page: 'page_custom',
      limit: 'limit_custom'
    }
  }
}

Thanks @suth
#42

Fix array strategy validation for SSR

Got error on using vue-api-query with NUXT on universal mode (SSR)

Thanks @MisterEffix
#43

The `for()` method can take multiple objects to build hierarchy levels.

22 Nov 01:35
Compare
Choose a tag to compare
 let user = new User({id: 1})
 let post = await user.posts().first()
 
 // Related objects go in order of their appearance in the URL.
 let comment = new Comment({text: 'for() takes multiple objects.'}).for(user, post)
  // POST /users/1/posts/1/comments
 await comment.save()

.for() should use object.getPrimaryKey()

31 Oct 10:30
967f790
Compare
Choose a tag to compare
Merge pull request #29 from Peter-Krebs/master

Model: .for() should use object.getPrimaryKey() instead of object.id

find() method for nested resources

26 Jul 02:56
12c4ffb
Compare
Choose a tag to compare

If you need to get a nested resource, without getting the parent model at first, you can do something like this.

// GET /users/1/posts

let User = new User({id: 1})
let Post = await User.posts().get()

// GET /users/1/posts/2
let User = new User({id: 1})
let Post = await User.posts().find(2)