From 279375a19e0a4e63cd7587c457eb2bb7679f4271 Mon Sep 17 00:00:00 2001 From: Admin Date: Sun, 16 Aug 2026 10:50:53 -0700 Subject: [PATCH] feat:implement RegisterController.php --- app/Enums/UserStatus.php | 10 + app/Http/Controllers/Auth/LoginController.php | 28 +- .../Controllers/Auth/RegisterController.php | 55 ++- app/Http/Requests/Auth/LoginPostRequest.php | 38 ++ .../Requests/Auth/RegisterPostRequest.php | 100 ++++++ app/Models/City.php | 48 +++ app/Models/Province.php | 42 +++ app/Models/User.php | 25 +- resources/views/auth/login.blade.php | 86 +++++ resources/views/auth/register.blade.php | 332 ++++++++++++++++++ resources/views/layouts/app.blade.php | 4 +- resources/views/layouts/navbar.blade.php | 2 +- 12 files changed, 758 insertions(+), 12 deletions(-) create mode 100644 app/Enums/UserStatus.php create mode 100644 app/Http/Requests/Auth/LoginPostRequest.php create mode 100644 app/Http/Requests/Auth/RegisterPostRequest.php create mode 100644 app/Models/City.php create mode 100644 app/Models/Province.php create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/auth/register.blade.php diff --git a/app/Enums/UserStatus.php b/app/Enums/UserStatus.php new file mode 100644 index 0000000..811b9d3 --- /dev/null +++ b/app/Enums/UserStatus.php @@ -0,0 +1,10 @@ +whereMobile($request->input('mobile')) + ->first(); + if (!$user) { + + return back()->withErrors([ + 'general' => 'اطلاعات کاربر اشتباه است.' + ]); + } + + if (!Hash::check($request->input('password'), $user->password)){ + return back()->withErrors([ + 'general' => 'اطلاعات کاربر اشتباه است.' + ]); + } + + Auth::login($user); + + return redirect()->route('index'); } } diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php index c77fd79..e67e99e 100644 --- a/app/Http/Controllers/Auth/RegisterController.php +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -2,18 +2,69 @@ namespace App\Http\Controllers\Auth; +use App\Enums\UserStatus; use App\Http\Controllers\Controller; +use App\Http\Requests\Auth\RegisterPostRequest; +use App\Models\File; +use App\Models\User; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\DB; +use Illuminate\Support\Facades\Hash; class RegisterController extends Controller { public function index() { - return view('auth.register'); + $withoutHeader = true; + $withoutFooter = true; + + return view('auth.register', compact('withoutHeader', 'withoutFooter')); + } - public function post() + public function post(RegisterPostRequest $request) { + $inputs = $request->validated(); + + unset($inputs['image']); + unset($inputs['file_id']); + + $inputs['password'] = Hash::make($inputs['password']); + $inputs['status'] = UserStatus::DISABLE; + + $user = User::create($inputs); + + + if ($request->hasFile('image')) { + + $image = $request->file('image'); + + $imageName = $user->id . '_' . rand(11111, 99999) . '_' . time() . '.' . $image->extension(); + + $path = $image->storeAs( + 'user_profile', + $imageName, + 'public' + ); + + $file = File::create([ + 'name' => $imageName, + 'original_name' => $image->getClientOriginalName(), + 'path' => $path, + 'extension' => $image->extension(), + 'size' => $image->getSize(), + ]); + + + $user->update([ + 'file_id' => $file->id, + ]); + } + + Auth::login($user); + + return redirect()->route('index'); } } diff --git a/app/Http/Requests/Auth/LoginPostRequest.php b/app/Http/Requests/Auth/LoginPostRequest.php new file mode 100644 index 0000000..01268a9 --- /dev/null +++ b/app/Http/Requests/Auth/LoginPostRequest.php @@ -0,0 +1,38 @@ +|string> + */ + public function rules(): array + { + return [ + 'email' => [ + 'required', + 'max:150', + 'email', + 'unique:App\Models\User' + ], + 'password' => [ + 'required', + 'min:6', + ], + ]; + } +} diff --git a/app/Http/Requests/Auth/RegisterPostRequest.php b/app/Http/Requests/Auth/RegisterPostRequest.php new file mode 100644 index 0000000..6811189 --- /dev/null +++ b/app/Http/Requests/Auth/RegisterPostRequest.php @@ -0,0 +1,100 @@ +|string> + */ + public function rules(): array + { + return [ + 'first_name' => [ + 'required', + 'min:2', + 'max:100', + 'persian_alpha' + ], + 'last_name' => [ + 'required', + 'min:3', + 'max:100', + 'persian_alpha' + ], + 'username' => [ + 'required', + 'alpha_num', + 'min:3', + 'max:20', + 'unique:App\Models\User,username', + ], + 'national_code' => [ + 'required', + 'ir_national_id', + 'unique:App\Models\User,national_code' + ], + 'gender' => [ + 'required', + new Enum(UserGenderStatus::class) + + ], + 'marital_status' => [ + 'required', + new Enum(UserMaritalStatus::class) + ], + 'spouse_name' => [ + 'nullable', + 'string', + 'max:256', + 'persian_alpha' + ], + 'email' => [ + 'required', + 'max:150', + 'email', + 'unique:App\Models\User' + ], + 'mobile' => [ + 'required', + 'unique:App\Models\User', + 'ir_mobile:zero' + ], + 'password' => [ + 'required', + 'min:6', + 'confirmed' + ], + 'province_id' => [ + 'nullable', + 'exists:provinces, id' + ], + 'city_id'=>[ + 'nullable', + 'exists:cities, id' + ], + 'image' => [ + 'nullable', + 'image', + 'mimes:jpg,png,webp', + 'max:255' + ] + ]; + } +} diff --git a/app/Models/City.php b/app/Models/City.php new file mode 100644 index 0000000..7006477 --- /dev/null +++ b/app/Models/City.php @@ -0,0 +1,48 @@ + 'int' + ]; + + protected $fillable = [ + 'province_id', + 'name' + ]; + + public function province() + { + return $this->belongsTo(Province::class); + } + + public function users() + { + return $this->hasMany(User::class); + } +} diff --git a/app/Models/Province.php b/app/Models/Province.php new file mode 100644 index 0000000..be8e547 --- /dev/null +++ b/app/Models/Province.php @@ -0,0 +1,42 @@ +hasMany(City::class); + } + + public function users() + { + return $this->hasMany(User::class); + } +} diff --git a/app/Models/User.php b/app/Models/User.php index 6979346..1988879 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -26,15 +26,16 @@ use Illuminate\Foundation\Auth\User as Authenticated; * @property int|null $file_id * @property string $username * @property string $password - * @property string $password_confirmation - * @property string $user_Province - * @property string $user_city + * @property int $province_id + * @property int $city_id * @property int $status * @property Carbon $created_at * @property Carbon $updated_at * @property Carbon $deleted * * @property File|null $file + * @property Province $province + * @property City $city * @property Collection|Booking[] $bookings * @property Collection|Comment[] $comments * @@ -43,11 +44,14 @@ use Illuminate\Foundation\Auth\User as Authenticated; class User extends Authenticated { protected $table = 'users'; + public static $snakeAttributes = false; protected $casts = [ 'gender' => 'int', 'marital_status' => 'int', 'file_id' => 'int', + 'province_id' => 'int', + 'city_id' => 'int', 'status' => 'int', 'deleted' => 'datetime' ]; @@ -68,9 +72,8 @@ class User extends Authenticated 'file_id', 'username', 'password', - 'password_confirmation', - 'user_Province', - 'user_city', + 'province_id', + 'city_id', 'status', 'deleted' ]; @@ -80,6 +83,16 @@ class User extends Authenticated return $this->belongsTo(File::class); } + public function province() + { + return $this->belongsTo(Province::class); + } + + public function city() + { + return $this->belongsTo(City::class); + } + public function bookings() { return $this->hasMany(Booking::class); diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 0000000..e1cdcf3 --- /dev/null +++ b/resources/views/auth/login.blade.php @@ -0,0 +1,86 @@ +@extends('layouts.app') + +@section('content') +
+ + + + + +
+@endsection diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php new file mode 100644 index 0000000..a736226 --- /dev/null +++ b/resources/views/auth/register.blade.php @@ -0,0 +1,332 @@ +@extends('layouts.app') + +@section('content') +
+ + + + + +
+@endsection diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 8d4c1f1..f8853df 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -53,11 +53,11 @@ -@include('layouts.header') +@includeUnless(isset($withoutHeader),'layouts.header') @yield('content') -@include('layouts.footer') +@includeUnless(isset($withoutFooter),'layouts.footer') diff --git a/resources/views/layouts/navbar.blade.php b/resources/views/layouts/navbar.blade.php index 23942a2..f9ddf85 100644 --- a/resources/views/layouts/navbar.blade.php +++ b/resources/views/layouts/navbar.blade.php @@ -124,7 +124,7 @@