├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── .styleci.yml ├── README.md ├── app ├── Actions │ └── Fortify │ │ ├── CreateNewUser.php │ │ ├── PasswordValidationRules.php │ │ ├── ResetUserPassword.php │ │ ├── UpdateUserPassword.php │ │ └── UpdateUserProfileInformation.php ├── Console │ └── Kernel.php ├── Events │ └── PostViewEvent.php ├── Exceptions │ └── Handler.php ├── Http │ ├── Controllers │ │ ├── AccountController.php │ │ ├── Auth │ │ │ ├── AdminController.php │ │ │ └── AuthorController.php │ │ ├── CompanyCategoryController.php │ │ ├── CompanyController.php │ │ ├── Controller.php │ │ ├── JobApplicationController.php │ │ ├── JobController.php │ │ ├── PostController.php │ │ └── savedJobController.php │ ├── Kernel.php │ └── Middleware │ │ ├── Authenticate.php │ │ ├── EncryptCookies.php │ │ ├── PreventRequestsDuringMaintenance.php │ │ ├── RedirectIfAuthenticated.php │ │ ├── TrimStrings.php │ │ ├── TrustHosts.php │ │ ├── TrustProxies.php │ │ └── VerifyCsrfToken.php ├── Models │ ├── Company.php │ ├── CompanyCategory.php │ ├── JobApplication.php │ ├── Post.php │ ├── PostUser.php │ └── User.php └── Providers │ ├── AppServiceProvider.php │ ├── AuthServiceProvider.php │ ├── BroadcastServiceProvider.php │ ├── EventServiceProvider.php │ ├── FortifyServiceProvider.php │ └── RouteServiceProvider.php ├── artisan ├── bootstrap ├── app.php └── cache │ └── .gitignore ├── composer.json ├── composer.lock ├── config ├── app.php ├── auth.php ├── broadcasting.php ├── cache.php ├── cors.php ├── database.php ├── filesystems.php ├── fortify.php ├── hashing.php ├── logging.php ├── mail.php ├── permission.php ├── queue.php ├── services.php ├── session.php ├── sweetalert.php └── view.php ├── database ├── .gitignore ├── factories │ ├── CompanyFactory.php │ ├── PostFactory.php │ └── UserFactory.php ├── migrations │ ├── 2014_10_12_000000_create_users_table.php │ ├── 2014_10_12_100000_create_password_resets_table.php │ ├── 2014_10_12_200000_add_two_factor_columns_to_users_table.php │ ├── 2019_08_19_000000_create_failed_jobs_table.php │ ├── 2020_10_09_104919_create_permission_tables.php │ ├── 2020_10_09_144234_create_company_categories_table.php │ ├── 2020_10_09_145555_create_companies_table.php │ ├── 2020_10_11_024354_create_posts_table.php │ ├── 2020_10_12_133736_create_post_user_table.php │ └── 2020_10_13_111952_create_job_applications_table.php └── seeders │ ├── CategorySeeder.php │ ├── CompanySeeder.php │ ├── DatabaseSeeder.php │ ├── RolePermissionSeeder.php │ └── UserSeeder.php ├── package-lock.json ├── package.json ├── phpunit.xml ├── public ├── .htaccess ├── css │ └── app.css ├── favicon.ico ├── images │ ├── companies │ │ ├── banner.jpg │ │ ├── medical.jpg │ │ ├── muncha.jpg │ │ ├── nocover.jpg │ │ ├── square.jpg │ │ └── vertisk.jpg │ ├── login-background.png │ ├── login-bg.jpg │ ├── logo │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── 6.png │ │ ├── 7.png │ │ ├── 8.png │ │ └── joblister.png │ ├── search-not-found.png │ ├── user-profile.png │ └── user-profile2.png ├── index.php ├── js │ └── app.js ├── mix-manifest.json ├── robots.txt ├── vendor │ └── sweetalert │ │ └── sweetalert.all.js └── web.config ├── resources ├── js │ ├── app.js │ ├── bootstrap.js │ ├── components │ │ ├── AppComponent.vue │ │ ├── JobComponent.vue │ │ ├── SearchBar.vue │ │ ├── SearchResult.vue │ │ └── Sidebar.vue │ ├── pages │ │ ├── JobCategory.vue │ │ ├── JobTitle.vue │ │ └── Organization.vue │ ├── progressbar.js │ └── routes.js ├── lang │ └── en │ │ ├── auth.php │ │ ├── pagination.php │ │ ├── passwords.php │ │ └── validation.php ├── sass │ ├── _default.scss │ ├── app.scss │ ├── inc │ │ ├── _account-layout.scss │ │ ├── _navbar.scss │ │ └── _roboto-font.scss │ └── pages │ │ ├── _auth.scss │ │ └── _home.scss └── views │ ├── Home.blade.php │ ├── account │ ├── apply-job.blade.php │ ├── author-section.blade.php │ ├── become-employer.blade.php │ ├── change-password.blade.php │ ├── dashboard.blade.php │ ├── deactivate.blade.php │ ├── employer.blade.php │ ├── saved-job.blade.php │ ├── user-account.blade.php │ └── view-all-users.blade.php │ ├── auth │ ├── forgot-password.blade.php │ ├── login.blade.php │ ├── register.blade.php │ └── reset-password.blade.php │ ├── company-category │ └── edit.blade.php │ ├── company │ ├── create.blade.php │ └── edit.blade.php │ ├── errors │ ├── 403.blade.php │ └── 404.blade.php │ ├── inc │ ├── account-nav.blade.php │ ├── footer.blade.php │ ├── login-banner.blade.php │ └── navbar.blade.php │ ├── job-application │ ├── index.blade.php │ └── show.blade.php │ ├── job │ └── index.blade.php │ ├── layouts │ ├── account.blade.php │ ├── app.blade.php │ ├── auth.blade.php │ ├── employer.blade.php │ ├── job.blade.php │ └── post.blade.php │ ├── post │ ├── create.blade.php │ ├── edit.blade.php │ └── show.blade.php │ └── vendor │ └── sweetalert │ └── alert.blade.php ├── routes ├── api.php ├── channels.php ├── console.php └── web.php ├── server.php ├── storage ├── app │ ├── .gitignore │ └── public │ │ └── .gitignore ├── framework │ ├── .gitignore │ ├── cache │ │ ├── .gitignore │ │ └── data │ │ │ └── .gitignore │ ├── sessions │ │ └── .gitignore │ ├── testing │ │ └── .gitignore │ └── views │ │ └── .gitignore └── logs │ └── .gitignore ├── tests ├── CreatesApplication.php ├── Feature │ └── ExampleTest.php ├── TestCase.php └── Unit │ └── ExampleTest.php └── webpack.mix.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | indent_style = space 8 | indent_size = 4 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | 14 | [*.{yml,yaml}] 15 | indent_size = 2 16 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | APP_NAME=Laravel 2 | APP_ENV=local 3 | APP_KEY= 4 | APP_DEBUG=true 5 | APP_URL=http://localhost 6 | 7 | LOG_CHANNEL=stack 8 | 9 | DB_CONNECTION=mysql 10 | DB_HOST=127.0.0.1 11 | DB_PORT=3306 12 | DB_DATABASE=laravel 13 | DB_USERNAME=root 14 | DB_PASSWORD= 15 | 16 | BROADCAST_DRIVER=log 17 | CACHE_DRIVER=file 18 | QUEUE_CONNECTION=sync 19 | SESSION_DRIVER=file 20 | SESSION_LIFETIME=120 21 | 22 | REDIS_HOST=127.0.0.1 23 | REDIS_PASSWORD=null 24 | REDIS_PORT=6379 25 | 26 | MAIL_MAILER=smtp 27 | MAIL_HOST=smtp.mailtrap.io 28 | MAIL_PORT=2525 29 | MAIL_USERNAME=null 30 | MAIL_PASSWORD=null 31 | MAIL_ENCRYPTION=null 32 | MAIL_FROM_ADDRESS=null 33 | MAIL_FROM_NAME="${APP_NAME}" 34 | 35 | AWS_ACCESS_KEY_ID= 36 | AWS_SECRET_ACCESS_KEY= 37 | AWS_DEFAULT_REGION=us-east-1 38 | AWS_BUCKET= 39 | 40 | PUSHER_APP_ID= 41 | PUSHER_APP_KEY= 42 | PUSHER_APP_SECRET= 43 | PUSHER_APP_CLUSTER=mt1 44 | 45 | MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" 46 | MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" 47 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | *.css linguist-vendored 3 | *.scss linguist-vendored 4 | *.js linguist-vendored 5 | CHANGELOG.md export-ignore 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | /public/hot 3 | /public/storage 4 | /storage/*.key 5 | /vendor 6 | .env 7 | .env.backup 8 | .phpunit.result.cache 9 | Homestead.json 10 | Homestead.yaml 11 | npm-debug.log 12 | yarn-error.log 13 | -------------------------------------------------------------------------------- /.styleci.yml: -------------------------------------------------------------------------------- 1 | php: 2 | preset: laravel 3 | disabled: 4 | - no_unused_imports 5 | finder: 6 | not-name: 7 | - index.php 8 | - server.php 9 | js: 10 | finder: 11 | not-name: 12 | - webpack.mix.js 13 | css: true 14 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # About Joblister 2 | Joblister is made with laravel 8 and vue js.
3 | Having user,author,admin role and permissions
4 | Live : [Click Me](http://joblister-laravel-8.herokuapp.com)
5 | 6 |
7 | >Installation at the bottom 8 |
9 | 10 |
11 | ## Screenshots of this app 12 | 13 |

14 | 15 | ### Home Page 16 | Capture 17 |
18 | 19 | ### Vuejs Spa Job finder 20 | Screenshot-23 22 |
23 | 24 | ### Post Description panel 25 | Screenshot-9 27 |
28 | 29 | ### Author Dashboard 30 | Screenshot-46 31 |
32 | 33 | ### Admin Dashboard 34 | Screenshot-46 35 |
36 | 37 |

38 | 39 | ## Installations 40 | 41 |
42 | ## If you receive and error while installation below:: 43 | 44 | > run composer update instead of composer install 45 | > also run php artisan key:generate 46 | 47 | ## 1. Clone the repository 48 | 49 | > https://github.com/nishangupta/joblister-laravel-8.git 50 | 51 |
52 | 53 | ## 2. Set the basic config 54 | 55 | > Edit example.env to .env
56 | > Put your db username and password here with DB_DATABASE=job_lister.
57 | > '''
58 | 59 | DB_CONNECTION=mysql
60 | DB_HOST=127.0.0.1
61 | DB_PORT=3306
62 | DB_DATABASE=job_lister
!important 63 | DB_USERNAME=root
64 | DB_PASSWORD=
65 | 66 | ''' 67 |
68 | 69 | ## 3. Install Dependencies 70 | 71 | > ~composer install
72 | > ~npm install
73 | > ~npm run dev 74 | >
75 | 76 | ## 4. Migrate Database 77 | 78 | > ~php artisan migrate:fresh
79 | > ~php artisan db:seed
>
80 | 81 | ## 5. Serve application 82 | 83 | > ~php artisan serve
84 | 85 | -------------------------------------------------------------------------------- /app/Actions/Fortify/CreateNewUser.php: -------------------------------------------------------------------------------- 1 | ['required', 'string', 'max:255'], 24 | 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 25 | 'password' => $this->passwordRules(), 26 | ])->validate(); 27 | 28 | $user = User::create([ 29 | 'name' => $input['name'], 30 | 'email' => $input['email'], 31 | 'password' => Hash::make($input['password']), 32 | ]); 33 | $user->assignRole('user'); 34 | return $user; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/Actions/Fortify/PasswordValidationRules.php: -------------------------------------------------------------------------------- 1 | $this->passwordRules(), 24 | ])->validate(); 25 | 26 | $user->forceFill([ 27 | 'password' => Hash::make($input['password']), 28 | ])->save(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Actions/Fortify/UpdateUserPassword.php: -------------------------------------------------------------------------------- 1 | ['required', 'string'], 24 | 'password' => $this->passwordRules(), 25 | ])->after(function ($validator) use ($user, $input) { 26 | if (! Hash::check($input['current_password'], $user->password)) { 27 | $validator->errors()->add('current_password', __('The provided password does not match your current password.')); 28 | } 29 | })->validateWithBag('updatePassword'); 30 | 31 | $user->forceFill([ 32 | 'password' => Hash::make($input['password']), 33 | ])->save(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/Actions/Fortify/UpdateUserProfileInformation.php: -------------------------------------------------------------------------------- 1 | ['required', 'string', 'max:255'], 23 | 24 | 'email' => [ 25 | 'required', 26 | 'string', 27 | 'email', 28 | 'max:255', 29 | Rule::unique('users')->ignore($user->id), 30 | ], 31 | ])->validateWithBag('updateProfileInformation'); 32 | 33 | if ($input['email'] !== $user->email && 34 | $user instanceof MustVerifyEmail) { 35 | $this->updateVerifiedUser($user, $input); 36 | } else { 37 | $user->forceFill([ 38 | 'name' => $input['name'], 39 | 'email' => $input['email'], 40 | ])->save(); 41 | } 42 | } 43 | 44 | /** 45 | * Update the given verified user's profile information. 46 | * 47 | * @param mixed $user 48 | * @param array $input 49 | * @return void 50 | */ 51 | protected function updateVerifiedUser($user, array $input) 52 | { 53 | $user->forceFill([ 54 | 'name' => $input['name'], 55 | 'email' => $input['email'], 56 | 'email_verified_at' => null, 57 | ])->save(); 58 | 59 | $user->sendEmailVerificationNotification(); 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /app/Console/Kernel.php: -------------------------------------------------------------------------------- 1 | command('inspire')->hourly(); 28 | } 29 | 30 | /** 31 | * Register the commands for the application. 32 | * 33 | * @return void 34 | */ 35 | protected function commands() 36 | { 37 | $this->load(__DIR__.'/Commands'); 38 | 39 | require base_path('routes/console.php'); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/Events/PostViewEvent.php: -------------------------------------------------------------------------------- 1 | increment('views'); 26 | 27 | $post->views += 1; 28 | } 29 | 30 | /** 31 | * Get the channels the event should broadcast on. 32 | * 33 | * @return \Illuminate\Broadcasting\Channel|array 34 | */ 35 | public function broadcastOn() 36 | { 37 | return new PrivateChannel('channel-name'); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/Exceptions/Handler.php: -------------------------------------------------------------------------------- 1 | with('company')->paginate(30); 20 | $roles = Role::all()->pluck('name'); 21 | $permissions = Permission::all()->pluck('name'); 22 | $rolesHavePermissions = Role::with('permissions')->get(); 23 | 24 | $dashCount = []; 25 | $dashCount['author'] = User::role('author')->count(); 26 | $dashCount['user'] = User::role('user')->count(); 27 | $dashCount['post'] = Post::count(); 28 | $dashCount['livePost'] = Post::where('deadline', '>', Carbon::now())->count(); 29 | 30 | return view('account.dashboard')->with([ 31 | 'companyCategories' => CompanyCategory::all(), 32 | 'dashCount' => $dashCount, 33 | 'recentAuthors' => $authors, 34 | 'roles' => $roles, 35 | 'permissions' => $permissions, 36 | 'rolesHavePermissions' => $rolesHavePermissions, 37 | ]); 38 | } 39 | public function viewAllUsers() 40 | { 41 | $users = User::select('id', 'name', 'email', 'created_at')->latest()->paginate(30); 42 | return view('account.view-all-users')->with([ 43 | 'users' => $users 44 | ]); 45 | } 46 | 47 | public function destroyUser(Request $request) 48 | { 49 | $user = User::findOrFail($request->user_id); 50 | if ($user->delete()) { 51 | Alert::toast('Deleted Successfully!', 'danger'); 52 | return redirect()->route('account.viewAllUsers'); 53 | } else { 54 | return redirect()->intented('account.viewAllUsers'); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/Http/Controllers/Auth/AuthorController.php: -------------------------------------------------------------------------------- 1 | hasCompany()) { 20 | //without the if block the posts relationship returns error 21 | $company = auth()->user()->company; 22 | $posts = $company->posts()->get(); 23 | 24 | if ($company->posts->count()) { 25 | $livePosts = $posts->where('deadline', '>', Carbon::now())->count(); 26 | $ids = $posts->pluck('id'); 27 | $applications = JobApplication::whereIn('post_id', $ids)->get(); 28 | } 29 | } 30 | 31 | //doesnt have company 32 | return view('account.author-section')->with([ 33 | 'company' => $company, 34 | 'applications' => $applications, 35 | 'livePosts' => $livePosts 36 | ]); 37 | } 38 | 39 | // Author Employer panel 40 | //employer is company of author 41 | public function employer($employer) 42 | { 43 | $company = Company::find($employer)->with('posts')->first(); 44 | return view('account.employer')->with([ 45 | 'company' => $company, 46 | ]); 47 | } 48 | 49 | //check if has company 50 | protected function hasCompany() 51 | { 52 | return auth()->user()->company ? true : false; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/Http/Controllers/CompanyCategoryController.php: -------------------------------------------------------------------------------- 1 | validate([ 15 | 'category_name' => 'required|min:5' 16 | ]); 17 | CompanyCategory::create([ 18 | 'category_name' => $request->category_name 19 | ]); 20 | Alert::toast('Category Created!', 'success'); 21 | return redirect()->route('account.dashboard'); 22 | } 23 | 24 | public function edit(CompanyCategory $category) 25 | { 26 | return view('company-category.edit', compact('category')); 27 | } 28 | 29 | public function update(Request $request, $id) 30 | { 31 | $request->validate([ 32 | 'category_name' => 'required|min:5' 33 | ]); 34 | $category = CompanyCategory::find($id); 35 | $category->update([ 36 | 'category_name' => $request->category_name 37 | ]); 38 | Alert::toast('Category Updated!', 'success'); 39 | return redirect()->route('account.dashboard'); 40 | } 41 | 42 | public function destroy($id) 43 | { 44 | $category = CompanyCategory::find($id); 45 | $category->delete(); 46 | Alert::toast('Category Delete!', 'success'); 47 | return redirect()->route('account.dashboard'); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/Http/Controllers/Controller.php: -------------------------------------------------------------------------------- 1 | user()->company; 16 | 17 | if ($company) { 18 | $ids = $company->posts()->pluck('id'); 19 | $applications = JobApplication::whereIn('post_id', $ids); 20 | $applicationsWithPostAndUser = $applications->with('user', 'post')->latest()->paginate(10); 21 | } 22 | 23 | return view('job-application.index')->with([ 24 | 'applications' => $applicationsWithPostAndUser, 25 | ]); 26 | } 27 | public function show($id) 28 | { 29 | $application = JobApplication::find($id); 30 | 31 | $post = $application->post()->first(); 32 | $userId = $application->user_id; 33 | $applicant = User::find($userId); 34 | 35 | $company = $post->company()->first(); 36 | return view('job-application.show')->with([ 37 | 'applicant' => $applicant, 38 | 'post' => $post, 39 | 'company' => $company, 40 | 'application' => $application 41 | ]); 42 | } 43 | public function destroy(Request $request) 44 | { 45 | $application = JobApplication::find($request->application_id); 46 | $application->delete(); 47 | Alert::toast('Company deleleted', 'warning'); 48 | return redirect()->route('jobApplication.index'); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/Http/Controllers/JobController.php: -------------------------------------------------------------------------------- 1 | q) { 22 | $posts = Post::where('job_title', 'LIKE', '%' . $request->q . '%'); 23 | } elseif ($request->category_id) { 24 | $posts = Post::whereHas('company', function ($query) use ($request) { 25 | return $query->where('company_category_id', $request->category_id); 26 | }); 27 | } elseif ($request->job_level) { 28 | $posts = Post::where('job_level', 'Like', '%' . $request->job_level . '%'); 29 | } elseif ($request->education_level) { 30 | $posts = Post::where('education_level', 'Like', '%' . $request->education_level . '%'); 31 | } elseif ($request->employment_type) { 32 | $posts = Post::where('employment_type', 'Like', '%' . $request->employment_type . '%'); 33 | } else { 34 | $posts = Post::take(30); 35 | } 36 | 37 | $posts = $posts->has('company')->with('company')->paginate(6); 38 | 39 | return $posts->toJson(); 40 | } 41 | public function getCategories() 42 | { 43 | $categories = CompanyCategory::all(); 44 | return $categories->toJson(); 45 | } 46 | public function getAllOrganization() 47 | { 48 | $companies = Company::all(); 49 | return $companies->toJson(); 50 | } 51 | public function getAllByTitle() 52 | { 53 | $posts = Post::where('deadline', '>', Carbon::now())->get()->pluck('id', 'job_title'); 54 | return $posts->toJson(); 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /app/Http/Controllers/PostController.php: -------------------------------------------------------------------------------- 1 | take(20)->with('company')->get(); 17 | $categories = CompanyCategory::take(5)->get(); 18 | $topEmployers = Company::latest()->take(3)->get(); 19 | return view('home')->with([ 20 | 'posts' => $posts, 21 | 'categories' => $categories, 22 | 'topEmployers' => $topEmployers 23 | ]); 24 | } 25 | 26 | public function create() 27 | { 28 | if (!auth()->user()->company) { 29 | Alert::toast('You must create a company first!', 'info'); 30 | return redirect()->route('company.create'); 31 | } 32 | return view('post.create'); 33 | } 34 | 35 | public function store(Request $request) 36 | { 37 | $this->requestValidate($request); 38 | 39 | $postData = array_merge(['company_id' => auth()->user()->company->id], $request->all()); 40 | 41 | $post = Post::create($postData); 42 | if ($post) { 43 | Alert::toast('Post listed!', 'success'); 44 | return redirect()->route('account.authorSection'); 45 | } 46 | Alert::toast('Post failed to list!', 'warning'); 47 | return redirect()->back(); 48 | } 49 | 50 | public function show($id) 51 | { 52 | $post = Post::findOrFail($id); 53 | 54 | event(new PostViewEvent($post)); 55 | $company = $post->company()->first(); 56 | 57 | $similarPosts = Post::whereHas('company', function ($query) use ($company) { 58 | return $query->where('company_category_id', $company->company_category_id); 59 | })->where('id', '<>', $post->id)->with('company')->take(5)->get(); 60 | return view('post.show')->with([ 61 | 'post' => $post, 62 | 'company' => $company, 63 | 'similarJobs' => $similarPosts 64 | ]); 65 | } 66 | 67 | public function edit(Post $post) 68 | { 69 | return view('post.edit', compact('post')); 70 | } 71 | 72 | public function update(Request $request, $post) 73 | { 74 | $this->requestValidate($request); 75 | $getPost = Post::findOrFail($post); 76 | 77 | $newPost = $getPost->update($request->all()); 78 | if ($newPost) { 79 | Alert::toast('Post successfully updated!', 'success'); 80 | return redirect()->route('account.authorSection'); 81 | } 82 | return redirect()->route('post.index'); 83 | } 84 | 85 | public function destroy(Post $post) 86 | { 87 | if ($post->delete()) { 88 | Alert::toast('Post successfully deleted!', 'success'); 89 | return redirect()->route('account.authorSection'); 90 | } 91 | return redirect()->back(); 92 | } 93 | 94 | protected function requestValidate($request) 95 | { 96 | return $request->validate([ 97 | 'job_title' => 'required|min:3', 98 | 'job_level' => 'required', 99 | 'vacancy_count' => 'required|int', 100 | 'employment_type' => 'required', 101 | 'job_location' => 'required', 102 | 'salary' => 'required', 103 | 'deadline' => 'required', 104 | 'education_level' => 'required', 105 | 'experience' => 'required', 106 | 'skills' => 'required', 107 | 'specifications' => 'sometimes|min:5', 108 | ]); 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /app/Http/Controllers/savedJobController.php: -------------------------------------------------------------------------------- 1 | user()->posts; 14 | return view('account.saved-job', compact('posts')); 15 | } 16 | public function store($id) 17 | { 18 | $user = User::find(auth()->user()->id); 19 | $hasPost = $user->posts()->where('id', $id)->get(); 20 | //check if the post is already saved 21 | if (count($hasPost)) { 22 | Alert::toast('You already have saved this job!', 'success'); 23 | return redirect()->back(); 24 | } else { 25 | Alert::toast('Job successfully saved!', 'success'); 26 | $user->posts()->attach($id); 27 | return redirect()->route('savedJob.index'); 28 | } 29 | } 30 | public function destroy($id) 31 | { 32 | $user = User::find(auth()->user()->id); 33 | $user->posts()->detach($id); 34 | Alert::toast('Deleted Saved job!', 'success'); 35 | return redirect()->route('savedJob.index'); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/Http/Kernel.php: -------------------------------------------------------------------------------- 1 | [ 33 | \App\Http\Middleware\EncryptCookies::class, 34 | \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 35 | \Illuminate\Session\Middleware\StartSession::class, 36 | // \Illuminate\Session\Middleware\AuthenticateSession::class, 37 | \Illuminate\View\Middleware\ShareErrorsFromSession::class, 38 | \App\Http\Middleware\VerifyCsrfToken::class, 39 | \Illuminate\Routing\Middleware\SubstituteBindings::class, 40 | ], 41 | 42 | 'api' => [ 43 | 'throttle:api', 44 | \Illuminate\Routing\Middleware\SubstituteBindings::class, 45 | ], 46 | ]; 47 | 48 | /** 49 | * The application's route middleware. 50 | * 51 | * These middleware may be assigned to groups or used individually. 52 | * 53 | * @var array 54 | */ 55 | protected $routeMiddleware = [ 56 | 'auth' => \App\Http\Middleware\Authenticate::class, 57 | 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 58 | 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 59 | 'can' => \Illuminate\Auth\Middleware\Authorize::class, 60 | 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 61 | 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, 62 | 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, 63 | 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 64 | 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 65 | 'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class, 66 | 'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class, 67 | ]; 68 | } 69 | -------------------------------------------------------------------------------- /app/Http/Middleware/Authenticate.php: -------------------------------------------------------------------------------- 1 | expectsJson()) { 18 | return route('login'); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/Http/Middleware/EncryptCookies.php: -------------------------------------------------------------------------------- 1 | check()) { 25 | return redirect(RouteServiceProvider::HOME); 26 | } 27 | } 28 | 29 | return $next($request); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrimStrings.php: -------------------------------------------------------------------------------- 1 | allSubdomainsOfApplicationUrl(), 18 | ]; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Http/Middleware/TrustProxies.php: -------------------------------------------------------------------------------- 1 | hasOne('App\Models\CompanyCategory', 'id', 'company_category_id'); 15 | } 16 | public function posts() 17 | { 18 | return $this->hasMany('App\Models\Post'); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Models/CompanyCategory.php: -------------------------------------------------------------------------------- 1 | belongsTo('App\Models\Post'); 15 | } 16 | public function user() 17 | { 18 | return $this->belongsTo('App\Models\User'); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/Models/Post.php: -------------------------------------------------------------------------------- 1 | hasMany('App\Models\User'); 25 | } 26 | 27 | public function company() 28 | { 29 | return $this->belongsTo('App\Models\Company'); 30 | } 31 | 32 | public function deadlineTimestamp() 33 | { 34 | return Carbon::parse($this->deadline)->timestamp; 35 | } 36 | 37 | public function remainingDays() 38 | { 39 | $deadline = $this->deadline; 40 | $timestamp = Carbon::parse($deadline)->timestamp - Carbon::now()->timestamp; 41 | return $timestamp; 42 | } 43 | 44 | public function getSkills() 45 | { 46 | return explode(',', $this->skills); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/Models/PostUser.php: -------------------------------------------------------------------------------- 1 | 'datetime', 43 | ]; 44 | 45 | public function company() 46 | { 47 | return $this->hasOne('App\Models\Company'); 48 | } 49 | 50 | //piviot for saved jobs 51 | public function posts() 52 | { 53 | return $this->belongsToMany('App\Models\Post'); 54 | } 55 | 56 | public function applied() 57 | { 58 | return $this->hasMany('App\Models\JobApplication'); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /app/Providers/AppServiceProvider.php: -------------------------------------------------------------------------------- 1 | 'App\Policies\ModelPolicy', 17 | ]; 18 | 19 | /** 20 | * Register any authentication / authorization services. 21 | * 22 | * @return void 23 | */ 24 | public function boot() 25 | { 26 | $this->registerPolicies(); 27 | 28 | // 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/Providers/BroadcastServiceProvider.php: -------------------------------------------------------------------------------- 1 | [ 20 | SendEmailVerificationNotification::class, 21 | ], 22 | PostViewEvent::class => [] 23 | ]; 24 | 25 | /** 26 | * Register any events for your application. 27 | * 28 | * @return void 29 | */ 30 | public function boot() 31 | { 32 | // 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/Providers/FortifyServiceProvider.php: -------------------------------------------------------------------------------- 1 | configureRateLimiting(); 39 | 40 | $this->routes(function () { 41 | Route::prefix('api') 42 | ->middleware('api') 43 | ->namespace($this->namespace) 44 | ->group(base_path('routes/api.php')); 45 | 46 | Route::middleware('web') 47 | ->namespace($this->namespace) 48 | ->group(base_path('routes/web.php')); 49 | }); 50 | } 51 | 52 | /** 53 | * Configure the rate limiters for the application. 54 | * 55 | * @return void 56 | */ 57 | protected function configureRateLimiting() 58 | { 59 | RateLimiter::for('api', function (Request $request) { 60 | return Limit::perMinute(60); 61 | }); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /artisan: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | make(Illuminate\Contracts\Console\Kernel::class); 34 | 35 | $status = $kernel->handle( 36 | $input = new Symfony\Component\Console\Input\ArgvInput, 37 | new Symfony\Component\Console\Output\ConsoleOutput 38 | ); 39 | 40 | /* 41 | |-------------------------------------------------------------------------- 42 | | Shutdown The Application 43 | |-------------------------------------------------------------------------- 44 | | 45 | | Once Artisan has finished running, we will fire off the shutdown events 46 | | so that any final work may be done by the application before we shut 47 | | down the process. This is the last thing to happen to the request. 48 | | 49 | */ 50 | 51 | $kernel->terminate($input, $status); 52 | 53 | exit($status); 54 | -------------------------------------------------------------------------------- /bootstrap/app.php: -------------------------------------------------------------------------------- 1 | singleton( 30 | Illuminate\Contracts\Http\Kernel::class, 31 | App\Http\Kernel::class 32 | ); 33 | 34 | $app->singleton( 35 | Illuminate\Contracts\Console\Kernel::class, 36 | App\Console\Kernel::class 37 | ); 38 | 39 | $app->singleton( 40 | Illuminate\Contracts\Debug\ExceptionHandler::class, 41 | App\Exceptions\Handler::class 42 | ); 43 | 44 | /* 45 | |-------------------------------------------------------------------------- 46 | | Return The Application 47 | |-------------------------------------------------------------------------- 48 | | 49 | | This script returns the application instance. The instance is given to 50 | | the calling script so we can separate the building of the instances 51 | | from the actual running of the application and sending responses. 52 | | 53 | */ 54 | 55 | return $app; 56 | -------------------------------------------------------------------------------- /bootstrap/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "laravel/laravel", 3 | "type": "project", 4 | "description": "The Laravel Framework.", 5 | "keywords": [ 6 | "framework", 7 | "laravel" 8 | ], 9 | "license": "MIT", 10 | "require": { 11 | "php": "^7.3", 12 | "fideloper/proxy": "^4.2", 13 | "fruitcake/laravel-cors": "^2.0", 14 | "guzzlehttp/guzzle": "^7.0.1", 15 | "laravel/fortify": "^1.6", 16 | "laravel/framework": "^8.0", 17 | "laravel/tinker": "^2.0", 18 | "realrashid/sweet-alert": "^3.1", 19 | "spatie/laravel-permission": "^3.17" 20 | }, 21 | "require-dev": { 22 | "facade/ignition": "^2.3.6", 23 | "fzaninotto/faker": "^1.9.1", 24 | "mockery/mockery": "^1.3.1", 25 | "nunomaduro/collision": "^5.0", 26 | "phpunit/phpunit": "^9.3" 27 | }, 28 | "config": { 29 | "optimize-autoloader": true, 30 | "preferred-install": "dist", 31 | "sort-packages": true 32 | }, 33 | "extra": { 34 | "laravel": { 35 | "dont-discover": [] 36 | } 37 | }, 38 | "autoload": { 39 | "psr-4": { 40 | "App\\": "app/", 41 | "Database\\Factories\\": "database/factories/", 42 | "Database\\Seeders\\": "database/seeders/" 43 | } 44 | }, 45 | "autoload-dev": { 46 | "psr-4": { 47 | "Tests\\": "tests/" 48 | } 49 | }, 50 | "minimum-stability": "dev", 51 | "prefer-stable": true, 52 | "scripts": { 53 | "post-autoload-dump": [ 54 | "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", 55 | "@php artisan package:discover --ansi" 56 | ], 57 | "post-root-package-install": [ 58 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" 59 | ], 60 | "post-create-project-cmd": [ 61 | "@php artisan key:generate --ansi" 62 | ] 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /config/auth.php: -------------------------------------------------------------------------------- 1 | [ 17 | 'guard' => 'web', 18 | 'passwords' => 'users', 19 | ], 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Authentication Guards 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Next, you may define every authentication guard for your application. 27 | | Of course, a great default configuration has been defined for you 28 | | here which uses session storage and the Eloquent user provider. 29 | | 30 | | All authentication drivers have a user provider. This defines how the 31 | | users are actually retrieved out of your database or other storage 32 | | mechanisms used by this application to persist your user's data. 33 | | 34 | | Supported: "session", "token" 35 | | 36 | */ 37 | 38 | 'guards' => [ 39 | 'web' => [ 40 | 'driver' => 'session', 41 | 'provider' => 'users', 42 | ], 43 | 44 | 'api' => [ 45 | 'driver' => 'token', 46 | 'provider' => 'users', 47 | 'hash' => false, 48 | ], 49 | ], 50 | 51 | /* 52 | |-------------------------------------------------------------------------- 53 | | User Providers 54 | |-------------------------------------------------------------------------- 55 | | 56 | | All authentication drivers have a user provider. This defines how the 57 | | users are actually retrieved out of your database or other storage 58 | | mechanisms used by this application to persist your user's data. 59 | | 60 | | If you have multiple user tables or models you may configure multiple 61 | | sources which represent each model / table. These sources may then 62 | | be assigned to any extra authentication guards you have defined. 63 | | 64 | | Supported: "database", "eloquent" 65 | | 66 | */ 67 | 68 | 'providers' => [ 69 | 'users' => [ 70 | 'driver' => 'eloquent', 71 | 'model' => App\Models\User::class, 72 | ], 73 | 74 | // 'users' => [ 75 | // 'driver' => 'database', 76 | // 'table' => 'users', 77 | // ], 78 | ], 79 | 80 | /* 81 | |-------------------------------------------------------------------------- 82 | | Resetting Passwords 83 | |-------------------------------------------------------------------------- 84 | | 85 | | You may specify multiple password reset configurations if you have more 86 | | than one user table or model in the application and you want to have 87 | | separate password reset settings based on the specific user types. 88 | | 89 | | The expire time is the number of minutes that the reset token should be 90 | | considered valid. This security feature keeps tokens short-lived so 91 | | they have less time to be guessed. You may change this as needed. 92 | | 93 | */ 94 | 95 | 'passwords' => [ 96 | 'users' => [ 97 | 'provider' => 'users', 98 | 'table' => 'password_resets', 99 | 'expire' => 60, 100 | 'throttle' => 60, 101 | ], 102 | ], 103 | 104 | /* 105 | |-------------------------------------------------------------------------- 106 | | Password Confirmation Timeout 107 | |-------------------------------------------------------------------------- 108 | | 109 | | Here you may define the amount of seconds before a password confirmation 110 | | times out and the user is prompted to re-enter their password via the 111 | | confirmation screen. By default, the timeout lasts for three hours. 112 | | 113 | */ 114 | 115 | 'password_timeout' => 10800, 116 | 117 | ]; 118 | -------------------------------------------------------------------------------- /config/broadcasting.php: -------------------------------------------------------------------------------- 1 | env('BROADCAST_DRIVER', 'null'), 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Broadcast Connections 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may define all of the broadcast connections that will be used 26 | | to broadcast events to other systems or over websockets. Samples of 27 | | each available type of connection are provided inside this array. 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'pusher' => [ 34 | 'driver' => 'pusher', 35 | 'key' => env('PUSHER_APP_KEY'), 36 | 'secret' => env('PUSHER_APP_SECRET'), 37 | 'app_id' => env('PUSHER_APP_ID'), 38 | 'options' => [ 39 | 'cluster' => env('PUSHER_APP_CLUSTER'), 40 | 'useTLS' => true, 41 | ], 42 | ], 43 | 44 | 'redis' => [ 45 | 'driver' => 'redis', 46 | 'connection' => 'default', 47 | ], 48 | 49 | 'log' => [ 50 | 'driver' => 'log', 51 | ], 52 | 53 | 'null' => [ 54 | 'driver' => 'null', 55 | ], 56 | 57 | ], 58 | 59 | ]; 60 | -------------------------------------------------------------------------------- /config/cache.php: -------------------------------------------------------------------------------- 1 | env('CACHE_DRIVER', 'file'), 22 | 23 | /* 24 | |-------------------------------------------------------------------------- 25 | | Cache Stores 26 | |-------------------------------------------------------------------------- 27 | | 28 | | Here you may define all of the cache "stores" for your application as 29 | | well as their drivers. You may even define multiple stores for the 30 | | same cache driver to group types of items stored in your caches. 31 | | 32 | */ 33 | 34 | 'stores' => [ 35 | 36 | 'apc' => [ 37 | 'driver' => 'apc', 38 | ], 39 | 40 | 'array' => [ 41 | 'driver' => 'array', 42 | 'serialize' => false, 43 | ], 44 | 45 | 'database' => [ 46 | 'driver' => 'database', 47 | 'table' => 'cache', 48 | 'connection' => null, 49 | ], 50 | 51 | 'file' => [ 52 | 'driver' => 'file', 53 | 'path' => storage_path('framework/cache/data'), 54 | ], 55 | 56 | 'memcached' => [ 57 | 'driver' => 'memcached', 58 | 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 59 | 'sasl' => [ 60 | env('MEMCACHED_USERNAME'), 61 | env('MEMCACHED_PASSWORD'), 62 | ], 63 | 'options' => [ 64 | // Memcached::OPT_CONNECT_TIMEOUT => 2000, 65 | ], 66 | 'servers' => [ 67 | [ 68 | 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 69 | 'port' => env('MEMCACHED_PORT', 11211), 70 | 'weight' => 100, 71 | ], 72 | ], 73 | ], 74 | 75 | 'redis' => [ 76 | 'driver' => 'redis', 77 | 'connection' => 'cache', 78 | ], 79 | 80 | 'dynamodb' => [ 81 | 'driver' => 'dynamodb', 82 | 'key' => env('AWS_ACCESS_KEY_ID'), 83 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 84 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 85 | 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), 86 | 'endpoint' => env('DYNAMODB_ENDPOINT'), 87 | ], 88 | 89 | ], 90 | 91 | /* 92 | |-------------------------------------------------------------------------- 93 | | Cache Key Prefix 94 | |-------------------------------------------------------------------------- 95 | | 96 | | When utilizing a RAM based store such as APC or Memcached, there might 97 | | be other applications utilizing the same cache. So, we'll specify a 98 | | value to get prefixed to all our keys so we can avoid collisions. 99 | | 100 | */ 101 | 102 | 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), 103 | 104 | ]; 105 | -------------------------------------------------------------------------------- /config/cors.php: -------------------------------------------------------------------------------- 1 | ['api/*'], 19 | 20 | 'allowed_methods' => ['*'], 21 | 22 | 'allowed_origins' => ['*'], 23 | 24 | 'allowed_origins_patterns' => [], 25 | 26 | 'allowed_headers' => ['*'], 27 | 28 | 'exposed_headers' => [], 29 | 30 | 'max_age' => 0, 31 | 32 | 'supports_credentials' => false, 33 | 34 | ]; 35 | -------------------------------------------------------------------------------- /config/filesystems.php: -------------------------------------------------------------------------------- 1 | env('FILESYSTEM_DRIVER', 'local'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Default Cloud Filesystem Disk 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Many applications store files both locally and in the cloud. For this 24 | | reason, you may specify a default "cloud" driver here. This driver 25 | | will be bound as the Cloud disk implementation in the container. 26 | | 27 | */ 28 | 29 | 'cloud' => env('FILESYSTEM_CLOUD', 's3'), 30 | 31 | /* 32 | |-------------------------------------------------------------------------- 33 | | Filesystem Disks 34 | |-------------------------------------------------------------------------- 35 | | 36 | | Here you may configure as many filesystem "disks" as you wish, and you 37 | | may even configure multiple disks of the same driver. Defaults have 38 | | been setup for each driver as an example of the required options. 39 | | 40 | | Supported Drivers: "local", "ftp", "sftp", "s3" 41 | | 42 | */ 43 | 44 | 'disks' => [ 45 | 46 | 'local' => [ 47 | 'driver' => 'local', 48 | 'root' => storage_path('app'), 49 | ], 50 | 51 | 'public' => [ 52 | 'driver' => 'local', 53 | 'root' => storage_path('app/public'), 54 | 'url' => env('APP_URL').'/storage', 55 | 'visibility' => 'public', 56 | ], 57 | 58 | 's3' => [ 59 | 'driver' => 's3', 60 | 'key' => env('AWS_ACCESS_KEY_ID'), 61 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 62 | 'region' => env('AWS_DEFAULT_REGION'), 63 | 'bucket' => env('AWS_BUCKET'), 64 | 'url' => env('AWS_URL'), 65 | 'endpoint' => env('AWS_ENDPOINT'), 66 | ], 67 | 68 | ], 69 | 70 | /* 71 | |-------------------------------------------------------------------------- 72 | | Symbolic Links 73 | |-------------------------------------------------------------------------- 74 | | 75 | | Here you may configure the symbolic links that will be created when the 76 | | `storage:link` Artisan command is executed. The array keys should be 77 | | the locations of the links and the values should be their targets. 78 | | 79 | */ 80 | 81 | 'links' => [ 82 | public_path('storage') => storage_path('app/public'), 83 | ], 84 | 85 | ]; 86 | -------------------------------------------------------------------------------- /config/fortify.php: -------------------------------------------------------------------------------- 1 | 'web', 20 | 21 | /* 22 | |-------------------------------------------------------------------------- 23 | | Fortify Password Broker 24 | |-------------------------------------------------------------------------- 25 | | 26 | | Here you may specify which password broker Fortify can use when a user 27 | | is resetting their password. This configured value should match one 28 | | of your password brokers setup in your "auth" configuration file. 29 | | 30 | */ 31 | 32 | 'passwords' => 'users', 33 | 34 | /* 35 | |-------------------------------------------------------------------------- 36 | | Username / Email 37 | |-------------------------------------------------------------------------- 38 | | 39 | | This value defines which model attribute should be considered as your 40 | | application's "username" field. Typically, this might be the email 41 | | address of the users but you are free to change this value here. 42 | | 43 | | Out of the box, Fortify expects forgot password and reset password 44 | | requests to have a field named 'email'. If the application uses 45 | | another name for the field you may define it below as needed. 46 | | 47 | */ 48 | 49 | 'username' => 'email', 50 | 51 | 'email' => 'email', 52 | 53 | /* 54 | |-------------------------------------------------------------------------- 55 | | Home Path 56 | |-------------------------------------------------------------------------- 57 | | 58 | | Here you may configure the path where users will get redirected during 59 | | authentication or password reset when the operations are successful 60 | | and the user is authenticated. You are free to change this value. 61 | | 62 | */ 63 | 64 | 'home' => RouteServiceProvider::HOME, 65 | 66 | /* 67 | |-------------------------------------------------------------------------- 68 | | Fortify Routes Middleware 69 | |-------------------------------------------------------------------------- 70 | | 71 | | Here you may specify which middleware Fortify will assign to the routes 72 | | that it registers with the application. If necessary, you may change 73 | | these middleware but typically this provided default is preferred. 74 | | 75 | */ 76 | 77 | 'middleware' => ['web'], 78 | 79 | /* 80 | |-------------------------------------------------------------------------- 81 | | Rate Limiting 82 | |-------------------------------------------------------------------------- 83 | | 84 | | By default, Fortify will throttle logins to five requests per minute for 85 | | every email and IP address combination. However, if you would like to 86 | | specify a custom rate limiter to call then you may specify it here. 87 | | 88 | */ 89 | 90 | 'limiters' => [ 91 | 'login' => null, 92 | ], 93 | 94 | /* 95 | |-------------------------------------------------------------------------- 96 | | Features 97 | |-------------------------------------------------------------------------- 98 | | 99 | | Some of the Fortify features are optional. You may disable the features 100 | | by removing them from this array. You're free to only remove some of 101 | | these features or you can even remove all of these if you need to. 102 | | 103 | */ 104 | 105 | 'features' => [ 106 | Features::registration(), 107 | Features::resetPasswords(), 108 | // Features::emailVerification(), 109 | Features::updateProfileInformation(), 110 | Features::updatePasswords(), 111 | Features::twoFactorAuthentication([ 112 | 'confirmPassword' => true, 113 | ]), 114 | ], 115 | 116 | ]; 117 | -------------------------------------------------------------------------------- /config/hashing.php: -------------------------------------------------------------------------------- 1 | 'bcrypt', 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Bcrypt Options 23 | |-------------------------------------------------------------------------- 24 | | 25 | | Here you may specify the configuration options that should be used when 26 | | passwords are hashed using the Bcrypt algorithm. This will allow you 27 | | to control the amount of time it takes to hash the given password. 28 | | 29 | */ 30 | 31 | 'bcrypt' => [ 32 | 'rounds' => env('BCRYPT_ROUNDS', 10), 33 | ], 34 | 35 | /* 36 | |-------------------------------------------------------------------------- 37 | | Argon Options 38 | |-------------------------------------------------------------------------- 39 | | 40 | | Here you may specify the configuration options that should be used when 41 | | passwords are hashed using the Argon algorithm. These will allow you 42 | | to control the amount of time it takes to hash the given password. 43 | | 44 | */ 45 | 46 | 'argon' => [ 47 | 'memory' => 1024, 48 | 'threads' => 2, 49 | 'time' => 2, 50 | ], 51 | 52 | ]; 53 | -------------------------------------------------------------------------------- /config/logging.php: -------------------------------------------------------------------------------- 1 | env('LOG_CHANNEL', 'stack'), 21 | 22 | /* 23 | |-------------------------------------------------------------------------- 24 | | Log Channels 25 | |-------------------------------------------------------------------------- 26 | | 27 | | Here you may configure the log channels for your application. Out of 28 | | the box, Laravel uses the Monolog PHP logging library. This gives 29 | | you a variety of powerful log handlers / formatters to utilize. 30 | | 31 | | Available Drivers: "single", "daily", "slack", "syslog", 32 | | "errorlog", "monolog", 33 | | "custom", "stack" 34 | | 35 | */ 36 | 37 | 'channels' => [ 38 | 'stack' => [ 39 | 'driver' => 'stack', 40 | 'channels' => ['single'], 41 | 'ignore_exceptions' => false, 42 | ], 43 | 44 | 'single' => [ 45 | 'driver' => 'single', 46 | 'path' => storage_path('logs/laravel.log'), 47 | 'level' => 'debug', 48 | ], 49 | 50 | 'daily' => [ 51 | 'driver' => 'daily', 52 | 'path' => storage_path('logs/laravel.log'), 53 | 'level' => 'debug', 54 | 'days' => 14, 55 | ], 56 | 57 | 'slack' => [ 58 | 'driver' => 'slack', 59 | 'url' => env('LOG_SLACK_WEBHOOK_URL'), 60 | 'username' => 'Laravel Log', 61 | 'emoji' => ':boom:', 62 | 'level' => 'critical', 63 | ], 64 | 65 | 'papertrail' => [ 66 | 'driver' => 'monolog', 67 | 'level' => 'debug', 68 | 'handler' => SyslogUdpHandler::class, 69 | 'handler_with' => [ 70 | 'host' => env('PAPERTRAIL_URL'), 71 | 'port' => env('PAPERTRAIL_PORT'), 72 | ], 73 | ], 74 | 75 | 'stderr' => [ 76 | 'driver' => 'monolog', 77 | 'handler' => StreamHandler::class, 78 | 'formatter' => env('LOG_STDERR_FORMATTER'), 79 | 'with' => [ 80 | 'stream' => 'php://stderr', 81 | ], 82 | ], 83 | 84 | 'syslog' => [ 85 | 'driver' => 'syslog', 86 | 'level' => 'debug', 87 | ], 88 | 89 | 'errorlog' => [ 90 | 'driver' => 'errorlog', 91 | 'level' => 'debug', 92 | ], 93 | 94 | 'null' => [ 95 | 'driver' => 'monolog', 96 | 'handler' => NullHandler::class, 97 | ], 98 | 99 | 'emergency' => [ 100 | 'path' => storage_path('logs/laravel.log'), 101 | ], 102 | ], 103 | 104 | ]; 105 | -------------------------------------------------------------------------------- /config/mail.php: -------------------------------------------------------------------------------- 1 | env('MAIL_MAILER', 'smtp'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Mailer Configurations 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may configure all of the mailers used by your application plus 24 | | their respective settings. Several examples have been configured for 25 | | you and you are free to add your own as your application requires. 26 | | 27 | | Laravel supports a variety of mail "transport" drivers to be used while 28 | | sending an e-mail. You will specify which one you are using for your 29 | | mailers below. You are free to add additional mailers as required. 30 | | 31 | | Supported: "smtp", "sendmail", "mailgun", "ses", 32 | | "postmark", "log", "array" 33 | | 34 | */ 35 | 36 | 'mailers' => [ 37 | 'smtp' => [ 38 | 'transport' => 'smtp', 39 | 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), 40 | 'port' => env('MAIL_PORT', 587), 41 | 'encryption' => env('MAIL_ENCRYPTION', 'tls'), 42 | 'username' => env('MAIL_USERNAME'), 43 | 'password' => env('MAIL_PASSWORD'), 44 | 'timeout' => null, 45 | 'auth_mode' => null, 46 | ], 47 | 48 | 'ses' => [ 49 | 'transport' => 'ses', 50 | ], 51 | 52 | 'mailgun' => [ 53 | 'transport' => 'mailgun', 54 | ], 55 | 56 | 'postmark' => [ 57 | 'transport' => 'postmark', 58 | ], 59 | 60 | 'sendmail' => [ 61 | 'transport' => 'sendmail', 62 | 'path' => '/usr/sbin/sendmail -bs', 63 | ], 64 | 65 | 'log' => [ 66 | 'transport' => 'log', 67 | 'channel' => env('MAIL_LOG_CHANNEL'), 68 | ], 69 | 70 | 'array' => [ 71 | 'transport' => 'array', 72 | ], 73 | ], 74 | 75 | /* 76 | |-------------------------------------------------------------------------- 77 | | Global "From" Address 78 | |-------------------------------------------------------------------------- 79 | | 80 | | You may wish for all e-mails sent by your application to be sent from 81 | | the same address. Here, you may specify a name and address that is 82 | | used globally for all e-mails that are sent by your application. 83 | | 84 | */ 85 | 86 | 'from' => [ 87 | 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 88 | 'name' => env('MAIL_FROM_NAME', 'Example'), 89 | ], 90 | 91 | /* 92 | |-------------------------------------------------------------------------- 93 | | Markdown Mail Settings 94 | |-------------------------------------------------------------------------- 95 | | 96 | | If you are using Markdown based email rendering, you may configure your 97 | | theme and component paths here, allowing you to customize the design 98 | | of the emails. Or, you may simply stick with the Laravel defaults! 99 | | 100 | */ 101 | 102 | 'markdown' => [ 103 | 'theme' => 'default', 104 | 105 | 'paths' => [ 106 | resource_path('views/vendor/mail'), 107 | ], 108 | ], 109 | 110 | ]; 111 | -------------------------------------------------------------------------------- /config/queue.php: -------------------------------------------------------------------------------- 1 | env('QUEUE_CONNECTION', 'sync'), 17 | 18 | /* 19 | |-------------------------------------------------------------------------- 20 | | Queue Connections 21 | |-------------------------------------------------------------------------- 22 | | 23 | | Here you may configure the connection information for each server that 24 | | is used by your application. A default configuration has been added 25 | | for each back-end shipped with Laravel. You are free to add more. 26 | | 27 | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" 28 | | 29 | */ 30 | 31 | 'connections' => [ 32 | 33 | 'sync' => [ 34 | 'driver' => 'sync', 35 | ], 36 | 37 | 'database' => [ 38 | 'driver' => 'database', 39 | 'table' => 'jobs', 40 | 'queue' => 'default', 41 | 'retry_after' => 90, 42 | ], 43 | 44 | 'beanstalkd' => [ 45 | 'driver' => 'beanstalkd', 46 | 'host' => 'localhost', 47 | 'queue' => 'default', 48 | 'retry_after' => 90, 49 | 'block_for' => 0, 50 | ], 51 | 52 | 'sqs' => [ 53 | 'driver' => 'sqs', 54 | 'key' => env('AWS_ACCESS_KEY_ID'), 55 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 56 | 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 57 | 'queue' => env('SQS_QUEUE', 'your-queue-name'), 58 | 'suffix' => env('SQS_SUFFIX'), 59 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 60 | ], 61 | 62 | 'redis' => [ 63 | 'driver' => 'redis', 64 | 'connection' => 'default', 65 | 'queue' => env('REDIS_QUEUE', 'default'), 66 | 'retry_after' => 90, 67 | 'block_for' => null, 68 | ], 69 | 70 | ], 71 | 72 | /* 73 | |-------------------------------------------------------------------------- 74 | | Failed Queue Jobs 75 | |-------------------------------------------------------------------------- 76 | | 77 | | These options configure the behavior of failed queue job logging so you 78 | | can control which database and table are used to store the jobs that 79 | | have failed. You may change them to any database / table you wish. 80 | | 81 | */ 82 | 83 | 'failed' => [ 84 | 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), 85 | 'database' => env('DB_CONNECTION', 'mysql'), 86 | 'table' => 'failed_jobs', 87 | ], 88 | 89 | ]; 90 | -------------------------------------------------------------------------------- /config/services.php: -------------------------------------------------------------------------------- 1 | [ 18 | 'domain' => env('MAILGUN_DOMAIN'), 19 | 'secret' => env('MAILGUN_SECRET'), 20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), 21 | ], 22 | 23 | 'postmark' => [ 24 | 'token' => env('POSTMARK_TOKEN'), 25 | ], 26 | 27 | 'ses' => [ 28 | 'key' => env('AWS_ACCESS_KEY_ID'), 29 | 'secret' => env('AWS_SECRET_ACCESS_KEY'), 30 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 31 | ], 32 | 33 | ]; 34 | -------------------------------------------------------------------------------- /config/view.php: -------------------------------------------------------------------------------- 1 | [ 17 | resource_path('views'), 18 | ], 19 | 20 | /* 21 | |-------------------------------------------------------------------------- 22 | | Compiled View Path 23 | |-------------------------------------------------------------------------- 24 | | 25 | | This option determines where all the compiled Blade templates will be 26 | | stored for your application. Typically, this is within the storage 27 | | directory. However, as usual, you are free to change this value. 28 | | 29 | */ 30 | 31 | 'compiled' => env( 32 | 'VIEW_COMPILED_PATH', 33 | realpath(storage_path('framework/views')) 34 | ), 35 | 36 | ]; 37 | -------------------------------------------------------------------------------- /database/.gitignore: -------------------------------------------------------------------------------- 1 | *.sqlite 2 | *.sqlite-journal 3 | -------------------------------------------------------------------------------- /database/factories/CompanyFactory.php: -------------------------------------------------------------------------------- 1 | 2, //default author by user seeder class 26 | 'company_category_id' => 1, 27 | 'logo' => 'images/companies/logos/', 28 | 'title' => 'Web App developer', 29 | 'description' => 'This company Pvt Ltd is the company specialized to help organizations with financial technology solutions. We provide solutions such comprehensive mobile and online payment solutions and gateway facilitating services. We facilitate in online transaction settlement service to merchants and their banks to be able to accept/acquire payments from third party payment sources. We provide technology and solutions for acquiring payment from 3rd party wallets, smart wallets solutions, merchant management solutions and host of other solutions..', 30 | 'website' => 'https://www.companywebsite.com', 31 | 'cover_img' => 'nocover', 32 | 'created_at' => date("Y-m-d H:i:s"), 33 | 'updated_at' => date("Y-m-d H:i:s"), 34 | ]; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /database/factories/PostFactory.php: -------------------------------------------------------------------------------- 1 | 'Marketing manager', 26 | 'job_level' => 'Senior level', 27 | 'vacancy_count' => rand(2, 10), // password 28 | 'employment_type' => 'Full time', 29 | 'job_location' => 'kathmandu-18,Nepal', 30 | 'deadline' => date("Y-m-d H:i:s", strtotime(date("Y-m-d H:i:s") . " +2 days")), 31 | 'education_level' => 'Bachelors', 32 | 'experience' => '2 years', 33 | 'salary' => '20k - 50k', 34 | 'skills' => 'Team player, Active listener', 35 | 'specifications' => '

', 36 | ]; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /database/factories/UserFactory.php: -------------------------------------------------------------------------------- 1 | $this->faker->name, 27 | 'email' => $this->faker->unique()->safeEmail, 28 | 'email_verified_at' => now(), 29 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 30 | 'remember_token' => Str::random(10), 31 | ]; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_000000_create_users_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('name'); 19 | $table->string('email')->unique(); 20 | $table->timestamp('email_verified_at')->nullable(); 21 | $table->string('password'); 22 | $table->rememberToken(); 23 | $table->timestamps(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('users'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_100000_create_password_resets_table.php: -------------------------------------------------------------------------------- 1 | string('email')->index(); 18 | $table->string('token'); 19 | $table->timestamp('created_at')->nullable(); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::dropIfExists('password_resets'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/migrations/2014_10_12_200000_add_two_factor_columns_to_users_table.php: -------------------------------------------------------------------------------- 1 | text('two_factor_secret') 18 | ->after('password') 19 | ->nullable(); 20 | 21 | $table->text('two_factor_recovery_codes') 22 | ->after('two_factor_secret') 23 | ->nullable(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::table('users', function (Blueprint $table) { 35 | $table->dropColumn('two_factor_secret', 'two_factor_recovery_codes'); 36 | }); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /database/migrations/2019_08_19_000000_create_failed_jobs_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('uuid')->unique(); 19 | $table->text('connection'); 20 | $table->text('queue'); 21 | $table->longText('payload'); 22 | $table->longText('exception'); 23 | $table->timestamp('failed_at')->useCurrent(); 24 | }); 25 | } 26 | 27 | /** 28 | * Reverse the migrations. 29 | * 30 | * @return void 31 | */ 32 | public function down() 33 | { 34 | Schema::dropIfExists('failed_jobs'); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /database/migrations/2020_10_09_104919_create_permission_tables.php: -------------------------------------------------------------------------------- 1 | bigIncrements('id'); 25 | $table->string('name'); 26 | $table->string('guard_name'); 27 | $table->timestamps(); 28 | }); 29 | 30 | Schema::create($tableNames['roles'], function (Blueprint $table) { 31 | $table->bigIncrements('id'); 32 | $table->string('name'); 33 | $table->string('guard_name'); 34 | $table->timestamps(); 35 | }); 36 | 37 | Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames) { 38 | $table->unsignedBigInteger('permission_id'); 39 | 40 | $table->string('model_type'); 41 | $table->unsignedBigInteger($columnNames['model_morph_key']); 42 | $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index'); 43 | 44 | $table->foreign('permission_id') 45 | ->references('id') 46 | ->on($tableNames['permissions']) 47 | ->onDelete('cascade'); 48 | 49 | $table->primary(['permission_id', $columnNames['model_morph_key'], 'model_type'], 50 | 'model_has_permissions_permission_model_type_primary'); 51 | }); 52 | 53 | Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames) { 54 | $table->unsignedBigInteger('role_id'); 55 | 56 | $table->string('model_type'); 57 | $table->unsignedBigInteger($columnNames['model_morph_key']); 58 | $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index'); 59 | 60 | $table->foreign('role_id') 61 | ->references('id') 62 | ->on($tableNames['roles']) 63 | ->onDelete('cascade'); 64 | 65 | $table->primary(['role_id', $columnNames['model_morph_key'], 'model_type'], 66 | 'model_has_roles_role_model_type_primary'); 67 | }); 68 | 69 | Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) { 70 | $table->unsignedBigInteger('permission_id'); 71 | $table->unsignedBigInteger('role_id'); 72 | 73 | $table->foreign('permission_id') 74 | ->references('id') 75 | ->on($tableNames['permissions']) 76 | ->onDelete('cascade'); 77 | 78 | $table->foreign('role_id') 79 | ->references('id') 80 | ->on($tableNames['roles']) 81 | ->onDelete('cascade'); 82 | 83 | $table->primary(['permission_id', 'role_id'], 'role_has_permissions_permission_id_role_id_primary'); 84 | }); 85 | 86 | app('cache') 87 | ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null) 88 | ->forget(config('permission.cache.key')); 89 | } 90 | 91 | /** 92 | * Reverse the migrations. 93 | * 94 | * @return void 95 | */ 96 | public function down() 97 | { 98 | $tableNames = config('permission.table_names'); 99 | 100 | if (empty($tableNames)) { 101 | throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.'); 102 | } 103 | 104 | Schema::drop($tableNames['role_has_permissions']); 105 | Schema::drop($tableNames['model_has_roles']); 106 | Schema::drop($tableNames['model_has_permissions']); 107 | Schema::drop($tableNames['roles']); 108 | Schema::drop($tableNames['permissions']); 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /database/migrations/2020_10_09_144234_create_company_categories_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->string('category_name'); 19 | }); 20 | } 21 | 22 | /** 23 | * Reverse the migrations. 24 | * 25 | * @return void 26 | */ 27 | public function down() 28 | { 29 | Schema::dropIfExists('company_categories'); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /database/migrations/2020_10_09_145555_create_companies_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->unsignedBigInteger('user_id'); 19 | $table->unsignedInteger('company_category_id'); 20 | $table->string('logo'); 21 | $table->string('title', 50); 22 | $table->text('description'); 23 | $table->string('website'); 24 | $table->string('cover_img'); 25 | $table->timestamps(); 26 | }); 27 | } 28 | 29 | /** 30 | * Reverse the migrations. 31 | * 32 | * @return void 33 | */ 34 | public function down() 35 | { 36 | Schema::dropIfExists('companies'); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /database/migrations/2020_10_11_024354_create_posts_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->unsignedBigInteger('company_id'); 19 | $table->string('job_title', 50); 20 | $table->string('job_level', 20); 21 | $table->unsignedSmallInteger('vacancy_count'); 22 | $table->string('employment_type'); 23 | $table->string('salary', 30); 24 | $table->string('job_location'); 25 | $table->timestamp('deadline'); 26 | $table->string('education_level'); 27 | $table->string('experience'); 28 | $table->string('skills'); 29 | $table->text('specifications'); 30 | $table->unsignedMediumInteger('views')->default(1); 31 | $table->timestamps(); 32 | }); 33 | } 34 | 35 | /** 36 | * Reverse the migrations. 37 | * 38 | * @return void 39 | */ 40 | public function down() 41 | { 42 | Schema::dropIfExists('posts'); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /database/migrations/2020_10_12_133736_create_post_user_table.php: -------------------------------------------------------------------------------- 1 | integer('post_id'); 18 | $table->integer('user_id'); 19 | $table->primary(['post_id', 'user_id']); 20 | }); 21 | } 22 | 23 | /** 24 | * Reverse the migrations. 25 | * 26 | * @return void 27 | */ 28 | public function down() 29 | { 30 | Schema::dropIfExists('post_user'); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /database/migrations/2020_10_13_111952_create_job_applications_table.php: -------------------------------------------------------------------------------- 1 | id(); 18 | $table->unsignedBigInteger('user_id'); 19 | $table->unsignedBigInteger('post_id'); 20 | $table->timestamps(); 21 | }); 22 | } 23 | 24 | /** 25 | * Reverse the migrations. 26 | * 27 | * @return void 28 | */ 29 | public function down() 30 | { 31 | Schema::dropIfExists('job_applications'); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/seeders/CategorySeeder.php: -------------------------------------------------------------------------------- 1 | insert([ 29 | 'category_name' => $category 30 | ]); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /database/seeders/CompanySeeder.php: -------------------------------------------------------------------------------- 1 | 'Php laravel developer', 21 | 'level' => 'Senior level', 22 | 'employment' => 'full time', 23 | 'education' => 'bachelors', 24 | ], [ 25 | 'title' => 'Marketing Expert', 26 | 'level' => 'Senior level', 27 | 'employment' => 'full time', 28 | 'education' => 'bachelors', 29 | ], [ 30 | 'title' => 'Professional designer', 31 | 'level' => 'Top level', 32 | 'employment' => 'Part time', 33 | 'education' => 'bachelors', 34 | ], [ 35 | 'title' => 'Dotnet programmer', 36 | 'level' => 'Senior level', 37 | 'employment' => 'full time', 38 | 'education' => 'high school', 39 | ], [ 40 | 'title' => 'Sales Executive', 41 | 'level' => 'Senior level', 42 | 'employment' => 'Part time', 43 | 'education' => 'bachelors', 44 | ], [ 45 | 'title' => 'Maths Teacher', 46 | 'level' => 'Senior level', 47 | 'employment' => 'full time', 48 | 'education' => 'master', 49 | ], 50 | ]; 51 | //user id is 2 that has author role 52 | $company = Company::factory()->create([ 53 | 'company_category_id' => 1, 54 | 'title' => 'Gabrato company', 55 | 'logo' => 'images/logo/7.png', 56 | ]); 57 | foreach ($details as $index => $detail) { 58 | $post = Post::factory()->create([ 59 | 'company_id' => $company->id, 60 | 'job_title' => $detail['title'], 61 | 'job_level' => $detail['level'], 62 | 'employment_type' => $detail['employment'], 63 | 'education_level' => $detail['education'], 64 | ]); 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /database/seeders/DatabaseSeeder.php: -------------------------------------------------------------------------------- 1 | call([ 17 | CategorySeeder::class, 18 | RolePermissionSeeder::class, 19 | UserSeeder::class, 20 | CompanySeeder::class 21 | ]); 22 | // \App\Models\User::factory(10)->create(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /database/seeders/RolePermissionSeeder.php: -------------------------------------------------------------------------------- 1 | insert([ 22 | 'name' => $role, 23 | 'guard_name' => 'web', 24 | 'created_at' => date("Y-m-d H:i:s"), 25 | 'updated_at' => date("Y-m-d H:i:s"), 26 | ]); 27 | } 28 | 29 | $permissions = [ 30 | 'view-dashboard', 'create-post', 'edit-post', 'delete-post', 31 | 'manage-authors', 'author-section', 'create-category', 'edit-category', 'delete-category', 32 | 'create-company', 'edit-company', 'delete-company' 33 | ]; 34 | foreach ($permissions as $permission) { 35 | DB::table('permissions')->insert([ 36 | 'name' => $permission, 37 | 'guard_name' => 'web', 38 | 'created_at' => date("Y-m-d H:i:s"), 39 | 'updated_at' => date("Y-m-d H:i:s"), 40 | ]); 41 | } 42 | 43 | $role = Role::findByName('admin'); 44 | $permissions = Permission::all()->pluck('name'); 45 | foreach ($permissions as $permission) { 46 | $getPermission = Permission::findByName($permission); 47 | $role->givePermissionTo($getPermission); 48 | } 49 | 50 | $role = Role::findByName('author'); 51 | $permissions = ['create-post', 'edit-post', 'delete-post', 'author-section', 'create-company', 'edit-company', 'delete-company']; 52 | foreach ($permissions as $permission) { 53 | $getPermission = Permission::findByName($permission); 54 | $role->givePermissionTo($getPermission); 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /database/seeders/UserSeeder.php: -------------------------------------------------------------------------------- 1 | 'admin user', 24 | 'email' => 'admin@admin.com', 25 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 26 | 'role' => 'admin' 27 | ], 28 | 29 | [ 30 | 'name' => 'author user', 31 | 'email' => 'author@author.com', 32 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 33 | 'role' => 'author' 34 | ], 35 | 36 | [ 37 | 'name' => 'simple user', 38 | 'email' => 'user@user.com', 39 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password 40 | 'role' => 'user' 41 | ], 42 | ]; 43 | 44 | foreach ($factoryUsers as $user) { 45 | $newUser = User::factory()->create([ 46 | 'name' => $user['name'], 47 | 'email' => $user['email'], 48 | 'password' => $user['password'], 49 | ]); 50 | $newUser->assignRole($user['role']); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "dev": "npm run development", 5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", 6 | "watch": "npm run development -- --watch", 7 | "watch-poll": "npm run watch -- --watch-poll", 8 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --disable-host-check --config=node_modules/laravel-mix/setup/webpack.config.js", 9 | "prod": "npm run production", 10 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" 11 | }, 12 | "devDependencies": { 13 | "axios": "^0.20", 14 | "cross-env": "^7.0", 15 | "laravel-mix": "^5.0.7", 16 | "lodash": "^4.17.20", 17 | "resolve-url-loader": "^3.1.1", 18 | "sass": "^1.27.0", 19 | "sass-loader": "^10.0.3", 20 | "vue-template-compiler": "^2.6.12" 21 | }, 22 | "dependencies": { 23 | "bootstrap": "^4.5.3", 24 | "jquery": "^3.5.1", 25 | "laravel-vue-pagination": "^2.3.1", 26 | "popper.js": "^1.16.1", 27 | "vue": "^2.6.12", 28 | "vue-progressbar": "^0.7.5", 29 | "vue-router": "^3.4.7" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | ./tests/Unit 10 | 11 | 12 | ./tests/Feature 13 | 14 | 15 | 16 | 17 | ./app 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /public/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | 3 | Options -MultiViews -Indexes 4 | 5 | 6 | RewriteEngine On 7 | 8 | # Handle Authorization Header 9 | RewriteCond %{HTTP:Authorization} . 10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 11 | 12 | # Redirect Trailing Slashes If Not A Folder... 13 | RewriteCond %{REQUEST_FILENAME} !-d 14 | RewriteCond %{REQUEST_URI} (.+)/$ 15 | RewriteRule ^ %1 [L,R=301] 16 | 17 | # Send Requests To Front Controller... 18 | RewriteCond %{REQUEST_FILENAME} !-d 19 | RewriteCond %{REQUEST_FILENAME} !-f 20 | RewriteRule ^ index.php [L] 21 | 22 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/favicon.ico -------------------------------------------------------------------------------- /public/images/companies/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/companies/banner.jpg -------------------------------------------------------------------------------- /public/images/companies/medical.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/companies/medical.jpg -------------------------------------------------------------------------------- /public/images/companies/muncha.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/companies/muncha.jpg -------------------------------------------------------------------------------- /public/images/companies/nocover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/companies/nocover.jpg -------------------------------------------------------------------------------- /public/images/companies/square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/companies/square.jpg -------------------------------------------------------------------------------- /public/images/companies/vertisk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/companies/vertisk.jpg -------------------------------------------------------------------------------- /public/images/login-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/login-background.png -------------------------------------------------------------------------------- /public/images/login-bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/login-bg.jpg -------------------------------------------------------------------------------- /public/images/logo/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/logo/1.png -------------------------------------------------------------------------------- /public/images/logo/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/logo/2.png -------------------------------------------------------------------------------- /public/images/logo/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/logo/3.png -------------------------------------------------------------------------------- /public/images/logo/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/logo/4.png -------------------------------------------------------------------------------- /public/images/logo/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/logo/5.png -------------------------------------------------------------------------------- /public/images/logo/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/logo/6.png -------------------------------------------------------------------------------- /public/images/logo/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/logo/7.png -------------------------------------------------------------------------------- /public/images/logo/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/logo/8.png -------------------------------------------------------------------------------- /public/images/logo/joblister.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/logo/joblister.png -------------------------------------------------------------------------------- /public/images/search-not-found.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/search-not-found.png -------------------------------------------------------------------------------- /public/images/user-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/user-profile.png -------------------------------------------------------------------------------- /public/images/user-profile2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/public/images/user-profile2.png -------------------------------------------------------------------------------- /public/index.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class); 50 | 51 | $response = tap($kernel->handle( 52 | $request = Request::capture() 53 | ))->send(); 54 | 55 | $kernel->terminate($request, $response); 56 | -------------------------------------------------------------------------------- /public/mix-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "/js/app.js": "/js/app.js", 3 | "/css/app.css": "/css/app.css" 4 | } 5 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: 3 | -------------------------------------------------------------------------------- /public/web.config: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /resources/js/app.js: -------------------------------------------------------------------------------- 1 | require("./bootstrap"); 2 | 3 | window.Vue = require("vue"); 4 | 5 | require("./progressbar"); 6 | 7 | import VueRouter from "vue-router"; 8 | Vue.use(VueRouter); 9 | 10 | import routes from "./routes"; 11 | const router = new VueRouter({ 12 | routes, 13 | mode: "hash" 14 | }); 15 | 16 | Vue.component( 17 | "app-component", 18 | require("./components/AppComponent.vue").default 19 | ); 20 | Vue.component("pagination", require("laravel-vue-pagination")); 21 | 22 | const app = new Vue({ 23 | el: "#app", 24 | router 25 | }); 26 | -------------------------------------------------------------------------------- /resources/js/bootstrap.js: -------------------------------------------------------------------------------- 1 | window._ = require("lodash"); 2 | 3 | /** 4 | * We'll load the axios HTTP library which allows us to easily issue requests 5 | * to our Laravel back-end. This library automatically handles sending the 6 | * CSRF token as a header based on the value of the "XSRF" token cookie. 7 | */ 8 | 9 | try { 10 | window.Popper = require("popper.js").default; 11 | window.$ = window.jQuery = require("jquery"); 12 | 13 | require("bootstrap"); 14 | } catch (e) {} 15 | 16 | window.axios = require("axios"); 17 | 18 | window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; 19 | 20 | /** 21 | * Echo exposes an expressive API for subscribing to channels and listening 22 | * for events that are broadcast by Laravel. Echo and event broadcasting 23 | * allows your team to easily build robust real-time web applications. 24 | */ 25 | 26 | // import Echo from 'laravel-echo'; 27 | 28 | // window.Pusher = require('pusher-js'); 29 | 30 | // window.Echo = new Echo({ 31 | // broadcaster: 'pusher', 32 | // key: process.env.MIX_PUSHER_APP_KEY, 33 | // cluster: process.env.MIX_PUSHER_APP_CLUSTER, 34 | // forceTLS: true 35 | // }); 36 | -------------------------------------------------------------------------------- /resources/js/components/AppComponent.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 25 | 26 | -------------------------------------------------------------------------------- /resources/js/components/SearchBar.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 80 | 81 | > 86 | -------------------------------------------------------------------------------- /resources/js/components/SearchResult.vue: -------------------------------------------------------------------------------- 1 | 88 | 89 | 95 | 96 | -------------------------------------------------------------------------------- /resources/js/pages/JobCategory.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 51 | 52 | -------------------------------------------------------------------------------- /resources/js/pages/JobTitle.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 48 | 49 | -------------------------------------------------------------------------------- /resources/js/pages/Organization.vue: -------------------------------------------------------------------------------- 1 | 26 | 27 | 51 | 52 | -------------------------------------------------------------------------------- /resources/js/progressbar.js: -------------------------------------------------------------------------------- 1 | import VueProgressBar from "vue-progressbar"; 2 | 3 | Vue.use(VueProgressBar, { 4 | color: "rgb(143, 255, 199)", 5 | failedColor: "red", 6 | thickness: "3px", 7 | location: "top", 8 | transition: { 9 | speed: ".8s", 10 | opacity: "1s", 11 | termination: 2000 12 | } 13 | }); 14 | -------------------------------------------------------------------------------- /resources/js/routes.js: -------------------------------------------------------------------------------- 1 | import JobComponent from "./components/JobComponent"; 2 | import Organization from "./pages/Organization"; 3 | import JobCategory from "./pages/JobCategory"; 4 | import JobTitle from "./pages/JobTitle"; 5 | 6 | const routes = [ 7 | { 8 | path: "/", 9 | component: JobComponent 10 | }, 11 | { 12 | path: "/jobs-by-organization", 13 | component: Organization 14 | }, 15 | { 16 | path: "/jobs-by-title", 17 | component: JobTitle 18 | }, 19 | { 20 | path: "/jobs-by-category", 21 | component: JobCategory 22 | } 23 | ]; 24 | export default routes; 25 | -------------------------------------------------------------------------------- /resources/lang/en/auth.php: -------------------------------------------------------------------------------- 1 | 'These credentials do not match our records.', 17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/en/pagination.php: -------------------------------------------------------------------------------- 1 | '« Previous', 17 | 'next' => 'Next »', 18 | 19 | ]; 20 | -------------------------------------------------------------------------------- /resources/lang/en/passwords.php: -------------------------------------------------------------------------------- 1 | 'Your password has been reset!', 17 | 'sent' => 'We have emailed your password reset link!', 18 | 'throttled' => 'Please wait before retrying.', 19 | 'token' => 'This password reset token is invalid.', 20 | 'user' => "We can't find a user with that email address.", 21 | 22 | ]; 23 | -------------------------------------------------------------------------------- /resources/sass/_default.scss: -------------------------------------------------------------------------------- 1 | @import "inc/roboto-font"; 2 | *, 3 | *::before, 4 | *::after { 5 | padding: 0; 6 | margin: 0; 7 | box-sizing: border-box; 8 | } 9 | 10 | // Typography 11 | $font-family-sans-serif: "Roboto", sans-serif; 12 | $font-size-base: 0.9rem; 13 | $line-height-base: 1.6; 14 | 15 | //defaults 16 | h1, 17 | h2, 18 | h3, 19 | h4, 20 | h5, 21 | h6 { 22 | padding: 0; 23 | margin: 0; 24 | } 25 | p { 26 | padding: 0; 27 | margin: 0; 28 | } 29 | div { 30 | padding: 0; 31 | margin: 0; 32 | } 33 | a { 34 | color: inherit; 35 | &:hover { 36 | text-decoration: none; 37 | } 38 | } 39 | //line-divider 40 | .line-divider { 41 | height: 2px; 42 | width: 100%; 43 | background-color: #ddd; 44 | margin: 4px 0; 45 | } 46 | 47 | //variables 48 | $primary-color: #185a91; 49 | $primary-hover: #023966; 50 | $primary-light: #e0f7f8; 51 | $danger-color: #d93c23; 52 | $primary-grey: #888; 53 | $body-bg: #f8f9fa; 54 | $std-padding: 0.25rem 0.5rem; 55 | 56 | .primary-bg { 57 | background-color: $primary-color; 58 | } 59 | 60 | //custom icons 61 | .fa-primary { 62 | color: $primary-color; 63 | } 64 | .fa-secondary { 65 | color: $primary-light; 66 | } 67 | 68 | //locals 69 | .primary-link { 70 | color: $primary-color; 71 | &:hover { 72 | color: $primary-light; 73 | text-decoration: none; 74 | } 75 | } 76 | .secondary-link { 77 | color: $primary-hover; 78 | &:hover { 79 | color: $primary-hover; 80 | text-decoration: none; 81 | } 82 | } 83 | 84 | body { 85 | background: $body-bg; 86 | max-width: 100vw; 87 | overflow-x: hidden; 88 | } 89 | 90 | button { 91 | margin: 0; 92 | padding: 0; 93 | border: 1px solid transparent; 94 | box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); 95 | padding: 0.25rem 0.5rem; 96 | border-radius: 2px; 97 | } 98 | .primary-btn { 99 | background-color: $primary-color; 100 | color: white; 101 | transition: background-color 0.25s ease; 102 | padding: 6px 8px; 103 | border: 1px solid $primary-color; 104 | border-radius: 2px; 105 | &:hover { 106 | background-color: white; 107 | color: $primary-hover; 108 | } 109 | } 110 | .primary-outline-btn { 111 | background-color: white; 112 | color: $primary-color; 113 | transition: background-color 0.25s ease; 114 | padding: 6px 8px; 115 | border: 1px solid $primary-color; 116 | border-radius: 2px; 117 | &:hover { 118 | background-color: $primary-color; 119 | color: white; 120 | } 121 | } 122 | 123 | .secondary-btn { 124 | background-color: $primary-color; 125 | color: white; 126 | transition: background-color 0.25s ease; 127 | padding: 6px 8px; 128 | border: 1px solid $primary-color; 129 | border-radius: 2px; 130 | &:hover { 131 | background-color: $primary-hover; 132 | color: white; 133 | } 134 | } 135 | .secondary-outline-btn { 136 | background-color: white; 137 | color: $primary-hover; 138 | transition: background-color 0.25s ease; 139 | padding: 6px 8px; 140 | border: 1px solid $primary-hover; 141 | border-radius: 2px; 142 | &:hover { 143 | background-color: $primary-hover; 144 | color: white; 145 | } 146 | } 147 | 148 | .danger-btn { 149 | background-color: $danger-color; 150 | color: white; 151 | &:hover { 152 | background-color: white; 153 | color: $danger-color; 154 | border: 1px solid $danger-color; 155 | } 156 | } 157 | .navbar-brand { 158 | letter-spacing: 0.1rem; 159 | color: $primary-hover !important; 160 | font-weight: bold; 161 | } 162 | 163 | .bg-primary { 164 | background-color: $primary-color !important; 165 | } 166 | 167 | //custom pagination 168 | .custom-pagination { 169 | .page-item .page-link { 170 | width: 2rem; 171 | border-radius: 2px; 172 | } 173 | .page-item.active .page-link { 174 | background-color: #185a91 !important; 175 | border: 1px solid #185a91 !important; 176 | } 177 | } 178 | -------------------------------------------------------------------------------- /resources/sass/app.scss: -------------------------------------------------------------------------------- 1 | //Bootstrap css 2 | @import "~bootstrap/scss/bootstrap"; 3 | 4 | @import "./default"; 5 | 6 | //main navbar 7 | @import "./inc/navbar"; 8 | 9 | //pages 10 | @import "./pages/home"; 11 | @import "./pages/auth"; 12 | 13 | //layouts 14 | @import "./inc/account-layout"; 15 | -------------------------------------------------------------------------------- /resources/sass/inc/_account-layout.scss: -------------------------------------------------------------------------------- 1 | .account-layout { 2 | .account-hdr { 3 | padding: 1rem 1rem; 4 | background-color: white; 5 | } 6 | .account-bdy { 7 | .list-group-item.active { 8 | background-color: $primary-color; 9 | color: white; 10 | border: $primary-color; 11 | .account-nav-link:hover { 12 | color: #efefef; 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /resources/sass/inc/_navbar.scss: -------------------------------------------------------------------------------- 1 | // #navbar { 2 | // box-shadow: 0px 5px 18px -2px rgba(0, 0, 0, 0.36); 3 | // } 4 | -------------------------------------------------------------------------------- /resources/sass/pages/_auth.scss: -------------------------------------------------------------------------------- 1 | .login-container { 2 | padding: 3rem 2rem; 3 | border: 1px solid #ddd; 4 | background-color: white; 5 | color: #666; 6 | .login-header { 7 | .login-header-title { 8 | font-size: 1.3rem; 9 | font-weight: bold; 10 | } 11 | } 12 | height: 100%; 13 | } 14 | .login-poster { 15 | padding: 1rem 2rem; 16 | height: 100%; 17 | min-height: 500px; 18 | text-shadow: 1px 1px 5px 8px rgba(0, 0, 0, 0.4); 19 | } 20 | .login-poster .slogon { 21 | font-size: 2rem; 22 | color: white; 23 | font-family: Georgia, "Times New Roman", Times, serif; 24 | line-height: 1.3; 25 | } 26 | 27 | .dashboard-card { 28 | overflow: hidden; 29 | .card-body .rotate { 30 | z-index: 8; 31 | float: right; 32 | height: 100%; 33 | } 34 | 35 | .card-body .rotate i { 36 | color: rgba(20, 20, 20, 0.15); 37 | position: absolute; 38 | left: 0; 39 | left: auto; 40 | right: -10px; 41 | bottom: 0; 42 | display: block; 43 | -webkit-transform: rotate(-44deg); 44 | -moz-transform: rotate(-44deg); 45 | -o-transform: rotate(-44deg); 46 | -ms-transform: rotate(-44deg); 47 | transform: rotate(-44deg); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /resources/sass/pages/_home.scss: -------------------------------------------------------------------------------- 1 | .home-page { 2 | padding: 2rem; 3 | background: linear-gradient(to bottom right, #0261a6, #022c5a); 4 | .rounded-text { 5 | background-color: white; 6 | padding: 0.5rem 1rem; 7 | border: 1px solid white; 8 | margin: 2rem 0; 9 | border-radius: 16px; 10 | width: fit-content; 11 | p { 12 | font-weight: bold; 13 | font-size: 1.5rem; 14 | color: $primary-color; 15 | } 16 | } 17 | 18 | .home-search-bar { 19 | display: flex; 20 | align-items: center; 21 | background-color: white; 22 | border-radius: 8px; 23 | .home-search-input { 24 | padding: 8px 12px; 25 | border: none; 26 | outline: none; 27 | background-color: transparent; 28 | width: 100%; 29 | &:hover { 30 | border: none; 31 | outline: none; 32 | } 33 | } 34 | button { 35 | margin-right: 0; 36 | } 37 | } 38 | } 39 | 40 | //jobs section 41 | .jobs-section { 42 | .job-item { 43 | padding: 6px 0; 44 | &:hover { 45 | background-color: #eee; 46 | } 47 | .job-description { 48 | padding-left: 1rem; 49 | .company-name { 50 | font-size: 0.85rem; 51 | font-weight: bold; 52 | width: 100px; 53 | white-space: nowrap; 54 | overflow: hidden; 55 | text-overflow: ellipsis; 56 | } 57 | .company-listings { 58 | font-size: 0.85rem; 59 | list-style: none; 60 | color: $primary-color; 61 | } 62 | } 63 | } 64 | 65 | .top-employers { 66 | display: flex; 67 | align-items: center; 68 | .top-employer { 69 | flex: 1; 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /resources/views/account/apply-job.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | 3 | @section('content') 4 |
5 |
6 | Apply for job 7 |
8 |
9 |
10 |
11 |
12 |
13 | My Profile 14 |
15 |
16 |
17 |
18 | 19 |
20 |
21 |
{{auth()->user()->name}}
22 |

Email: {{auth()->user()->email}}

23 | View My profile 24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | Key Job Requirements 33 |
34 |
35 |
36 |
37 | 38 |
39 |
40 |

41 | {{$post->job_title}} 42 |

43 |
44 | {{$company->title}} 45 |
46 |

Location: {{$post->job_location}}

47 |

{{date('l, jS \of F Y',$post->deadlineTimestamp())}}, ({{ date('d',$post->remainingDays())}} days from now)

48 |
49 |
50 |
51 |
52 | View job| 53 | Save job 54 |
55 |
56 |
57 |
58 | Cancel 59 |
60 | @csrf 61 | 62 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 | @endsection -------------------------------------------------------------------------------- /resources/views/account/become-employer.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | @section('content') 3 |
4 |
5 | Become an employer in {{config('app.name')}} 6 |
7 |
8 |
9 |
10 |

Upgrade to Author Role

11 |
12 |
13 |
14 |

Usually this should be validated by Admin but for testing it is one click away to become an employer.

15 |
16 |

Click the button to assign Author roles to your account.

17 |
18 | @csrf 19 |
20 |
21 | 22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | @endsection -------------------------------------------------------------------------------- /resources/views/account/change-password.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | 3 | @section('content') 4 |
5 |
6 | Change Password 7 |
8 |
9 |
10 | @csrf 11 | @method('PUT') 12 |
13 | 14 | @error('current_password') 15 | 16 | {{ $message }} 17 | 18 | @enderror 19 |
20 |

Password must be 8 characters with 1 special character

21 |
22 | 23 | @error('new_password') 24 | 25 | {{ $message }} 26 | 27 | @enderror 28 |
29 |
30 | 31 | @error('confirm_password') 32 | 33 | {{ $message }} 34 | 35 | @enderror 36 |
37 |
38 |
39 | 40 | 41 |
42 |
43 |
44 |
45 | @endSection 46 | 47 | @push('css') 48 | 49 | @endpush -------------------------------------------------------------------------------- /resources/views/account/deactivate.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | 3 | @section('content') 4 |
5 |
6 | Deactivate Account 7 |
8 |
9 |
10 |
11 |

Deleting Account

12 | 13 |
14 |
15 |
16 |

Logout instead

17 | Logout 18 |
19 | 20 |
21 |

You will not be able to retrive your account once you have deleted it.

22 |
23 |

Click the button to delete this account.

24 |
25 | @csrf 26 | @method('delete') 27 |
28 |
29 | 30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 | @endSection 40 | 41 | -------------------------------------------------------------------------------- /resources/views/account/employer.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.employer') 2 | 3 | @section('content') 4 |
5 |
6 |
7 |
8 |

Latest Vacancies

9 |
10 |
11 | 12 | @foreach ( $company->posts as $post) 13 |
14 |
15 |
16 | 17 |
18 |
19 |
20 |
21 |
{{$post->job_title}}
22 |

{{$company->title}}

23 |

{{$post->job_location}}

24 |

{{$post->skills}}

25 |
26 |
27 | Apply Before: 28 | @php 29 | $date = new DateTime($post->deadline); 30 | echo date('d', $date->getTimestamp() - time()); 31 | @endphp day[s] from now 32 |
33 |
34 | Views: {{$post->views}} 35 |
36 |
37 |
38 |
39 |
40 | {{--
--}} 41 | @endforeach 42 | 43 |
44 |
45 |
46 |
47 | @endSection 48 | 49 | -------------------------------------------------------------------------------- /resources/views/account/saved-job.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | 3 | @section('content') 4 |
5 |
6 | My saved Jobs 7 |
8 |
9 |
10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | @foreach ($posts as $post) 24 | @if($posts->count() >0) 25 | 26 | 27 | 28 | 29 | 30 | 31 | 36 | 37 | @else 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | @endif 48 | @endforeach 49 | 50 |
Job PositionJob LevelCompanyNo of vacancyApply BeforeAction
{{$post->job_title}}{{$post->job_level}}{{substr($post->company->title,0,14)}}..{{$post->vacancy_count}}{{date('d/m/Y',$post->deadlineTimestamp())}}, {{date('d',$post->remainingDays()) }} days
32 | @csrf 33 | @method("delete") 34 | 35 |
You have no jobs saved.
51 |
52 |
53 |
54 |
55 | @endSection 56 | -------------------------------------------------------------------------------- /resources/views/account/view-all-users.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | 3 | @section('content') 4 |
5 |
6 | VIewing all users Any Role 7 |
8 |
9 |
10 |
11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | @if($users->count()) 24 | @foreach($users as $user) 25 | 26 | 27 | 28 | 29 | 30 | 38 | 39 | @endforeach 40 | @else 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | @endif 49 | 50 |
#UsersEmailcreated onAction
{{$user->id}}{{$user->name}}{{$user->email}}{{$user->created_at}} 31 |
32 | @csrf 33 | @method('delete') 34 | 35 | 36 |
37 |
There isn't any users.
51 |
52 |
53 | {{ $users->links() }} 54 |
55 |
56 |
57 |
58 |
59 | @endSection 60 | -------------------------------------------------------------------------------- /resources/views/auth/forgot-password.blade.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/resources/views/auth/forgot-password.blade.php -------------------------------------------------------------------------------- /resources/views/auth/login.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.auth') 2 | 3 | @section('content') 4 |
5 |
6 |
7 | 56 |
57 |
58 | 64 |
65 |
66 |
67 | @endsection 68 | 69 | @push('css') 70 | 84 | @endpush -------------------------------------------------------------------------------- /resources/views/auth/reset-password.blade.php: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nishangupta/joblister-laravel-8/b6cacdd50354a7b5af3ad4458cc7afe9e5faacbe/resources/views/auth/reset-password.blade.php -------------------------------------------------------------------------------- /resources/views/company-category/edit.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | 3 | @section('content') 4 |
5 |
6 | Edit Company Category 7 |
8 |
9 | @if($errors->any()) 10 | {!! implode('', $errors->all('
:message
')) !!} 11 | @endif 12 |
13 |
14 |

You are about to change company category : {{$category->category_name}}

15 |
16 | @csrf 17 | @method('put') 18 |
19 | 20 | 21 |
22 |
23 | 24 | Cancel 25 |
26 |
27 |
28 |
29 |
30 |
31 | @endsection -------------------------------------------------------------------------------- /resources/views/company/create.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | 3 | @section('content') 4 |
5 |
6 | Create Company 7 |
8 |
9 |
10 | @csrf 11 |
12 | 13 | 18 |
19 | 20 |
21 |
22 |

Company logo

23 |
24 |
25 | 26 | 27 | @error('logo') 28 | 29 | {{ $message }} 30 | 31 | @enderror 32 |
33 |
34 | 35 |
36 |
37 |

Company Title

38 |
39 | 40 | @error('title') 41 | 42 | {{ $message }} 43 | 44 | @enderror 45 |
46 | 47 |
48 |
49 |

Company Website Url

50 |

For example : https://www.examplecompany.com

51 |
52 | 53 | @error('website') 54 | 55 | {{ $message }} 56 | 57 | @enderror 58 |
59 | 60 |
61 |
62 |

Company banner/cover

63 |
64 |
65 | 66 | 67 | @error('cover_img') 68 | 69 | {{ $message }} 70 | 71 | @enderror 72 |
73 |
74 | 75 |
76 |

Provide a short paragraph description about your company

77 |
78 |
79 | 80 | @error('description') 81 | 82 | {{ $message }} 83 | 84 | @enderror 85 |
86 | 87 |
88 |
89 | 90 | Cancel 91 |
92 |
93 |
94 |
95 | @endSection 96 | -------------------------------------------------------------------------------- /resources/views/company/edit.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | 3 | @section('content') 4 |
5 |
6 | Edit Company 7 |
8 |
9 |
10 | @if($errors->any()) 11 | {{ implode('', $errors->all('
:message
')) }} 12 | @endif 13 | 14 | @csrf 15 | @method('put') 16 |
17 | 18 | 23 |
24 | 25 |
26 |
27 |

Company logo

28 | 29 |
30 |
31 | 32 | 33 | @error('logo') 34 | 35 | {{ $message }} 36 | 37 | @enderror 38 |
39 |
40 | 41 |
42 |
43 |

Company Title

44 |
45 | 46 | @error('title') 47 | 48 | {{ $message }} 49 | 50 | @enderror 51 |
52 | 53 |
54 |
55 |

Company Website Url

56 |

For example : https://www.examplecompany.com

57 |
58 | 59 | @error('website') 60 | 61 | {{ $message }} 62 | 63 | @enderror 64 |
65 | 66 |
67 |
68 |

Company banner/cover

69 | 70 |
71 |
72 | 73 | 74 | @error('cover_img') 75 | 76 | {{ $message }} 77 | 78 | @enderror 79 |
80 |
81 | 82 |
83 |

Provide a short paragraph description about your company

84 |
85 |
86 | 87 | @error('description') 88 | 89 | {{ $message }} 90 | 91 | @enderror 92 |
93 | 94 |
95 |
96 | 97 | Cancel 98 |
99 |
100 |
101 |
102 | @endSection 103 | -------------------------------------------------------------------------------- /resources/views/errors/403.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | @section('layout-holder') 3 | 4 | 5 | 6 | 403 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |

You are not allowed to enter here

24 |

Go Home!

25 | @endsection 26 | 27 | @push('css') 28 | 72 | @endpush 73 | 74 | @push('js') 75 | 103 | @endpush -------------------------------------------------------------------------------- /resources/views/errors/404.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | @section('layout-holder') 3 | 4 | 5 | 6 | 404 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |

Sorry! Not Found

24 |

Go Home!

25 | @endsection 26 | 27 | @push('css') 28 | 72 | @endpush 73 | 74 | @push('js') 75 | 103 | @endpush -------------------------------------------------------------------------------- /resources/views/inc/account-nav.blade.php: -------------------------------------------------------------------------------- 1 |
2 | 57 |
-------------------------------------------------------------------------------- /resources/views/inc/footer.blade.php: -------------------------------------------------------------------------------- 1 | 62 | 63 | @push('css') 64 | 101 | @endpush -------------------------------------------------------------------------------- /resources/views/inc/login-banner.blade.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | Register 6 | Login 7 | Are you an Employer? 8 |
9 |
10 |
11 | 12 | 13 | @push('css') 14 | 23 | @endpush -------------------------------------------------------------------------------- /resources/views/inc/navbar.blade.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resources/views/job-application/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | 3 | @section('content') 4 |
5 |
6 | Job Applications 7 |
8 |
9 |
10 |
11 |

Listing all the Applicants who applied for your job listings.

12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | @if($applications && $applications->count()) 26 | @foreach($applications as $application) 27 | 28 | 29 | 30 | 31 | 32 | 33 | 41 | 42 | @endforeach 43 | @else 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | @endif 53 | 54 |
#Applicant NameEmailJob TitleApplied onActions
1{{$application->user->name}}{{$application->user->email}}{{substr($application->post->job_title,0,14)}}...{{$application->created_at}}View 34 |
35 | @csrf 36 | @method('delete') 37 | 38 | 39 |
40 |
You haven't received any job applications.
55 |
56 |
57 | {{ $applications && $applications->links() }} 58 |
59 |
60 |
61 |
62 |
63 | @endSection 64 | -------------------------------------------------------------------------------- /resources/views/job-application/show.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.account') 2 | 3 | @section('content') 4 |
5 |
6 | Job Application 7 |
8 |
9 |

User named ({{$applicant->name}}) applied for your listing on {{$application->created_at}}

10 |
11 |
12 |
13 |
14 | User Profile (Applicant) 15 |
16 |
17 |
18 |
19 | 20 |
21 |
22 |
{{$applicant->name}}
23 |

Email: {{$applicant->email}}

24 | Send user an email 25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 | Key Job Requirements 34 |
35 |
36 |
37 |
38 | 39 |
40 |
41 |

42 | {{$post->job_title}} 43 |

44 |
45 | {{$company->title}} 46 |
47 |

Location: {{$post->job_location}}

48 |

{{date('l, jS \of F Y',$post->deadlineTimestamp())}}, ({{ date('d',$post->remainingDays())}} days from now)

49 |
50 |
51 |
52 |
53 | View job 54 |
55 |
56 |
57 |
58 | Go back 59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | @endsection -------------------------------------------------------------------------------- /resources/views/job/index.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.job') 2 | @section('content') 3 |
4 | 5 |
6 | @endsection 7 | -------------------------------------------------------------------------------- /resources/views/layouts/account.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('layout-holder') 4 | {{-- styles here are placed account-layout.scss --}} 5 | @include('inc.navbar') 6 |
7 |
8 | 11 | 22 |
23 |
24 | @include('inc.footer') 25 | @endsection -------------------------------------------------------------------------------- /resources/views/layouts/app.blade.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {{ config('app.name')?? 'JobLister' }} 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | @stack('css') 23 | 24 | 25 | 26 |
27 | @yield('layout-holder') 28 |
29 | @include('sweetalert::alert') 30 | 31 | @stack('js') 32 | 33 | 34 | -------------------------------------------------------------------------------- /resources/views/layouts/auth.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('layout-holder') 4 | @include('inc.navbar') 5 | @yield('content') 6 | @include('inc.footer') 7 | @endsection -------------------------------------------------------------------------------- /resources/views/layouts/employer.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('layout-holder') 4 | @include('inc.navbar') 5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | 13 |
14 |
{{$company->title}}
15 |

{{$company->getCategory->category_name}}

16 |
17 |

{{$company->description}}

18 |
19 |
20 | 21 |
22 |
23 |
24 |
25 |
26 | @yield('content') 27 |
28 |
29 |
30 |
31 | @include('inc.footer') 32 | @endsection 33 | 34 | 35 | @push('css') 36 | 56 | @endpush -------------------------------------------------------------------------------- /resources/views/layouts/job.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | @section('layout-holder') 3 | @include('inc.navbar') 4 |
5 | @yield('content') 6 |
7 | @guest 8 | @include('inc.login-banner') 9 | @endguest 10 | @include('inc.footer') 11 | @endsection -------------------------------------------------------------------------------- /resources/views/layouts/post.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.app') 2 | 3 | @section('layout-holder') 4 | @include('inc.navbar') 5 | @yield('content') 6 | @guest 7 | @include('inc.login-banner') 8 | @endguest 9 | @include('inc.footer') 10 | @endsection -------------------------------------------------------------------------------- /resources/views/vendor/sweetalert/alert.blade.php: -------------------------------------------------------------------------------- 1 | @if (config('sweetalert.alwaysLoadJS') === true && config('sweetalert.neverLoadJS') === false ) 2 | 3 | @endif 4 | @if (Session::has('alert.config')) 5 | @if(config('sweetalert.animation.enable')) 6 | 7 | @endif 8 | @if (config('sweetalert.alwaysLoadJS') === false && config('sweetalert.neverLoadJS') === false) 9 | 10 | @endif 11 | 14 | @endif 15 | -------------------------------------------------------------------------------- /routes/api.php: -------------------------------------------------------------------------------- 1 | get('/user', function (Request $request) { 8 | return $request->user(); 9 | }); 10 | 11 | //job routes 12 | Route::middleware('api')->group(function () { 13 | Route::get('search', [JobController::class, 'search'])->name('job.search'); 14 | 15 | //pages api 16 | Route::get('company-categories', [JobController::class, 'getCategories'])->name('job.getCategories'); 17 | Route::get('job-titles', [JobController::class, 'getAllByTitle'])->name('job.getAllByTitle'); 18 | Route::get('companies', [JobController::class, 'getAllOrganization'])->name('job.getAllOrganization'); 19 | }); 20 | -------------------------------------------------------------------------------- /routes/channels.php: -------------------------------------------------------------------------------- 1 | id === (int) $id; 18 | }); 19 | -------------------------------------------------------------------------------- /routes/console.php: -------------------------------------------------------------------------------- 1 | comment(Inspiring::quote()); 19 | })->purpose('Display an inspiring quote'); 20 | -------------------------------------------------------------------------------- /server.php: -------------------------------------------------------------------------------- 1 | 8 | */ 9 | 10 | $uri = urldecode( 11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) 12 | ); 13 | 14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the 15 | // built-in PHP web server. This provides a convenient way to test a Laravel 16 | // application without having installed a "real" web server software here. 17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { 18 | return false; 19 | } 20 | 21 | require_once __DIR__.'/public/index.php'; 22 | -------------------------------------------------------------------------------- /storage/app/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !public/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/app/public/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/.gitignore: -------------------------------------------------------------------------------- 1 | compiled.php 2 | config.php 3 | down 4 | events.scanned.php 5 | maintenance.php 6 | routes.php 7 | routes.scanned.php 8 | schedule-* 9 | services.json 10 | -------------------------------------------------------------------------------- /storage/framework/cache/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !data/ 3 | !.gitignore 4 | -------------------------------------------------------------------------------- /storage/framework/cache/data/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/sessions/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/testing/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/framework/views/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /storage/logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /tests/CreatesApplication.php: -------------------------------------------------------------------------------- 1 | make(Kernel::class)->bootstrap(); 19 | 20 | return $app; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tests/Feature/ExampleTest.php: -------------------------------------------------------------------------------- 1 | get('/'); 18 | 19 | $response->assertStatus(200); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tests/TestCase.php: -------------------------------------------------------------------------------- 1 | assertTrue(true); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /webpack.mix.js: -------------------------------------------------------------------------------- 1 | const mix = require("laravel-mix"); 2 | 3 | /* 4 | |-------------------------------------------------------------------------- 5 | | Mix Asset Management 6 | |-------------------------------------------------------------------------- 7 | | 8 | | Mix provides a clean, fluent API for defining some Webpack build steps 9 | | for your Laravel applications. By default, we are compiling the CSS 10 | | file for the application as well as bundling up all the JS files. 11 | | 12 | */ 13 | 14 | mix.js("resources/js/app.js", "public/js").sass( 15 | "resources/sass/app.scss", 16 | "public/css" 17 | ); 18 | --------------------------------------------------------------------------------