diff --git a/README.md b/README.md index f4022a49..513d7013 100644 --- a/README.md +++ b/README.md @@ -5,22 +5,32 @@ # 開発環境構築手順 #### 1.Docker立ち上げ +``` docker-compose up -d +``` #### 2.appに入る +``` docker-compose exec app bash +``` #### 3.各種インストール +``` npm install composer install +``` #### 4.npm実行 +``` cp .env.example .env php artisan key:generate npm run watch ( npm run dev ) +``` #### 5.DB接続 +``` php artisan migrate:fresh --seed +``` diff --git a/backend/.env.example b/backend/.env.example index dd3a054f..388e5964 100644 --- a/backend/.env.example +++ b/backend/.env.example @@ -34,6 +34,12 @@ MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}" +MAIL_OWNER_ADDRESS="" +MAIL_OWNER_NAME="" +MAIL_CC_ADDRESS="" +MAIL_CC_NAME="" +MAIL_BCC_ADDRESS="" +MAIL_BCC_NAME="" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= diff --git a/backend/app/Http/Controllers/Api/AdminController.php b/backend/app/Http/Controllers/Api/AdminController.php index 773ba93e..ee9b88f3 100644 --- a/backend/app/Http/Controllers/Api/AdminController.php +++ b/backend/app/Http/Controllers/Api/AdminController.php @@ -3,80 +3,20 @@ namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller, Session; -use Illuminate\Support\Facades\Validator; -use Illuminate\Support\Facades\Hash; -use Illuminate\Support\Facades\Auth; +use App\Http\Controllers\Api\AuthenticationTrait; +use App\Http\Controllers\Api\AuthorizationTrait; use Illuminate\Http\Request; - -use App\Models\Admin; -use App\Models\LoginLimits; +use Illuminate\Support\Facades\Log; class AdminController extends Controller { - protected $guard = 'admins'; + use AuthenticationTrait; + use AuthorizationTrait; - public function login (Request $r) { - // if (null === $r->server('HTTP_USER_AGENT')) { - // return ['status_code' => 400, 'error_message' => ['不正なuser_agent。']]; - // } - - // if (null !== ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first())) { - // if ((time() >= strtotime($ll->updated_at) + 600) === false) { - // LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->delete(); - // } - // if ($ll->fail_number >= 10) { - // return ['status_code' => 400, 'error_message' => ['10回連続で失敗しましたので、10分、ログインロックになりました。']]; - // } - // } - - $validate = Validator::make($r->all(), [ - 'email' => 'required|max:255|email', - 'password' => 'required|min:8|max:72', - ]); - - if ($validate->fails()) { - // バリデーションエラー - return ['status_code' => 422, 'error_messages' => $validate->errors()]; - } - - // 存在しない場合 - if (null === ($admin = Admin::select('id', 'email', 'password')->where('email', $r->email)->first())) { - return ['status_code' => 400, 'error_message' => ['このアカウントが存在しません。']]; - } - - // パスワードが異なる場合 - if (!Hash::check($r->password, $admin->password)) { - // if ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first()) { - // LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->update(['fail_number' => $ll->fail_number+1]); - // } - // else { - // LoginLimits::create(['user_agent' => $r->server('HTTP_USER_AGENT'), 'fail_number' => 1]); - // } - return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']]; - } - - // セッションを想像する - if (Auth::guard('admins')->attempt($r->all())) { - Session::put('admin_email', $admin->email); - Session::save(); - } - return ['status_code' => 200]; + /* Traitで使うメソッド */ + protected function getGuard () { + return 'admin'; } - - public function checkLogin () { - // セッションがあれば、管理者のトップページに移転する。なければ、ログイン画面となる。 - if (Session::has('admin_email')) { - return redirect('/admin/meeting'); - } - - return view('admin.login'); - } - - public function logout () { - // セッションを破壊すると、ログイン画面に移転する。 - if (Session::has('admin_email')) { - Session::forget('admin_email'); - } - - return redirect('/admin/login'); + protected function getModel () { + return new \App\Models\Admin(); } } diff --git a/backend/app/Http/Controllers/Api/AuthenticationTrait.php b/backend/app/Http/Controllers/Api/AuthenticationTrait.php new file mode 100644 index 00000000..443bb15c --- /dev/null +++ b/backend/app/Http/Controllers/Api/AuthenticationTrait.php @@ -0,0 +1,72 @@ +server('HTTP_USER_AGENT')) { + // return ['status_code' => 400, 'error_message' => ['不正なuser_agent。']]; + // } + + // if (null !== ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first())) { + // if ((time() >= strtotime($ll->updated_at) + 600) === false) { + // LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->delete(); + // } + // if ($ll->fail_number >= 10) { + // return ['status_code' => 400, 'error_message' => ['10回連続で失敗しましたので、10分、ログインロックになりました。']]; + // } + // } + + $validate = Validator::make($r->all(), [ + 'email' => 'required|max:255|email', + 'password' => 'required|min:8|max:72', + ]); + + // バリデーションエラー + if ($validate->fails()) { + return ['status_code' => 422, 'error_messages' => $validate->errors()]; + } + + // 存在しない場合 + if (null === ($get = $this->getModel()->where('email', $r->email)->first())) { + return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']]; + } + + // パスワードが異なる場合 + if (!Hash::check($r->password, $get->password)) { + // if ($ll = LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->first()) { + // LoginLimits::where('user_agent', $r->server('HTTP_USER_AGENT'))->update(['fail_number' => $ll->fail_number+1]); + // } + // else { + // LoginLimits::create(['user_agent' => $r->server('HTTP_USER_AGENT'), 'fail_number' => 1]); + // } + return ['status_code' => 400, 'error_message' => ['ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。']]; + } + + // セッションを想像する + $guard = $this->getGuard(); + if ($r->session()->has($guard)) { + // 認証されたデータのpassword以外を把握する + $login_user_datum = $get->toArray(); + unset($login_user_datum['password']); + // セッションに保存する + $r->session()->put($guard, $login_user_datum); + } + + return ['status_code' => 200]; + } + + public function logout () { + // セッションを破壊すると、ログイン画面に移転する。 + Session::forget($this->getGuard()); + + return redirect(request()->route()->action['prefix'].'/login'); + } +} \ No newline at end of file diff --git a/backend/app/Http/Controllers/Api/AuthorizationTrait.php b/backend/app/Http/Controllers/Api/AuthorizationTrait.php new file mode 100644 index 00000000..9e114814 --- /dev/null +++ b/backend/app/Http/Controllers/Api/AuthorizationTrait.php @@ -0,0 +1,21 @@ +getGuard())) { + // XXX リダイレクト先ですが「常に request()->route()->action['prefix'].'/meeting' 」固定ですか? + // XXX そうでない場合は、これも「メソッドの戻り値にする」やり方のほうが自由度があると思います + return redirect(request()->route()->action['prefix'].'/meeting'); + } + + return view(request()->route()->action['prefix'].'/login'); + } +} \ No newline at end of file diff --git a/backend/app/Http/Controllers/Api/ChildrenController.php b/backend/app/Http/Controllers/Api/ChildrenController.php index 4395e2b7..6aeb07ef 100644 --- a/backend/app/Http/Controllers/Api/ChildrenController.php +++ b/backend/app/Http/Controllers/Api/ChildrenController.php @@ -2,7 +2,7 @@ namespace App\Http\Controllers\Api; -use App\Http\Controllers\Controller; +use App\Http\Controllers\Controller, Session; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Hash; use Illuminate\Http\Request; @@ -14,7 +14,16 @@ use App\Models\MeetingApprovals; use App\Models\TelActivations; class ChildrenController extends Controller { - public function login () {} + use AuthenticationTrait; + use AuthorizationTrait; + + /* Traitで使うメソッド */ + protected function getGuard () { + return 'child'; + } + protected function getModel () { + return new \App\Models\Child(); + } public function registerTemporary (Request $r) { $validate = Validator::make($r->all(), [ @@ -30,7 +39,7 @@ class ChildrenController extends Controller { return ['status_code' => 400, 'error_messages' => ['既に使用されている電話番号です。']]; } - $token = random_bytes(16); + $token = bin2hex(random_bytes(16)); $insert = ['tel' => $r->tel, 'token' => $token]; try { @@ -84,7 +93,6 @@ class ChildrenController extends Controller { $insert = [ 'email' => $r->email, 'tel' => $get->tel, - 'tel_verified_at' => date('Y-m-d H:i:s'), 'password' => $password, 'last_name' => $r->last_name, 'first_name' => $r->first_name, @@ -135,7 +143,7 @@ class ChildrenController extends Controller { $result = []; $child_select = ['id', 'image', 'last_name', 'first_name']; - if (null === ($list = FatherRelation::select('father_id')->where('father_id', $r->father_id)->orderBy('created_at', 'desc')->get())) { + if (null === ($list = FatherRelation::select('father_id')->where('father_id', (int)$r->father_id)->orderBy('created_at', 'desc')->get())) { return ['status_code' => 400]; } @@ -152,7 +160,7 @@ class ChildrenController extends Controller { $result = []; $child_select = ['id', 'image', 'last_name', 'first_name']; - if (null === ($list = MeetingApprovals::select('child_id')->where('meeting_id', $r->meeting_id)->orderBy('created_at', 'desc')->get())) { + if (null === ($list = MeetingApprovals::select('child_id')->where('meeting_id', (int)$r->meeting_id)->orderBy('created_at', 'desc')->get())) { return ['status_code' => 400]; } @@ -174,7 +182,7 @@ class ChildrenController extends Controller { $child_select = ['id', 'image', 'last_name', 'first_name', 'tel']; $meeting_approvals_select = ['approval_at']; - if (null === ($list = MeetingApprovals::select($meeting_approvals_select)->where('meeting_id', $r->meeting_id)->whereNull('approval_at')->get())) { + if (null === ($list = MeetingApprovals::select($meeting_approvals_select)->where('meeting_id', (int)$r->meeting_id)->whereNull('approval_at')->get())) { return ['status_code' => 400]; } @@ -217,7 +225,7 @@ class ChildrenController extends Controller { $father_relation_select = ['hire_at']; // 親詳細の取得に成功 - if (null === ($list = Child::select('id')->where('id', $child_id)->orderBy('created_at', 'desc')->get())) { + if (null === ($list = Child::select('id')->where('id', (int)$child_id)->orderBy('created_at', 'desc')->get())) { return ['status_code' => 400]; } @@ -225,11 +233,6 @@ class ChildrenController extends Controller { if (null === ($result[] = Child::select($child_select)->find($l->id))) { return ['status_code' => 400]; } - if (isset($r->father_id)) { - if (null === ($result[$i]['father_relation'] = FatherRelation::select($father_relation_select)->where('father_id', $r->father_id)->first())) { - return ['status_code' => 400]; - } - } } return ['status_code' => 200, 'params' => $result]; @@ -247,8 +250,12 @@ class ChildrenController extends Controller { return ['status_code' => 422, 'error_messages' => $validate->errors()]; } + $update = [ + 'image' => $r->image, + ]; + try { - Child::where('id', $child_id)->update($r->all()); + Child::where('id', (int)$child_id)->update($update); } catch (\Throwable $e) { // 失敗 Log::critical($e->getMessage()); @@ -266,8 +273,8 @@ class ChildrenController extends Controller { // バリデーションエラー $validate = Validator::make($r->all(), [ - 'email' => 'required|unique:children|max:255|email|alpha_num', - 'tel' => 'required|unique:children|max:11|numeric|starts_with:0', + 'email' => 'required|max:255|email', + 'tel' => 'required|max:11|numeric|starts_with:0', 'last_name' => 'required|max:100', 'first_name' => 'required|max:100', 'company' => 'max:100', @@ -277,8 +284,16 @@ class ChildrenController extends Controller { return ['status_code' => 422, 'error_messages' => $validate->errors()]; } + $update = [ + 'email' => $r->email, + 'tel' => $r->tel, + 'last_name' => $r->last_name, + 'first_name' => $r->first_name, + 'company' => $r->company, + ]; + try { - Child::where('id', $child_id)->update($r->all()); + Child::where('id', (int)$child_id)->update($update); } catch (\Throwable $e) { // 失敗 Log::critical($e->getMessage()); @@ -309,8 +324,12 @@ class ChildrenController extends Controller { return ['status_code' => 422, 'error_messages' => $validate->errors()]; } + $update = [ + 'password' => Hash::make($r->password), + ]; + try { - Child::where('id', $child_id)->update($r->all()); + Child::where('id', (int)$child_id)->update($update); } catch (\Throwable $e) { // 失敗 Log::critical($e->getMessage()); @@ -324,7 +343,7 @@ class ChildrenController extends Controller { public function withdrawal ($child_id) { // 削除成功 try { - Child::where('id', $child_id)->delete(); + Child::where('id', (int)$child_id)->delete(); } catch (\Throwable $e) { Log::critical($e->getMessage()); return ['status_code' => 400]; diff --git a/backend/app/Http/Controllers/Api/ContactsController.php b/backend/app/Http/Controllers/Api/ContactsController.php index 746935c8..84cb4ea1 100644 --- a/backend/app/Http/Controllers/Api/ContactsController.php +++ b/backend/app/Http/Controllers/Api/ContactsController.php @@ -6,8 +6,10 @@ use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Mail; use App\Models\Contacts; +use App\Mail\ContactsMail; class ContactsController extends Controller { public function register (Request $r) { @@ -25,7 +27,11 @@ class ContactsController extends Controller { ]; try { + // DBに入ります。 Contacts::create($insert); + + // メールを送ります。 + Mail::to($r->email)->cc(config('mail.cc.address'))->bcc(config('mail.bcc.address'))->send(new FathersRegistrationTemporaryMail($r->message)); } catch (\Throwable $e) { // 失敗 Log::critical($e->getMessage()); diff --git a/backend/app/Http/Controllers/Api/FathersController.php b/backend/app/Http/Controllers/Api/FathersController.php index dcb17837..8175a164 100644 --- a/backend/app/Http/Controllers/Api/FathersController.php +++ b/backend/app/Http/Controllers/Api/FathersController.php @@ -2,24 +2,36 @@ namespace App\Http\Controllers\Api; -use App\Http\Controllers\Controller; +use App\Http\Controllers\Controller, Session; use Illuminate\Support\Facades\Validator; use Illuminate\Support\Facades\Hash; use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; +use Illuminate\Support\Facades\Mail; use App\Models\Father; use App\Models\FatherRelation; -use App\Models\EmailActivations; +use App\Models\EmailActivation; +use App\Mail\FathersRegistrationTemporaryMail; +use App\Mail\FathersRegistrationMainMail; class FathersController extends Controller { - public function login () {} + use AuthenticationTrait; + use AuthorizationTrait; + + /* Traitで使うメソッド */ + protected function getGuard () { + return 'father'; + } + protected function getModel () { + return new \App\Models\Father(); + } public function requestPassword () {} public function registerTemporary (Request $r) { $validate = Validator::make($r->all(), [ - 'email' => 'required|unique:father,email_activations|max:255|email|alpha_num' + 'email' => 'required|unique:fathers|unique:email_activations|max:255|email' ]); if ($validate->fails()) { @@ -28,24 +40,23 @@ class FathersController extends Controller { } if ($get = Father::where('email', $r->email)->first()) { - // すでにDBに登録されている場合 + // すでにfathersに登録されている場合 return ['status_code' => 400, 'error_messages' => ['入力したメールアドレスは既に登録済みです。同じメールアドレスは使用できません。']]; } - else if ($get = EmailActivations::where('email', $r->email)->first()) { - // すでにDBに登録されている場合 + else if ($get = EmailActivation::where('email', $r->email)->first()) { + // すでにemail_activationsに登録されている場合 return ['status_code' => 400, 'error_messages' => ['入力したメールアドレスは既に登録済みです。同じメールアドレスは使用できません。']]; } else { - $chars = 'abcdefghijklmnopqrstuvwxyz0123456789'; - $token = ''; - for ($i = 1; $i < 15; $i++) { - $token .= $chars[rand(0,35)]; - } - + $token = bin2hex(random_bytes(16)); $create = ['email' => $r->email, 'token' => $token, 'ttl' => date('Y-m-d H:i:s', time()+28800)]; try { - EmailActivations::create($create); + // DBに入ります。 + EmailActivation::create($create); + + // メールを送ります。 + Mail::to($r->email)->send(new FathersRegistrationTemporaryMail($token)); } catch (\Throwable $e) { // 失敗 Log::critical($e->getMessage()); @@ -71,25 +82,32 @@ class FathersController extends Controller { return ['status_code' => 422, 'error_messages' => $validate->errors()]; } - $password = Hash::make($r->password); - - if ($get = EmailActivations::where('token', $r->token)->first() && strtotime($get->ttl) > time()) { - // 有効期限が切れている場合 - return['status_code' => 401, 'error_messages' => ['仮登録の有効期限が切れました。改めて管理者にお問い合わせいただき、再登録を行ってください。']]; + if ($get = EmailActivation::select('email', 'ttl')->where('token', $r->token)->first()) { + if (time() > strtotime($get->ttl)) { + // 有効期限が切れている場合 + return['status_code' => 401, 'error_messages' => ['仮登録の有効期限が切れました。改めて管理者にお問い合わせいただき、再登録を行ってください。']]; + } } try { + // DBの値の準備。 $create = [ 'email' => $get->email, - 'email_verified_at' => date('Y-m-d H:i:s'), - 'password' => $password, + 'password' => Hash::make($r->password), 'company' => $r->company, 'image' => $r->image, 'profile' => $r->profile, 'tel' => $r->tel, ]; + // DBに入ります。 Father::create($create); + + // メールを送ります。 + Mail::to($get->email)->send(new FathersRegistrationMainMail()); + + // email_activationsから削除します。 + EmailActivation::where('token', $r->token)->delete(); } catch (\Throwable $e) { // 本登録に失敗 Log::critical($e->getMessage()); @@ -135,12 +153,21 @@ class FathersController extends Controller { return ['status_code' => 400]; } +<<<<<<< HEAD // foreach ($list as $i => $l) { // $result[] = $l; // if (null === ($result[$i]['relation'] = FatherRelation::select($father_relation_select)->where('father_id', $l->id)->first())) { // return ['status_code' => 400]; // } // } +======= + foreach ($list as $i => $l) { + $result[] = $l; + if (null === ($result[$i]['relation'] = FatherRelation::select($father_relation_select)->where('father_id', $l->id)->first())) { + continue; + } + } +>>>>>>> c234cbcd6dbb0d54c6c339a61af0f805f2401a9d // 親一覧の取得に成功 return ['status_code' => 200, 'params' => $result]; @@ -150,7 +177,7 @@ class FathersController extends Controller { $result = []; $father_select = ['id', 'company', 'image']; - if (null === ($list = FatherRelation::select('father_id')->where('child_id', $r->child_id)->orderBy('created_at', 'desc')->get())) { + if (null === ($list = FatherRelation::select('father_id')->where('child_id', (int)$r->child_id)->orderBy('created_at', 'desc')->get())) { // 親一覧の取得に失敗 return ['status_code' => 400]; } @@ -168,7 +195,7 @@ class FathersController extends Controller { public function detail ($father_id) { $father_select = ['image', 'email', 'tel', 'profile', 'company']; - if (null === ($result = Father::select($father_select)->where('id', $father_id)->orderBy('created_at', 'desc')->get()->toArray())) { + if (null === ($result = Father::select($father_select)->where('id', (int)$father_id)->orderBy('created_at', 'desc')->get()->toArray())) { // 親詳細の取得に失敗 return ['status_code' => 400, 'error_messages' => ['親の更新に失敗しました。']]; } @@ -190,8 +217,12 @@ class FathersController extends Controller { return ['status_code' => 422, 'error_messages' => $validate->errors()]; } + $update = [ + 'image' => $r->image + ]; + try { - Father::where('id', $father_id)->update($r->all()); + Father::where('id', (int)$father_id)->update($update); } catch (\Throwable $e) { // 親プロフィール画像のアップロードに失敗 Log::critical($e->getMessage()); @@ -209,18 +240,25 @@ class FathersController extends Controller { // バリデーションエラー $validate = Validator::make($r->all(), [ - 'email' => 'required|unique:fathers|max:255|email|alpha_num', + 'email' => 'required|max:255|email', 'company' => 'max:100', 'profile' => 'max:1000', - 'tel' => 'required|unique:fathers|max:11|numeric|starts_with:0', + 'tel' => 'required|max:11|numeric|starts_with:0', ]); if ($validate->fails()) { return ['status_code' => 422, 'error_messages' => $validate->errors()]; } + $update = [ + 'email' => $r->email, + 'company' => $r->company, + 'profile' => $r->profile, + 'tel' => $r->tel, + ]; + try { - Father::where('id', $father_id)->update($r->all()); + Father::where('id', (int)$father_id)->update($update); } catch (\Throwable $e) { // 親プロフィール更新失敗 Log::critical($e->getMessage()); @@ -251,8 +289,16 @@ class FathersController extends Controller { return ['status_code' => 422, 'error_messages' => $validate->errors()]; } + $update = [ + 'password' => Hash::make($r->password) + ]; + try { +<<<<<<< HEAD Father::where('id', $father_id)->update(['password'=>'123']); +======= + Father::where('id', (int)$father_id)->update($update); +>>>>>>> c234cbcd6dbb0d54c6c339a61af0f805f2401a9d } catch (\Throwable $e) { // 失敗 Log::critical($e->getMessage()); @@ -265,7 +311,7 @@ class FathersController extends Controller { public function withdrawal ($father_id) { try { - Father::where('id', $father_id)->delete(); + Father::where('id', (int)$father_id)->delete(); } catch (\Throwable $e) { // 失敗 Log::critical($e->getMessage()); @@ -278,7 +324,7 @@ class FathersController extends Controller { public function delete ($meeting_id) { try { - Meeting::where('id', $meeting_id)->delete(); + Meeting::where('id', (int)$meeting_id)->delete(); } catch (\Throwable $e) { // 失敗 Log::critical($e->getMessage()); diff --git a/backend/app/Http/Controllers/Api/MeetingsController.php b/backend/app/Http/Controllers/Api/MeetingsController.php index e5d5757d..ec4a6958 100644 --- a/backend/app/Http/Controllers/Api/MeetingsController.php +++ b/backend/app/Http/Controllers/Api/MeetingsController.php @@ -528,7 +528,11 @@ class MeetingsController extends Controller { public function delete ($meeting_id) { try { +<<<<<<< HEAD Meeting::where('id', (int)$meeting_id)->delete(); +======= + Meetings::where('meeting_id', (int)$meeting_id)->delete(); +>>>>>>> c234cbcd6dbb0d54c6c339a61af0f805f2401a9d } catch (\Throwable $e) { Log::critical($e->getMessage()); return ['status_code' => 400]; diff --git a/backend/app/Http/Middleware/Authenticate.php b/backend/app/Http/Middleware/Authenticate.php index 81fad3d6..f9572a01 100644 --- a/backend/app/Http/Middleware/Authenticate.php +++ b/backend/app/Http/Middleware/Authenticate.php @@ -20,13 +20,6 @@ class Authenticate extends Middleware } public function handle ($request, Closure $next, ...$guard) { - if (!session()->has('admin_email') && $request->path() != 'admin/login') { - return redirect('/admin/login'); - } - else if (session()->has('admin_email') && $request->path() == 'admin/login') { - return redirect('/admin/meeting'); - } - return $next($request); } } diff --git a/backend/app/Mail/ContactsMail.php b/backend/app/Mail/ContactsMail.php new file mode 100644 index 00000000..b4dc1612 --- /dev/null +++ b/backend/app/Mail/ContactsMail.php @@ -0,0 +1,23 @@ +message = $message; + } + + public function build () { + return $this->subject('お問い合わせありがとうございます。')->markdown('emails.contacts', [ + 'message' => $this->message + ]); + } +} diff --git a/backend/app/Mail/FathersRegistrationMainMail.php b/backend/app/Mail/FathersRegistrationMainMail.php new file mode 100644 index 00000000..dbf1e8b5 --- /dev/null +++ b/backend/app/Mail/FathersRegistrationMainMail.php @@ -0,0 +1,16 @@ +subject('本登録が完了しました。')->markdown('emails.fathers.registration.main'); + } +} diff --git a/backend/app/Mail/FathersRegistrationTemporaryMail.php b/backend/app/Mail/FathersRegistrationTemporaryMail.php new file mode 100644 index 00000000..349ca71a --- /dev/null +++ b/backend/app/Mail/FathersRegistrationTemporaryMail.php @@ -0,0 +1,23 @@ +token = $token; + } + + public function build () { + return $this->subject('仮登録が完了しました。')->markdown('emails.fathers.registration.temporary', [ + 'token' => $this->token + ]); + } +} diff --git a/backend/app/Models/Child.php b/backend/app/Models/Child.php index 4414e71a..79fae50a 100644 --- a/backend/app/Models/Child.php +++ b/backend/app/Models/Child.php @@ -8,6 +8,6 @@ use Illuminate\Foundation\Auth\User as Authenticatable; class Child extends Authenticatable { use HasFactory; - protected $fillable = ['father_id', 'title', 'text', 'memo', 'pdf']; + protected $fillable = ['email', 'password', 'father_id', 'title', 'text', 'memo', 'pdf']; protected $hidden = ['password']; } diff --git a/backend/app/Models/EmailActivation.php b/backend/app/Models/EmailActivation.php index 2c360207..c4bb7a29 100644 --- a/backend/app/Models/EmailActivation.php +++ b/backend/app/Models/EmailActivation.php @@ -8,4 +8,6 @@ use Illuminate\Database\Eloquent\Model; class EmailActivation extends Model { use HasFactory; + protected $fillable = ['email', 'token', 'ttl']; + protected $attributes = ['type' => 0]; } diff --git a/backend/app/Models/Father.php b/backend/app/Models/Father.php index 322bd04f..458f665e 100644 --- a/backend/app/Models/Father.php +++ b/backend/app/Models/Father.php @@ -8,5 +8,6 @@ use Illuminate\Foundation\Auth\User as Authenticatable; class Father extends Authenticatable { use HasFactory; + protected $fillable = ['email', 'password', 'company', 'image', 'profile', 'tel']; protected $hidden = ['password']; } diff --git a/backend/config/mail.php b/backend/config/mail.php index 54299aab..642aa6b2 100644 --- a/backend/config/mail.php +++ b/backend/config/mail.php @@ -87,6 +87,18 @@ return [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ], + 'owner' => [ + 'address' => env('MAIL_OWNER_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_OWNER_NAME', 'Example'), + ], + 'cc' => [ + 'address' => env('MAIL_CC_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_CC_NAME', 'Example'), + ], + 'bcc' => [ + 'address' => env('MAIL_BCC_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_BCC_NAME', 'Example'), + ], /* |-------------------------------------------------------------------------- diff --git a/backend/database/seeders/AdminsTableSeeder.php b/backend/database/seeders/AdminsTableSeeder.php index 5798bca6..238b565d 100644 --- a/backend/database/seeders/AdminsTableSeeder.php +++ b/backend/database/seeders/AdminsTableSeeder.php @@ -16,6 +16,6 @@ class AdminsTableSeeder extends Seeder public function run() { \App\Models\Admin::factory()->count(10)->create(); - \App\Models\Admin::create(['email' => 'chankan77@gmail.com', 'password' => Hash::make('password')]); + \App\Models\Admin::create(['email' => config('mail.owner.address'), 'password' => Hash::make('password')]); } } diff --git a/backend/resources/views/emails/contacts.blade.php b/backend/resources/views/emails/contacts.blade.php new file mode 100644 index 00000000..9d8e34b4 --- /dev/null +++ b/backend/resources/views/emails/contacts.blade.php @@ -0,0 +1,10 @@ +@component('mail::message') +# お問い合わせありがとうございます。 + +お問い合わせありがとうございます。キキカンサポートです。 + +【お問い合わせ内容】 +{{ $message }} + +上記、お問い合わせを受付させて頂きました。通常1〜2日にて回答のご連絡をさせて頂きます。 +@endcomponent diff --git a/backend/resources/views/emails/fathers/registration/main.blade.php b/backend/resources/views/emails/fathers/registration/main.blade.php new file mode 100644 index 00000000..384068d0 --- /dev/null +++ b/backend/resources/views/emails/fathers/registration/main.blade.php @@ -0,0 +1,11 @@ +@component('mail::message') +# 本登録が完了しました。 + +サイトへのアカウント本登録が完了しました。 + +以下のリンクからログインしてくださいませ。 + +@component('mail::button', ['url' => env('APP_URL').'/p-account/login']) +{{ env('APP_URL') }}/p-account/login +@endcomponent +@endcomponent diff --git a/backend/resources/views/emails/fathers/registration/temporary.blade.php b/backend/resources/views/emails/fathers/registration/temporary.blade.php new file mode 100644 index 00000000..10a0853a --- /dev/null +++ b/backend/resources/views/emails/fathers/registration/temporary.blade.php @@ -0,0 +1,11 @@ +@component('mail::message') +# 仮登録が完了しました。 + +サイトへのアカウント仮登録が完了しました。 + +以下のリンクからログインして、本登録を完了させてください。 + +@component('mail::button', ['url' => env('APP_URL').'/p-account/register/'.$token]) +{{ env('APP_URL') }}/p-account/register/{{ $token }} +@endcomponent +@endcomponent diff --git a/backend/routes/api.php b/backend/routes/api.php index 492f1e51..fdcaf300 100644 --- a/backend/routes/api.php +++ b/backend/routes/api.php @@ -30,7 +30,7 @@ Route::group(['prefix' => 'admin'], function () { Route::put('/updateProfile/{father_id}', '\App\Http\Controllers\Api\FathersController@updateProfile'); Route::put('/updatePassword/{father_id}', '\App\Http\Controllers\Api\FathersController@updatePassword'); Route::get('/detail/{father_id}', '\App\Http\Controllers\Api\FathersController@detail'); - Route::delete('/delete/{father_id}', '\App\Http\Controllers\Api\FathersController@withdrawal'); + Route::delete('/delete', '\App\Http\Controllers\Api\FathersController@withdrawal'); Route::post('/registerTemporary', '\App\Http\Controllers\Api\FathersController@registerTemporary'); }); @@ -48,7 +48,7 @@ Route::group(['prefix' => 'admin'], function () { // MeetingsController Route::group(['prefix' => 'meetings'], function () { Route::get('/list', '\App\Http\Controllers\Api\MeetingsController@list'); - Route::post('/search', '\App\Http\Controllers\Api\MeetingsController@search'); + Route::get('/search', '\App\Http\Controllers\Api\MeetingsController@search'); Route::get('/detail/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@detail'); Route::put('/update/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@update'); Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@delete'); @@ -65,106 +65,104 @@ Route::group(['prefix' => 'admin'], function () { Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingApprovalsController@delete'); }); }); - }); +}); - // ContactsController - //// 不明 - Route::post('/contacts/register', '\App\Http\Controllers\Api\ContactsController@register'); +// ContactsController +Route::post('/contacts/register', '\App\Http\Controllers\Api\ContactsController@register'); - Route::group(['prefix' => 'fathers'], function () { - // FathersController - Route::post('/registerMain', '\App\Http\Controllers\Api\FathersController@registerMain')->name('fatherregistermain'); - Route::post('/requestPassword', '\App\Http\Controllers\Api\FathersController@requestPassword')->name('fatherrequestpassword'); - // Route::post('/login', '\App\Http\Controllers\Api\FathersController@login')->name('fatherlogin'); +Route::group(['prefix' => 'fathers'], function () { + // FathersController + Route::post('/registerMain', '\App\Http\Controllers\Api\FathersController@registerMain')->name('fatherregistermain'); + Route::post('/requestPassword', '\App\Http\Controllers\Api\FathersController@requestPassword')->name('fatherrequestpassword'); + Route::post('/login', '\App\Http\Controllers\Api\FathersController@login')->name('fatherlogin'); - Route::group(['middleware' => 'auth:fathers'], function () { - Route::put('/updateImage/{father_id}', '\App\Http\Controllers\Api\FathersController@updateImage'); - Route::put('/updateProfile/{father_id}', '\App\Http\Controllers\Api\FathersController@updateProfile'); - Route::put('/updatePassword/{father_id}', '\App\Http\Controllers\Api\FathersController@updatePassword'); - Route::delete('/withdrawal', '\App\Http\Controllers\Api\FathersController@withdrawal'); + Route::group(['middleware' => 'auth:fathers'], function () { + Route::put('/updateImage/{father_id}', '\App\Http\Controllers\Api\FathersController@updateImage'); + Route::put('/updateProfile/{father_id}', '\App\Http\Controllers\Api\FathersController@updateProfile'); + Route::put('/updatePassword/{father_id}', '\App\Http\Controllers\Api\FathersController@updatePassword'); + Route::delete('/withdrawal', '\App\Http\Controllers\Api\FathersController@withdrawal'); - // ChildrenController - Route::group(['prefix' => 'children'], function () { - Route::get('/listOfFather', '\App\Http\Controllers\Api\ChildrenController@listOfFather'); - Route::get('/listOfMeeting', '\App\Http\Controllers\Api\ChildrenController@listOfMeeting'); - Route::post('/listOfMeetingNotifyUnapprovel', '\App\Http\Controllers\Api\ChildrenController@listOfMeetingNotifyUnapprovel'); - Route::post('/listOfMeetingNotifyApprovel', '\App\Http\Controllers\Api\ChildrenController@listOfMeetingNotifyApprovel'); - Route::get('/detail/{child_id}', '\App\Http\Controllers\Api\ChildrenController@detail'); + // ChildrenController + Route::group(['prefix' => 'children'], function () { + Route::get('/listOfFather', '\App\Http\Controllers\Api\ChildrenController@listOfFather'); + Route::get('/listOfMeeting', '\App\Http\Controllers\Api\ChildrenController@listOfMeeting'); + Route::post('/listOfMeetingNotifyUnapprovel', '\App\Http\Controllers\Api\ChildrenController@listOfMeetingNotifyUnapprovel'); + Route::post('/listOfMeetingNotifyApprovel', '\App\Http\Controllers\Api\ChildrenController@listOfMeetingNotifyApprovel'); + Route::get('/detail/{child_id}', '\App\Http\Controllers\Api\ChildrenController@detail'); + }); + + // MeetingsController + Route::group(['prefix' => 'meetings'], function () { + Route::post('/register', '\App\Http\Controllers\Api\MeetingsController@register'); + Route::post('/registerFavorite', '\App\Http\Controllers\Api\MeetingsController@registerFavorite'); + Route::get('/listOfCompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfCompleteOfFather'); + Route::get('/listOfIncompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfIncompleteOfFather'); + Route::get('/listOfFavoriteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfFavoriteOfFather'); + Route::get('/listOfNonFavoriteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfNonFavoriteOfFather'); + Route::get('/searchOfCompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@searchOfCompleteOfFather'); + Route::get('/searchOfIncompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@searchOfIncompleteOfFather'); + Route::get('/detail/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@detail'); + Route::put('/update/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@update'); + Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@delete'); + + // MeetingImagesController + Route::group(['prefix' => 'images'], function () { + Route::post('/register', '\App\Http\Controllers\Api\MeetingImagesController@register'); + Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingImagesController@delete'); }); - // MeetingsController - Route::group(['prefix' => 'meetings'], function () { - Route::post('/register', '\App\Http\Controllers\Api\MeetingsController@register'); - Route::post('/registerFavorite', '\App\Http\Controllers\Api\MeetingsController@registerFavorite'); - Route::get('/listOfCompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfCompleteOfFather'); - Route::get('/listOfIncompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfIncompleteOfFather'); - Route::get('/listOfFavoriteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfFavoriteOfFather'); - Route::get('/listOfNonFavoriteOfFather', '\App\Http\Controllers\Api\MeetingsController@listOfNonFavoriteOfFather'); - Route::get('/searchOfCompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@searchOfCompleteOfFather'); - Route::get('/searchOfIncompleteOfFather', '\App\Http\Controllers\Api\MeetingsController@searchOfIncompleteOfFather'); - Route::get('/detail/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@detail'); - Route::put('/update/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@update'); - Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@delete'); - - // MeetingImagesController - Route::group(['prefix' => 'images'], function () { - Route::post('/register', '\App\Http\Controllers\Api\MeetingImagesController@register'); - Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingImagesController@delete'); - }); - - // MeetingApprovalsController - Route::group(['prefix' => 'approvals'], function () { - // Route::post('/register/{meeting_id}', '\App\Http\Controllers\Api\MeetingApprovalsController@register'); - // Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingApprovalsController@delete'); - Route::post('/listChildrenOfMeeting', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfMeeting'); - Route::get('/listChildrenOfApprovel', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfApprovel'); - Route::get('/listChildrenOfUnapprovel', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfUnapprovel'); - }); - }); - - // FatherRelationsController - Route::group(['prefix' => 'relations'], function () { - Route::post('/register', '\App\Http\Controllers\Api\FatherRelationsController@register'); - Route::put('/updateHireDate/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@updateHireDate'); - Route::delete('/deleteRelationChild/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@deleteRelationChild'); + // MeetingApprovalsController + Route::group(['prefix' => 'approvals'], function () { + // Route::post('/register/{meeting_id}', '\App\Http\Controllers\Api\MeetingApprovalsController@register'); + // Route::delete('/delete/{meeting_id}', '\App\Http\Controllers\Api\MeetingApprovalsController@delete'); + Route::post('/listChildrenOfMeeting', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfMeeting'); + Route::get('/listChildrenOfApprovel', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfApprovel'); + Route::get('/listChildrenOfUnapprovel', '\App\Http\Controllers\Api\MeetingApprovalsController@listChildrenOfUnapprovel'); }); }); - }); - // ChildrenController - Route::group(['prefix' => 'children'], function () { - Route::post('/registerTemporary', '\App\Http\Controllers\Api\ChildrenController@registerTemporary')->name('childrenregistertemporary'); - Route::post('/registerMain', '\App\Http\Controllers\Api\ChildrenController@registerMain')->name('childrenregistermain'); - // Route::post('/requestPassword', '\App\Http\Controllers\Api\ChildrenController@requestPassword')->name('childrenrequestpassword'); - // Route::post('/login', '\App\Http\Controllers\Api\ChildrenController@login')->name('childrenlogin'); - - Route::group(['middleware' => 'auth:children'], function () { - Route::get('/detail/{child_id}', '\App\Http\Controllers\Api\ChildrenController@detail'); - Route::put('/updateImage/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updateImage'); - Route::put('/updateProfile/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updateProfile'); - Route::put('/updatePassword/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updatePassword'); - Route::delete('/withdrawal', '\App\Http\Controllers\Api\ChildrenController@withdrawal'); - - // FathersController - Route::group(['prefix' => 'fathers'], function () { - Route::get('/listOfChild', '\App\Http\Controllers\Api\FathersController@listOfChild'); - Route::get('/detail/{father_id}', '\App\Http\Controllers\Api\FathersController@detail'); - }); - - // MeetingsController - Route::group(['prefix' => 'meetings'], function () { - Route::get('/listOfApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@listOfApprovalOfChild'); - Route::get('/listOfNonApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@listOfNonApprovalOfChild'); - Route::get('/searchOfApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@searchOfApprovalOfChild'); - Route::get('/searchOfNonApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@searchOfNonApprovalOfChild'); - Route::get('/detail/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@detail'); - - // MeetingApprovalsController - Route::group(['prefix' => 'approvals'], function () { - Route::post('/registerApproval', '\App\Http\Controllers\Api\MeetingApprovalsController@registerApproval'); - }); - }); + // FatherRelationsController + Route::group(['prefix' => 'relations'], function () { + Route::post('/register', '\App\Http\Controllers\Api\FatherRelationsController@register'); + Route::put('/updateHireDate/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@updateHireDate'); + Route::delete('/deleteRelationChild/{child_id}', '\App\Http\Controllers\Api\FatherRelationsController@deleteRelationChild'); }); }); }); + +// ChildrenController +Route::group(['prefix' => 'children'], function () { + Route::post('/registerTemporary', '\App\Http\Controllers\Api\ChildrenController@registerTemporary')->name('childrenregistertemporary'); + Route::post('/registerMain', '\App\Http\Controllers\Api\ChildrenController@registerMain')->name('childrenregistermain'); + // Route::post('/requestPassword', '\App\Http\Controllers\Api\ChildrenController@requestPassword')->name('childrenrequestpassword'); + // Route::post('/login', '\App\Http\Controllers\Api\ChildrenController@login')->name('childrenlogin'); + + Route::group(['middleware' => 'auth:children'], function () { + Route::get('/detail/{child_id}', '\App\Http\Controllers\Api\ChildrenController@detail'); + Route::put('/updateImage/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updateImage'); + Route::put('/updateProfile/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updateProfile'); + Route::put('/updatePassword/{child_id}', '\App\Http\Controllers\Api\ChildrenController@updatePassword'); + Route::delete('/withdrawal', '\App\Http\Controllers\Api\ChildrenController@withdrawal'); + + // FathersController + Route::group(['prefix' => 'fathers'], function () { + Route::get('/listOfChild', '\App\Http\Controllers\Api\FathersController@listOfChild'); + Route::get('/detail/{father_id}', '\App\Http\Controllers\Api\FathersController@detail'); + }); + + // MeetingsController + Route::group(['prefix' => 'meetings'], function () { + Route::get('/listOfApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@listOfApprovalOfChild'); + Route::get('/listOfNonApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@listOfNonApprovalOfChild'); + Route::get('/searchOfApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@searchOfApprovalOfChild'); + Route::get('/searchOfNonApprovalOfChild', '\App\Http\Controllers\Api\MeetingsController@searchOfNonApprovalOfChild'); + Route::get('/detail/{meeting_id}', '\App\Http\Controllers\Api\MeetingsController@detail'); + + // MeetingApprovalsController + Route::group(['prefix' => 'approvals'], function () { + Route::post('/registerApproval', '\App\Http\Controllers\Api\MeetingApprovalsController@registerApproval'); + }); + }); + }); +}); \ No newline at end of file diff --git a/backend/routes/web.php b/backend/routes/web.php index 4b1915a9..ed4b6f77 100644 --- a/backend/routes/web.php +++ b/backend/routes/web.php @@ -17,25 +17,42 @@ Route::get('/', function () { return view('welcome'); }); -Route::get('/p-account/meeting', function () {return view('p_account.index');}); -Route::get('/p-account/meeting/detail/{meeting_id}', function () {return view('p_account.index');}); -Route::get('/p-account/meeting/new', function () {return view('p_account.index');}); -Route::get('/p-account/meeting/edit/{child_id}', function () {return view('p_account.index');}); -Route::get('/p-account/favorite', function () {return view('p_account.index');}); -Route::get('/p-account/search', function () {return view('p_account.index');}); -Route::get('/p-account/child', function () {return view('p_account.index');}); -Route::get('/p-account/child/add', function () {return view('p_account.index');}); -Route::get('/p-account/child/edit/hire-date/{child_id}', function () {return view('p_account.index');}); -Route::get('/p-account/child/detail/{child_id}', function () {return view('p_account.index');}); -Route::get('/p-account/profile', function () {return view('p_account.index');}); -Route::get('/p-account/profile/edit/{father_id}', function () {return view('p_account.index');}); -Route::get('/p-account/profile/edit/password/{father_id}', function () {return view('p_account.index');}); -Route::get('/p-account/profile/withdrawal', function () {return view('p_account.index');}); -Route::get('/p-account/profile/withdrawal/complete', function () {return view('p_account.index');}); -Route::get('/p-account', function () {return view('p_account.index');}); +Route::group(['prefix' => 'p-account'], function () { + Route::get('/', function () {return view('p_account.index');}); -Route::get('/contact-us', function () { return view('pages.contact.index'); }); -Route::get('/contact-us/complete/', function () { return view('pages.contact.index'); }); + Route::group(['middleware' => 'auth:fathers'], function () { + Route::group(['prefix' => 'meeting'], function () { + Route::get('/', function () {return view('p_account.index');}); + Route::get('/detail/{meeting_id}', function () {return view('p_account.index');}); + Route::get('/new', function () {return view('p_account.index');}); + Route::get('/edit/{child_id}', function () {return view('p_account.index');}); + }); + Route::get('/favorite', function () {return view('p_account.index');}); + Route::get('/search', function () {return view('p_account.index');}); + Route::group(['prefix' => 'child'], function () { + Route::get('/', function () {return view('p_account.index');}); + Route::get('/add', function () {return view('p_account.index');}); + Route::get('/edit/hire-date/{child_id}', function () {return view('p_account.index');}); + Route::get('/detail/{child_id}', function () {return view('p_account.index');}); + }); + Route::group(['prefix' => 'profile'], function () { + Route::get('/', function () {return view('p_account.index');}); + Route::group(['prefix' => 'edit'], function () { + Route::get('/password/{father_id}', function () {return view('p_account.index');}); + Route::get('/{father_id}', function () {return view('p_account.index');}); + }); + Route::group(['prefix' => 'withdrawal'], function () { + Route::get('/', function () {return view('p_account.index');}); + Route::get('/complete', function () {return view('p_account.index');}); + }); + }); + }); +}); + +Route::group(['prefix' => 'contact-us'], function () { + Route::get('/', function () { return view('pages.contact.index'); }); + Route::get('/complete', function () { return view('pages.contact.index'); }); +}); Route::get('/unknown-error ', function () { return view('pages.contact.index'); }); //--------------------------------Child Account--------------------------------------// Route::get('/register-temporary/c-account', function () { return view('c_account.auth'); });