From 16f804bcc99bcc8b96b11a01e7d065e507dfebbb Mon Sep 17 00:00:00 2001 From: andrefloquet Date: Fri, 2 Sep 2022 22:05:59 +1000 Subject: [PATCH 1/4] Post model, migration and User Relationship --- app/Models/Post.php | 16 +++++++++ app/Models/User.php | 5 +++ .../2022_09_02_104041_create_posts_table.php | 34 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 app/Models/Post.php create mode 100644 database/migrations/2022_09_02_104041_create_posts_table.php diff --git a/app/Models/Post.php b/app/Models/Post.php new file mode 100644 index 00000000..37ab67a7 --- /dev/null +++ b/app/Models/Post.php @@ -0,0 +1,16 @@ +belongsTo(User::class); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 23b40634..d8d69573 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -41,4 +41,9 @@ class User extends Authenticatable protected $casts = [ 'email_verified_at' => 'datetime', ]; + + public function posts() + { + return $this->hasMany(Post::class); + } } diff --git a/database/migrations/2022_09_02_104041_create_posts_table.php b/database/migrations/2022_09_02_104041_create_posts_table.php new file mode 100644 index 00000000..21d85cc0 --- /dev/null +++ b/database/migrations/2022_09_02_104041_create_posts_table.php @@ -0,0 +1,34 @@ +id(); + $table->foreignId('user_id')->constrained()->cascadeOnDelete(); + $table->string('name')->unique(); + $table->text('description'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('posts'); + } +}; From ca6bba5899bf6f1d7c81ebfc4de5195928390b4d Mon Sep 17 00:00:00 2001 From: andrefloquet Date: Fri, 2 Sep 2022 22:27:01 +1000 Subject: [PATCH 2/4] Seeding database with default user --- database/seeders/DatabaseSeeder.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a9aafbf9..e1cd6bc8 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -14,11 +14,9 @@ class DatabaseSeeder extends Seeder */ public function run() { - // \App\Models\User::factory(10)->create(); - -// \App\Models\User::factory()->create([ -// 'name' => 'Test User', -// 'email' => 'user@codinglabs.test', -// ]); + \App\Models\User::factory()->create([ + 'email' => 'test@test.com', + 'password' => bcrypt('secret') + ]); } } From ecfdf167e206b62afad47451ded3995f1883c2bd Mon Sep 17 00:00:00 2001 From: andrefloquet Date: Sun, 4 Sep 2022 23:02:13 +1000 Subject: [PATCH 3/4] Create Post --- README.md | 11 +++ app/Http/Controllers/PostController.php | 53 +++++++++++ app/Http/Requests/PostCreateRequest.php | 32 +++++++ app/Models/Post.php | 12 +++ composer.json | 1 + composer.lock | 86 +++++++++++++++++- .../2022_09_02_104041_create_posts_table.php | 1 + package-lock.json | 2 +- .../images/default_job_image_1662296372.jpg | Bin 0 -> 38277 bytes public/images/facebook-profile_1662296317.jpg | Bin 0 -> 29678 bytes .../views/components/input-file.blade.php | 14 +++ resources/views/components/textarea.blade.php | 12 +++ resources/views/home.blade.php | 51 +++++++++++ resources/views/inc/messages.blade.php | 26 ++++++ resources/views/layouts/app.blade.php | 2 + resources/views/layouts/navigation.blade.php | 3 + routes/web.php | 3 + 17 files changed, 307 insertions(+), 2 deletions(-) create mode 100644 README.md create mode 100644 app/Http/Controllers/PostController.php create mode 100644 app/Http/Requests/PostCreateRequest.php create mode 100644 public/images/default_job_image_1662296372.jpg create mode 100644 public/images/facebook-profile_1662296317.jpg create mode 100644 resources/views/components/input-file.blade.php create mode 100644 resources/views/components/textarea.blade.php create mode 100644 resources/views/home.blade.php create mode 100644 resources/views/inc/messages.blade.php diff --git a/README.md b/README.md new file mode 100644 index 00000000..250c45ca --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +## How long did you spend to complete this test? + +I took about 7 hours + +## What was easy? + +All steps, exept steps 5 and bonus + +## What was hard? + +Nothing too hard, but took most time on view, validation and upload file. \ No newline at end of file diff --git a/app/Http/Controllers/PostController.php b/app/Http/Controllers/PostController.php new file mode 100644 index 00000000..0fd330ce --- /dev/null +++ b/app/Http/Controllers/PostController.php @@ -0,0 +1,53 @@ +hasFile('image')) { + // Create directory images if doesn't exist + File::makeDirectory(public_path().'/images', 0755, true, true); + // Avoid file names duplicated + $fileNameWithExt = $request->file('image')->getClientOriginalName(); + // Just file name + $fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME); + // Just file extension + $extension = $request->file('image')->extension(); + // Name to Store + $fileNameToStore = $fileName.'_'.time().'.'.$extension; + //Full Path + $imgPath = public_path().'/images/'.$fileNameToStore; + //resize and store + Image::make($request->file('image'))->resize(400, 300)->save($imgPath); + } + + $post = Post::create([ + 'user_id' => Auth::user()->id, + 'name' => trim($request->name), + 'description' => trim($request->description), + 'image' => $imgPath + ]); + + if(isset($post)) { + session()->flash('success', "The post '{$post->name}' has been created!"); + } + + return redirect(route('post.create')); + } +} diff --git a/app/Http/Requests/PostCreateRequest.php b/app/Http/Requests/PostCreateRequest.php new file mode 100644 index 00000000..d627ffd9 --- /dev/null +++ b/app/Http/Requests/PostCreateRequest.php @@ -0,0 +1,32 @@ + + */ + public function rules() + { + return [ + 'name' => 'required|max:255|unique:posts,name', + 'description' => 'required', + 'image' => 'required|image|mimes:jpg,png,jpeg,gif,svg|max:2048' + ]; + } +} diff --git a/app/Models/Post.php b/app/Models/Post.php index 37ab67a7..a4024272 100644 --- a/app/Models/Post.php +++ b/app/Models/Post.php @@ -9,6 +9,18 @@ class Post extends Model { use HasFactory; + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'user_id', + 'name', + 'description', + 'image' + ]; + public function user() { return $this->belongsTo(User::class); diff --git a/composer.json b/composer.json index f45b5b91..d1c6e267 100644 --- a/composer.json +++ b/composer.json @@ -7,6 +7,7 @@ "require": { "php": "^8.0.2", "guzzlehttp/guzzle": "^7.2", + "intervention/image": "^2.7", "laravel/framework": "^9.19", "laravel/sanctum": "^3.0", "laravel/tinker": "^2.7" diff --git a/composer.lock b/composer.lock index b5c88b44..8832c8ab 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5d5b387077098f2f11ded0abfe855eae", + "content-hash": "3a7ecfc4c7a9a6c2db4e374466501ec2", "packages": [ { "name": "brick/math", @@ -889,6 +889,90 @@ ], "time": "2022-06-20T21:43:11+00:00" }, + { + "name": "intervention/image", + "version": "2.7.2", + "source": { + "type": "git", + "url": "https://github.com/Intervention/image.git", + "reference": "04be355f8d6734c826045d02a1079ad658322dad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad", + "reference": "04be355f8d6734c826045d02a1079ad658322dad", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "guzzlehttp/psr7": "~1.1 || ^2.0", + "php": ">=5.4.0" + }, + "require-dev": { + "mockery/mockery": "~0.9.2", + "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" + }, + "suggest": { + "ext-gd": "to use GD library based image processing.", + "ext-imagick": "to use Imagick based image processing.", + "intervention/imagecache": "Caching extension for the Intervention Image library" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + }, + "laravel": { + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ], + "aliases": { + "Image": "Intervention\\Image\\Facades\\Image" + } + } + }, + "autoload": { + "psr-4": { + "Intervention\\Image\\": "src/Intervention/Image" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Oliver Vogel", + "email": "oliver@intervention.io", + "homepage": "https://intervention.io/" + } + ], + "description": "Image handling and manipulation library with support for Laravel integration", + "homepage": "http://image.intervention.io/", + "keywords": [ + "gd", + "image", + "imagick", + "laravel", + "thumbnail", + "watermark" + ], + "support": { + "issues": "https://github.com/Intervention/image/issues", + "source": "https://github.com/Intervention/image/tree/2.7.2" + }, + "funding": [ + { + "url": "https://paypal.me/interventionio", + "type": "custom" + }, + { + "url": "https://github.com/Intervention", + "type": "github" + } + ], + "time": "2022-05-21T17:30:32+00:00" + }, { "name": "laravel/framework", "version": "v9.23.0", diff --git a/database/migrations/2022_09_02_104041_create_posts_table.php b/database/migrations/2022_09_02_104041_create_posts_table.php index 21d85cc0..916bc2d3 100644 --- a/database/migrations/2022_09_02_104041_create_posts_table.php +++ b/database/migrations/2022_09_02_104041_create_posts_table.php @@ -18,6 +18,7 @@ public function up() $table->foreignId('user_id')->constrained()->cascadeOnDelete(); $table->string('name')->unique(); $table->text('description'); + $table->text('image'); $table->timestamps(); }); } diff --git a/package-lock.json b/package-lock.json index b5016d62..74765ec4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "laravel-skills-test", + "name": "laravel.skills.exercise", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/public/images/default_job_image_1662296372.jpg b/public/images/default_job_image_1662296372.jpg new file mode 100644 index 0000000000000000000000000000000000000000..03a6f0426422c7d30505c57975012a774417f43f GIT binary patch literal 38277 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�rbwA<1=)uNyp@?xepO5P7)qsbJzm31XUFfj|5 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 literal 0 HcmV?d00001 diff --git a/public/images/facebook-profile_1662296317.jpg b/public/images/facebook-profile_1662296317.jpg new file mode 100644 index 0000000000000000000000000000000000000000..01f7f28ca8034505db734fc3d41c59f42c37f29e GIT binary patch literal 29678 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 HEPwymSlvi9 literal 0 HcmV?d00001 diff --git a/resources/views/components/input-file.blade.php b/resources/views/components/input-file.blade.php new file mode 100644 index 00000000..37c30184 --- /dev/null +++ b/resources/views/components/input-file.blade.php @@ -0,0 +1,14 @@ +merge(['class' => 'block + w-full + px-3 + py-1.5 + text-base + font-normal + text-gray-700 + bg-gray-100 bg-clip-padding + border border-solid border-gray-300 + rounded + transition + ease-in-out + m-0 + focus:text-gray-700 focus:bg-white focus:border-blue-600 focus:outline-none']) !!}> diff --git a/resources/views/components/textarea.blade.php b/resources/views/components/textarea.blade.php new file mode 100644 index 00000000..becbb970 --- /dev/null +++ b/resources/views/components/textarea.blade.php @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100644 index 00000000..dae56e78 --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,51 @@ + + +

+ {{ __('Create a New Post') }} +

+
+
+
+
+
+
+ @csrf +
+
+ +
+ + + +
+ +
+ + + +
+ +
+ + + + +
+ +
+ + + + {{ __('Create Post') }} + + + +
+
+
+
+
+
+
+
+
diff --git a/resources/views/inc/messages.blade.php b/resources/views/inc/messages.blade.php new file mode 100644 index 00000000..545fe773 --- /dev/null +++ b/resources/views/inc/messages.blade.php @@ -0,0 +1,26 @@ + + +@if(count($errors) > 0) + @foreach($errors->all() as $error) + + @endforeach +@endif + + +@if(session()->has('success')) + +@endif \ No newline at end of file diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 6ae3c8cb..ab2e40aa 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -12,6 +12,7 @@ @vite(['resources/css/app.css', 'resources/js/app.js']) +
@@ -26,6 +27,7 @@
+ @include('inc.messages') {{ $slot }}
diff --git a/resources/views/layouts/navigation.blade.php b/resources/views/layouts/navigation.blade.php index 3355c7dd..0e9b128a 100644 --- a/resources/views/layouts/navigation.blade.php +++ b/resources/views/layouts/navigation.blade.php @@ -15,6 +15,9 @@ {{ __('Dashboard') }} + + {{ __('Blog') }} + diff --git a/routes/web.php b/routes/web.php index 852b11f8..e134eb9d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ middleware(['auth'])->name('dashboard'); +Route::resource('post', PostController::class)->only(['create','store'])->middleware(['auth']); + require __DIR__.'/auth.php'; From 74b8eedc41afa8679a8a0672c7c8a79892d2df2e Mon Sep 17 00:00:00 2001 From: andrefloquet Date: Mon, 5 Sep 2022 20:06:18 +1000 Subject: [PATCH 4/4] fix on input-file component and post.store. Add images .gitignore --- app/Http/Controllers/PostController.php | 66 +++++++++++-------- public/images/.gitignore | 1 + .../views/components/input-file.blade.php | 2 +- resources/views/home.blade.php | 2 +- resources/views/inc/messages.blade.php | 10 +++ storage/app/public/.gitignore | 2 - 6 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 public/images/.gitignore delete mode 100644 storage/app/public/.gitignore diff --git a/app/Http/Controllers/PostController.php b/app/Http/Controllers/PostController.php index 0fd330ce..9d26a4a9 100644 --- a/app/Http/Controllers/PostController.php +++ b/app/Http/Controllers/PostController.php @@ -7,6 +7,7 @@ use App\Models\Post; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\File; +use Illuminate\Database\QueryException; use Image; @@ -19,35 +20,44 @@ public function create(Request $request) public function store(PostCreateRequest $request) { - $imgPath = ""; - if ($request->hasFile('image')) { - // Create directory images if doesn't exist - File::makeDirectory(public_path().'/images', 0755, true, true); - // Avoid file names duplicated - $fileNameWithExt = $request->file('image')->getClientOriginalName(); - // Just file name - $fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME); - // Just file extension - $extension = $request->file('image')->extension(); - // Name to Store - $fileNameToStore = $fileName.'_'.time().'.'.$extension; - //Full Path - $imgPath = public_path().'/images/'.$fileNameToStore; - //resize and store - Image::make($request->file('image'))->resize(400, 300)->save($imgPath); - } - - $post = Post::create([ - 'user_id' => Auth::user()->id, - 'name' => trim($request->name), - 'description' => trim($request->description), - 'image' => $imgPath - ]); - - if(isset($post)) { + try { + + $imgPath = ""; + + if ($request->hasFile('image')) { + // Create directory images if doesn't exist + File::makeDirectory(public_path().'/images', 0755, true, true); + // Avoid file names duplicated + $fileNameWithExt = $request->file('image')->getClientOriginalName(); + // Just file name + $fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME); + // Just file extension + $extension = $request->file('image')->extension(); + // Name to Store + $fileNameToStore = $fileName.'_'.time().'.'.$extension; + //Full Path + $imgPath = public_path().'/images/'.$fileNameToStore; + //resize and store + Image::make($request->file('image'))->resize(400, 300)->save($imgPath); + } + + $post = Post::create([ + 'user_id' => Auth::user()->id, + 'name' => trim($request->name), + 'description' => trim($request->description), + 'image' => $imgPath + ]); + session()->flash('success', "The post '{$post->name}' has been created!"); + + } catch(QueryException $exception) { + session()->flash('exception', "A database error occurred when creating a new post. + Please refresh the page and try again. + If the problem persists, contact the support."); + } catch(\Exception $exception) { + session()->flash('exception', "Please refresh the page and try again. If the problem persists, contact the support."); + } finally { + return redirect(route('post.create')); } - - return redirect(route('post.create')); } } diff --git a/public/images/.gitignore b/public/images/.gitignore new file mode 100644 index 00000000..b722e9e1 --- /dev/null +++ b/public/images/.gitignore @@ -0,0 +1 @@ +!.gitignore \ No newline at end of file diff --git a/resources/views/components/input-file.blade.php b/resources/views/components/input-file.blade.php index 37c30184..3237e435 100644 --- a/resources/views/components/input-file.blade.php +++ b/resources/views/components/input-file.blade.php @@ -1,4 +1,4 @@ -merge(['class' => 'block +merge(['class' => 'block w-full px-3 py-1.5 diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index dae56e78..70a1fc91 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -28,7 +28,7 @@
- +
diff --git a/resources/views/inc/messages.blade.php b/resources/views/inc/messages.blade.php index 545fe773..60b6a520 100644 --- a/resources/views/inc/messages.blade.php +++ b/resources/views/inc/messages.blade.php @@ -23,4 +23,14 @@ +@endif + +@if(session()->has('exception')) + @endif \ No newline at end of file diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore deleted file mode 100644 index d6b7ef32..00000000 --- a/storage/app/public/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore