From 18fdc5c7b8961d582f55e31bc7379ecfbb76a107 Mon Sep 17 00:00:00 2001 From: Miqdad Farcha Date: Wed, 30 Sep 2020 23:59:09 +0700 Subject: [PATCH 1/2] =?UTF-8?q?Create=20user,=20product=20migration=20and?= =?UTF-8?q?=20Model=20=E2=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + app/Models/Product.php | 23 ++++++++++++ app/Models/User.php | 16 ++++----- app/Repositories/UserRepository.php | 10 ++++++ .../2014_10_12_000000_create_users_table.php | 3 +- ...12_100000_create_password_resets_table.php | 32 ----------------- ..._08_19_000000_create_failed_jobs_table.php | 36 ------------------- ...020_09_30_163303_create_products_table.php | 35 ++++++++++++++++++ 8 files changed, 78 insertions(+), 78 deletions(-) create mode 100644 app/Models/Product.php create mode 100644 app/Repositories/UserRepository.php delete mode 100644 database/migrations/2014_10_12_100000_create_password_resets_table.php delete mode 100644 database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100644 database/migrations/2020_09_30_163303_create_products_table.php diff --git a/.gitignore b/.gitignore index 0f7df0f..5740ff0 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ Homestead.json Homestead.yaml npm-debug.log yarn-error.log +.idea/ diff --git a/app/Models/Product.php b/app/Models/Product.php new file mode 100644 index 0000000..6caf2db --- /dev/null +++ b/app/Models/Product.php @@ -0,0 +1,23 @@ +belongsTo(User::class); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 804799b..b6bfc75 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -20,6 +20,7 @@ class User extends Authenticatable 'name', 'email', 'password', + 'avatar' ]; /** @@ -29,15 +30,14 @@ class User extends Authenticatable */ protected $hidden = [ 'password', - 'remember_token', ]; /** - * The attributes that should be cast to native types. - * - * @var array - */ - protected $casts = [ - 'email_verified_at' => 'datetime', - ]; + * @return \Illuminate\Database\Eloquent\Relations\HasMany + * */ + + public function products() + { + return $this->hasMany(Product::class); + } } diff --git a/app/Repositories/UserRepository.php b/app/Repositories/UserRepository.php new file mode 100644 index 0000000..a42a957 --- /dev/null +++ b/app/Repositories/UserRepository.php @@ -0,0 +1,10 @@ +id(); $table->string('name'); $table->string('email')->unique(); - $table->timestamp('email_verified_at')->nullable(); $table->string('password'); - $table->rememberToken(); + $table->string('avatar'); $table->timestamps(); }); } diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php deleted file mode 100644 index 0ee0a36..0000000 --- a/database/migrations/2014_10_12_100000_create_password_resets_table.php +++ /dev/null @@ -1,32 +0,0 @@ -string('email')->index(); - $table->string('token'); - $table->timestamp('created_at')->nullable(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('password_resets'); - } -} diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php deleted file mode 100644 index 6aa6d74..0000000 --- a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php +++ /dev/null @@ -1,36 +0,0 @@ -id(); - $table->string('uuid')->unique(); - $table->text('connection'); - $table->text('queue'); - $table->longText('payload'); - $table->longText('exception'); - $table->timestamp('failed_at')->useCurrent(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('failed_jobs'); - } -} diff --git a/database/migrations/2020_09_30_163303_create_products_table.php b/database/migrations/2020_09_30_163303_create_products_table.php new file mode 100644 index 0000000..7646362 --- /dev/null +++ b/database/migrations/2020_09_30_163303_create_products_table.php @@ -0,0 +1,35 @@ +id(); + $table->unsignedBigInteger('user_id'); + $table->string('name'); + $table->text('description'); + $table->string('photo'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('products'); + } +} From 4a2027229db08ac72f3c6265d84f693553951063 Mon Sep 17 00:00:00 2001 From: Miqdad Farcha Date: Thu, 1 Oct 2020 00:03:42 +0700 Subject: [PATCH 2/2] =?UTF-8?q?Register=20API=20=F0=9F=93=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/AuthenticationController.php | 38 +++++++++++++++++++ app/Repositories/UserRepository.php | 15 +++++++- routes/api.php | 6 +++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/Api/AuthenticationController.php diff --git a/app/Http/Controllers/Api/AuthenticationController.php b/app/Http/Controllers/Api/AuthenticationController.php new file mode 100644 index 0000000..ddc5c0b --- /dev/null +++ b/app/Http/Controllers/Api/AuthenticationController.php @@ -0,0 +1,38 @@ +userRepository = $userRepository; + } + + public function register(Request $request) + { + $rules = [ + 'name' => 'required|min:3|max:32', + 'email' => 'required|email|min:5|max:32', + 'password' => 'required|min:3|max:32|confirmed' + ]; + + $validator = Validator::make($request->all(), $rules); + if ($validator->fails()) { + return Response::json($validator->errors()); + } + + $user = $this->userRepository + ->registerUser($request->only(['name', 'email', 'password'])); + + return Response::json($user); + } +} diff --git a/app/Repositories/UserRepository.php b/app/Repositories/UserRepository.php index a42a957..2c5f8bd 100644 --- a/app/Repositories/UserRepository.php +++ b/app/Repositories/UserRepository.php @@ -1,10 +1,23 @@ $userData['name'], + 'email' => $userData['email'], + 'password' => Hash::make($userData['password']), + 'avatar' => $this->generateAvatarUrl($userData['name']) + ]); + } + public function generateAvatarUrl($name){ + return "https://ui-avatars.com/api/?name=" . urlencode($name); + } } diff --git a/routes/api.php b/routes/api.php index bcb8b18..2046081 100644 --- a/routes/api.php +++ b/routes/api.php @@ -17,3 +17,9 @@ Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); + +Route::group([ + 'prefix' => 'v1', +], function(){ + Route::post('/register', [\App\Http\Controllers\Api\AuthenticationController::class, 'register']); +});