Skip to content

Commit

Permalink
Adding a controller to manage media over API
Browse files Browse the repository at this point in the history
  • Loading branch information
guillaumebriday committed Apr 14, 2018
1 parent 0da3256 commit 8cd4ff6
Show file tree
Hide file tree
Showing 5 changed files with 139 additions and 0 deletions.
66 changes: 66 additions & 0 deletions app/Http/Controllers/Api/V1/MediaController.php
@@ -0,0 +1,66 @@
<?php

namespace App\Http\Controllers\Api\V1;

use App\MediaLibrary;
use App\Media;
use App\Http\Controllers\Controller;
use App\Http\Resources\Media as MediaResource;
use Illuminate\Http\Request;
use App\Http\Requests\Admin\MediaLibraryRequest;

class MediaController extends Controller
{
/**
* Return the comments.
*
* @param Request $request
* @return \Illuminate\Http\Response
*/
public function index(Request $request)
{
return MediaResource::collection(
MediaLibrary::first()->media()->paginate($request->input('limit', 20))
);
}

/**
* Store a newly created resource in storage.
*
* @param MediaLibraryRequest $request
* @return Response
*/
public function store(MediaLibraryRequest $request)
{
$this->authorize('store', Media::class);

$image = $request->file('image');
$name = $image->getClientOriginalName();

if ($request->filled('name')) {
$name = $request->input('name');
}

return new MediaResource(
MediaLibrary::first()
->addMedia($image)
->usingName($name)
->toMediaCollection()
);
}

/**
* Remove the specified resource from storage.
*
* @param Media $medium
* @return \Illuminate\Http\Response
*/
public function destroy(Media $medium)
{
$this->authorize('delete', $medium);

$medium->delete();

return response()->noContent();
}
}
24 changes: 24 additions & 0 deletions app/Http/Resources/Media.php
@@ -0,0 +1,24 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class Media extends Resource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'url' => url($this->getUrl()),
'thumb_url' => url($this->getUrl('thumb')),
];
}
}
45 changes: 45 additions & 0 deletions app/Policies/MediaPolicy.php
@@ -0,0 +1,45 @@
<?php

namespace App\Policies;

use App\Media;
use App\User;
use Illuminate\Auth\Access\HandlesAuthorization;

class MediaPolicy
{
use HandlesAuthorization;

/**
* Determine whether the user is admin for all authorization.
*/
public function before(User $user)
{
if ($user->isAdmin()) {
return true;
}
}

/**
* Determine whether the user can store a medium.
*
* @param User $user
* @return bool
*/
public function store(User $user): bool
{
return $user->isAdmin();
}

/**
* Determine whether the user can delete the medium.
*
* @param \App\User $user
* @param \App\Media $medium
* @return mixed
*/
public function delete(User $user, Media $medium)
{
return $user->isAdmin();
}
}
1 change: 1 addition & 0 deletions app/Providers/AuthServiceProvider.php
Expand Up @@ -15,6 +15,7 @@ class AuthServiceProvider extends ServiceProvider
'App\Comment' => 'App\Policies\CommentPolicy',
'App\Post' => 'App\Policies\PostPolicy',
'App\User' => 'App\Policies\UserPolicy',
'App\Media' => 'App\Policies\MediaPolicy',
];

/**
Expand Down
3 changes: 3 additions & 0 deletions routes/api.php
Expand Up @@ -24,6 +24,9 @@

// Users
Route::apiResource('users', 'UserController')->only('update');

// Media
Route::apiResource('media', 'MediaController')->only(['index', 'store', 'destroy']);
});

Route::post('/authenticate', 'Auth\AuthenticateController@authenticate')->name('authenticate');
Expand Down

0 comments on commit 8cd4ff6

Please sign in to comment.