* [Personaliza] mensajes de excepciones.

* [Agrega] modelo, controlador y rutas de precios.
This commit is contained in:
Ricardo García Jiménez 2022-04-26 13:13:06 -05:00
parent 6219cf81a2
commit aa29ec7266
5 changed files with 66 additions and 13 deletions

View file

@ -8,6 +8,7 @@ use Illuminate\Validation\ValidationException;
use Laravel\Lumen\Exceptions\Handler as ExceptionHandler;
use Symfony\Component\HttpKernel\Exception\HttpException;
use Throwable;
use Illuminate\Http\Response;
class Handler extends ExceptionHandler {
/**
@ -46,6 +47,32 @@ class Handler extends ExceptionHandler {
* @throws \Throwable
*/
public function render($request, Throwable $exception) {
return parent::render($request, $exception);
if ($exception instanceof AuthorizationException) {
$code = Response::HTTP_UNAUTHORIZED;
$descr = $exception -> getMessage();
} elseif ($exception instanceof HttpException) {
$code = $exception->getStatusCode();
$descr = Response::$statusTexts[$code];
} elseif ($exception instanceof ModelNotFoundException) {
$code = Response::HTTP_NOT_FOUND;
$descr = $exception -> getMessage();
} elseif ($exception instanceof ValidationException) {
$code = Response::HTTP_BAD_REQUEST;
$descr = $exception->getMessage();
} else {
$code = Response::HTTP_INTERNAL_SERVER_ERROR;
$descr = $exception->getMessage();
}
//return parent::render($request, $exception);
return response()->json([
'data' => [],
'message' => [
'type' => 'error',
'code' => $code,
'description' => $descr,
],
], $code);
}
}

View file

@ -5,6 +5,8 @@ namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\Price;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Str;
class PriceController extends Controller {
/**
@ -17,22 +19,36 @@ class PriceController extends Controller {
}
public function index() {
//
return response()->json([
'data' => Price::all(),
'message' => [
'type' => 'success',
'code' => Response::HTTP_OK,
'description' => 'Ok',
]
], Response::HTTP_OK);
}
public function store(Request $request) {
//
return Price::create([
'id' => Str::uuid(),
'type' => $request->input('type'),
'cost' => $request->input('cost'),
'active' => $request->input('active'),
]);
}
public function show(Price $price) {
//
public function show($id) {
return Price::findOrFail($id);
}
public function update(Request $request, Price $price) {
//
public function update(Request $request, $id) {
$price = Price::findOrFail($id);
return $price->update($request->all());
}
public function destroy(Price $price) {
//
public function destroy($id) {
return Price::destroy($id);
}
}

View file

@ -3,7 +3,9 @@
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Price extends Model {
//
public $incrementing = false;
protected $keyType = 'string';
protected $fillable = ['id', 'type', 'cost', 'active'];
}

View file

@ -15,8 +15,8 @@ return new class extends Migration {
$table->uuid('id')
->primary();
$table->enum('type', ['Becado', 'Regular', 'Preventa'])
->default('Regular');
$table->string('type', 20)
->unique();
$table->float('cost', 6, 2)
->unsigned();

View file

@ -16,3 +16,11 @@
$router->get('/', function () use ($router) {
return $router->app->version();
});
$router->group(['prefix' => '/v1/prices', 'as' => 'prices'], function () use ($router) {
$router->get('/', ['as' => 'index', 'uses' => 'PriceController@index']);
$router->post('/', ['as' => 'store', 'uses' => 'PriceController@store']);
$router->get('/{id}', ['as' => 'show', 'uses' => 'PriceController@show']);
$router->put('/{id}', ['as' => 'update', 'uses' => 'PriceController@update']);
$router->delete('/{id}', ['as' => 'destroy', 'uses' => 'PriceController@destroy']);
});