Skip to content

Commit

Permalink
Merge pull request #1 from garethredfern/feature/user-avatar
Browse files Browse the repository at this point in the history
Add the avatar upload functionality
  • Loading branch information
Gareth Redfern authored Jan 12, 2021
2 parents 498cc9a + 606f11f commit c2367e8
Show file tree
Hide file tree
Showing 8 changed files with 280 additions and 10 deletions.
26 changes: 26 additions & 0 deletions app/Http/Controllers/AvatarController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace App\Http\Controllers;

use Exception;
use Illuminate\Http\Request;
use App\Http\Resources\UserResource;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;

class AvatarController extends Controller
{
public function store(Request $request)
{
try {
$user = Auth::user();
$filePath = Storage::disk('spaces')
->putFile('avatars/user-'.$user->id, $request->file, 'public');
$user->avatar = env('DO_SPACES_PUBLIC').$filePath;
$user->save();
} catch (Exception $exception) {
return response()->json(['message' => $exception->getMessage()], 409);
}
return new UserResource($user);
}
}
25 changes: 25 additions & 0 deletions app/Http/Resources/UserResource.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'avatar' => $this->avatar,
'emailVerified' => $this->email_verified_at,
];
}
}
1 change: 1 addition & 0 deletions app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ class User extends Authenticatable implements MustVerifyEmail
protected $fillable = [
'name',
'email',
'avatar',
'password',
];

Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@
"laravel/fortify": "^1.7",
"laravel/framework": "^8.12",
"laravel/sanctum": "^2.8",
"laravel/tinker": "^2.5"
"laravel/tinker": "^2.5",
"league/flysystem-aws-s3-v3": "^1.0"
},
"require-dev": {
"facade/ignition": "^2.5",
Expand Down
204 changes: 203 additions & 1 deletion composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions config/filesystems.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,15 @@
'endpoint' => env('AWS_ENDPOINT'),
],

'spaces' => [
'driver' => 's3',
'key' => env('DO_SPACES_KEY'),
'secret' => env('DO_SPACES_SECRET'),
'endpoint' => env('DO_SPACES_ENDPOINT'),
'region' => env('DO_SPACES_REGION'),
'bucket' => env('DO_SPACES_BUCKET'),
],

],

/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public function up()
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('avatar')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
Expand Down
21 changes: 13 additions & 8 deletions routes/api.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\TokenController;
use App\Http\Controllers\AvatarController;
use App\Models\User;

/*
Expand All @@ -18,14 +19,18 @@

Route::post('/sanctum/token', TokenController::class);

Route::middleware('auth:sanctum')->get('/users/{user}', function (Request $request) {
return $request->user();
});
Route::middleware(['auth:sanctum'])->group(function () {
Route::get('/users/{user}', function (Request $request) {
return $request->user();
});

Route::middleware('auth:sanctum')->get('/users', function (Request $request) {
return User::all();
});
Route::get('/users', function () {
return User::all();
});

Route::get('/users/auth', function () {
return auth()->user();
});

Route::middleware('auth:sanctum')->get('/users/auth', function (Request $request) {
return auth()->user();
Route::post('/users/auth/avatar', [AvatarController::class, 'store']);
});

0 comments on commit c2367e8

Please sign in to comment.