Account refactored and better json responses

This commit is contained in:
Bubka 2019-05-24 14:44:41 +02:00
parent dcf3e6e1a0
commit 6cdaa12e21
10 changed files with 103 additions and 89 deletions

View File

@ -4,6 +4,7 @@
use Exception; use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use Illuminate\Database\Eloquent\ModelNotFoundException as ModelNotFoundException;
class Handler extends ExceptionHandler class Handler extends ExceptionHandler
{ {
@ -46,6 +47,13 @@ public function report(Exception $exception)
*/ */
public function render($request, Exception $exception) public function render($request, Exception $exception)
{ {
if ($exception instanceof ModelNotFoundException)
{
return response()->json([
'message' => 'Resource not found',
], 404);
}
return parent::render($request, $exception); return parent::render($request, $exception);
} }
} }

View File

@ -2,10 +2,10 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Account; use App\TwoFAccount;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class AccountController extends Controller class TwoFAccountController extends Controller
{ {
/** /**
* Display a listing of the resource. * Display a listing of the resource.
@ -14,18 +14,9 @@ class AccountController extends Controller
*/ */
public function index() public function index()
{ {
return response()->json(Account::all()->toArray()); return response()->json(TwoFAccount::all()->toArray());
} }
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/** /**
* Store a newly created resource in storage. * Store a newly created resource in storage.
@ -35,52 +26,43 @@ public function create()
*/ */
public function store(Request $request) public function store(Request $request)
{ {
$account = Account::create([ $twofaccount = TwoFAccount::create([
'name' => $request->name, 'name' => $request->name,
'secret' => $request->secret 'secret' => $request->secret
]); ]);
$data = [ $data = [
'data' => $account, 'data' => $twofaccount,
'status' => (bool) $account, 'status' => (bool) $twofaccount,
'message' => $account ? 'Account Created' : 'Error Creating Account', 'message' => $twofaccount ? 'Account Created' : 'Error Creating Account',
]; ];
return response()->json($data); return response()->json($data);
} }
/** /**
* Display the specified resource. * Display the specified resource.
* *
* @param \App\account $account * @param \App\TwoFAccount $twofaccount
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function show(account $account) public function show(TwoFAccount $twofaccount)
{ {
return response()->json($account); return response()->json($twofaccount);
} }
/**
* Show the form for editing the specified resource.
*
* @param \App\account $account
* @return \Illuminate\Http\Response
*/
public function edit(account $account)
{
//
}
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
* *
* @param \Illuminate\Http\Request $request * @param \Illuminate\Http\Request $request
* @param \App\account $account * @param \App\TwoFAccount $twofaccount
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function update(Request $request, account $account) public function update(Request $request, TwoFAccount $twofaccount)
{ {
$status = $account->update($request->all()); $status = $twofaccount->update($request->all());
return response()->json([ return response()->json([
'status' => $status, 'status' => $status,
@ -90,20 +72,16 @@ public function update(Request $request, account $account)
//return response()->json($request, 200); //return response()->json($request, 200);
} }
/** /**
* Remove the specified resource from storage. * Remove the specified resource from storage.
* *
* @param \App\account $account * @param \App\TwoFAccount $twofaccount
* @return \Illuminate\Http\Response * @return \Illuminate\Http\Response
*/ */
public function destroy(account $account) public function destroy(TwoFAccount $twofaccount)
{ {
if($account->deleted_at == null){ $status = $twofaccount->delete();
$status = $account->delete();
}
else {
$status = $account->forceDelete();
}
return response()->json([ return response()->json([
'status' => $status, 'status' => $status,
@ -111,4 +89,23 @@ public function destroy(account $account)
]); ]);
} }
/**
* Remove the specified soft deleted resource from storage.
*
* @param \App\TwoFAccount $twofaccount
* @return \Illuminate\Http\Response
*/
public function forceDestroy($id)
{
$twofaccount = TwoFAccount::onlyTrashed()->findOrFail($id);
$status = $twofaccount->forceDelete();
return response()->json([
'status' => $status,
'message' => $status ? 'Account Deleted permanently' : 'Error Deleting Account'
]);
}
} }

View File

@ -5,9 +5,17 @@
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Database\Eloquent\SoftDeletes;
class Account extends Model class TwoFAccount extends Model
{ {
use SoftDeletes; use SoftDeletes;
protected $fillable = ['name', 'secret', 'icon']; protected $fillable = ['name', 'secret', 'icon'];
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'twofaccounts';
} }

View File

@ -4,7 +4,7 @@
use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Migrations\Migration;
class CreateAccountsTable extends Migration class CreateTwoFAccountsTable extends Migration
{ {
/** /**
* Run the migrations. * Run the migrations.
@ -13,7 +13,7 @@ class CreateAccountsTable extends Migration
*/ */
public function up() public function up()
{ {
Schema::create('accounts', function (Blueprint $table) { Schema::create('twofaccounts', function (Blueprint $table) {
$table->increments('id'); $table->increments('id');
$table->string('name')->unique(); $table->string('name')->unique();
$table->string('secret'); $table->string('secret');
@ -30,6 +30,6 @@ public function up()
*/ */
public function down() public function down()
{ {
Schema::dropIfExists('accounts'); Schema::dropIfExists('twofaccounts');
} }
} }

View File

@ -1,32 +0,0 @@
<?php
use App\Account;
use Illuminate\Database\Seeder;
class AccountsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Account::create([
'name' => 'Firefly',
'secret' => '3GB2I2P365J575LS',
]);
Account::create([
'name' => 'Facebook',
'secret' => '3GB2I2P365J575LS',
]);
Account::create([
'name' => 'Twitter',
'secret' => '3GB2I2P365J575LS',
]);
Account::create([
'name' => 'Google',
'secret' => '3GB2I2P365J575LS',
]);
}
}

View File

@ -14,7 +14,7 @@ public function run()
// $this->call(UsersTableSeeder::class); // $this->call(UsersTableSeeder::class);
$this->call([ $this->call([
UsersTableSeeder::class, UsersTableSeeder::class,
AccountsTableSeeder::class, TwoFAccountsTableSeeder::class,
]); ]);
} }
} }

View File

@ -0,0 +1,32 @@
<?php
use App\TwoFAccount;
use Illuminate\Database\Seeder;
class TwoFAccountsTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
TwoFAccount::create([
'name' => 'Firefly',
'secret' => '3G2I2P36J57LS',
]);
TwoFAccount::create([
'name' => 'Facebook',
'secret' => '3GB2I2P365J5S',
]);
TwoFAccount::create([
'name' => 'Twitter',
'secret' => '3GB2I25J575LS',
]);
TwoFAccount::create([
'name' => 'Google',
'secret' => '3GB2I25J575LS',
]);
}
}

View File

@ -21,5 +21,6 @@
}); });
Route::group(['middleware' => 'auth:api'], function(){ Route::group(['middleware' => 'auth:api'], function(){
Route::resource('/account', 'AccountController'); Route::apiResource('twofaccounts', 'TwoFAccountController');
Route::delete('twofaccounts/force/{id}', 'TwoFAccountController@forceDestroy')->name('twofaccounts.forceDestroy');
}); });

View File

@ -16,4 +16,4 @@
}); });
Route::get('account/{account}', 'AccountController@show'); Route::get('twofaccount/{TwoFAccount}', 'TwoFAccountController@show');

View File

@ -66,18 +66,18 @@ public function testUserLogin()
} }
/** /**
* test Account creation via API * test TwoFAccount creation via API
* *
* @return void * @return void
*/ */
public function testAccountCreation() public function testTwoFAccountCreation()
{ {
//$this->withoutMiddleware(); //$this->withoutMiddleware();
$user = \App\User::find(1); $user = \App\User::find(1);
$response = $this->actingAs($user, 'api') $response = $this->actingAs($user, 'api')
->json('POST', '/api/account', [ ->json('POST', '/api/twofaccounts', [
'name' => 'testCreation', 'name' => 'testCreation',
'secret' => 'test', 'secret' => 'test',
]); ]);
@ -91,16 +91,16 @@ public function testAccountCreation()
/** /**
* test Account index fetching via API * test TwoFAccount index fetching via API
* *
* @return void * @return void
*/ */
public function testAccountFetch() public function testTwoFAccountFetch()
{ {
$user = \App\User::find(1); $user = \App\User::find(1);
$response = $this->actingAs($user, 'api') $response = $this->actingAs($user, 'api')
->json('GET', '/api/account') ->json('GET', '/api/twofaccounts')
->assertStatus(200)->assertJsonStructure([ ->assertStatus(200)->assertJsonStructure([
'*' => [ '*' => [
'id', 'id',
@ -117,20 +117,20 @@ public function testAccountFetch()
/** /**
* test Account deletion via API * test TwoFAccount deletion via API
* @return [type] [description] * @return [type] [description]
*/ */
public function testAccountDeletion() public function testTwoFAccountDeletion()
{ {
$user = \App\User::find(1); $user = \App\User::find(1);
$account = \App\Account::create([ $twoFAccount = \App\TwoFAccount::create([
'name' => 'testDelete', 'name' => 'testDelete',
'secret' => 'test' 'secret' => 'test'
]); ]);
$response = $this->actingAs($user, 'api') $response = $this->actingAs($user, 'api')
->json('DELETE', "/api/account/{$account->id}") ->json('DELETE', "/api/twofaccounts/{$twoFAccount->id}")
->assertStatus(200)->assertJson([ ->assertStatus(200)->assertJson([
'status' => true, 'status' => true,
'message' => 'Account Deleted' 'message' => 'Account Deleted'