Build a Twitter Clone With Adonis and Vue

Fetching Single Tweet

In the previous lesson, we gave users ability to post tweets. Now, let's fetch a single tweet. Add the line below in start/routes.js:

// start/routes.js

Route.get('/tweets/:id', 'TweetController.show')

Next, add the code below in TweetController.js:

// app/Controllers/Http/TweetController.js

async show ({ params, response }) {
    try {
        const tweet = await Tweet.query()
            .where('id', params.id)
            .with('user')
            .with('replies')
            .with('replies.user')
            .with('favorites')
            .firstOrFail()

        return response.json({
            status: 'success',
            data: tweet
        })
    } catch (error) {
        return response.status(404).json({
            status: 'error',
            message: 'Tweet not found'
        })
    }
}

We fetch the tweet with the specified ID. In addition to the fetching the tweet, we also eager load the user that created the tweet, the favorites of the tweet, the replies of the tweet, and user that made the replies. Then we return the tweet. If there is no tweet with the specified ID, we simply return an appropriate message.