Skip to content

soara-dev/larastrom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

All In One Fullstack Tools For Laravel ( Larastrom )

Latest Version on Packagist Software License Build Status

Larastrom is a developer-friendly Laravel package that speeds up and simplifies the process of building RESTful APIs. It includes ready-to-use tools and smart defaults so you can focus on your business logic, not boilerplate code.

🚀 Features

  • 🔐 Automatic JWT Authentication
    Built-in support for JWT-based auth with zero configuration.

  • 🔁 Consistent API Response Format
    Unified response structure for success and error handling across all endpoints.

  • 🔎 Search & Sorting Made Easy
    Just pass query parameters like ?searchField[name]=john&sortField[created_at]=desc — no extra code required.

  • 📦 Pagination Made Easy Just pass query parameters like ?pageSize=10 — no extra code required.


Installation

composer require soara/larastrom

Add the LarastromServiceProvider to your bootstrap/providers.php file:

return [
    App\Providers\AppServiceProvider::class,
    Soara\Larastrom\LarastromServiceProvider::class, // add this line
    Tymon\JWTAuth\Providers\LaravelServiceProvider::class // add this line
];

Usage

JWT Authentication

To enable authentication please run the following command:

php artisan install:api
php artisan larastrom:install-auth

# jwt
php artisan jwt:secret

# spatie
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
php artisan migrate

Add Middleware for jwt verify in file bootstrap/app.php:

->withMiddleware(function (Middleware $middleware) {
    $middleware->alias([
        'jwt.verify' => App\Http\Middleware\JwtVerify::class,
    ]);
})

Setup default guard in file config/auth.php:

'defaults' => [
    'guard' => 'api',
    'passwords' => 'users',
],

'guards' => [
    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
    ],
],

Add authtenticate route to file routes/api.php:

use App\Http\Controllers\Api\Auth\AuthController;

Route::prefix('auth')->group(function () {
    Route::post('login', [AuthController::class, "login"]);
    Route::middleware('jwt.verify')->group(function () {
        Route::post('me', [AuthController::class, "me"]);
        Route::post('logout', [AuthController::class, "logout"]);
        Route::post('refresh', [AuthController::class, "refresh"]);
    });
});

Update your User model:

<?php

namespace App\Models;

use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
use Illuminate\Database\Eloquent\Factories\HasFactory;

class User extends Authenticatable implements JWTSubject
{
    use Notifiable, HasRoles, HasFactory;

    // Rest omitted for brevity

    /**
     * Get the identifier that will be stored in the subject claim of the JWT.
     *
     * @return mixed
     */
    public function getJWTIdentifier()
    {
        return $this->getKey();
    }

    /**
     * Return a key value array, containing any custom claims to be added to the JWT.
     *
     * @return array
     */
    public function getJWTCustomClaims()
    {
        return [];
    }
}

Response Format

To return a successful response from your controller, use the following format:

return setResponse('Get data successfully', $data); // 200 = OK

return setResponse('Opps something wrong', [], 500); // 500 = Internal Server Error

Model Builder

Model Builder can provide a simple pagination, sorting and searching functionality for your database models.

const req = axios.get('/users', {
    params: {
        pageSize: 10, // if you want to use pagination
        searchField: { // if you want to use searching
            name: 'john',
            ...
        },
        sortField: { // if you want to use sorting
            created_at: 'desc',
            ...
        }
    }
})

In your model add traits:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Soara\Larastrom\Traits\WithBuilder; // add this line


class User extends Model
{
    use WithBuilder; // add this line
}

implement in your controller:

$user = User::allowSearch()->allowOrder()->fetch();

Or shorthand:

$user = User::allowInteraction()->fetch();

License

This package is open source and released under the MIT License.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages