├── server
├── keys.js
├── .DS_Store
├── models
│ ├── Category.js
│ ├── company.js
│ ├── employer_notification.js
│ ├── student_notification.js
│ ├── application.js
│ ├── Freshers.js
│ ├── Job.js
│ ├── Internship.js
│ └── employer.js
├── package.json
├── middleware
│ ├── auth_employer.js
│ └── auth_student.js
├── utils
│ ├── signup-email.js
│ ├── signupEmployer-email.js
│ └── email.js
├── index.js
├── controller
│ ├── studentProfile.js
│ ├── student_notification.js
│ └── employer_notification.js
└── routes
│ ├── Category.js
│ ├── general.js
│ ├── employer.js
│ └── student.js
├── .DS_Store
├── src
├── .DS_Store
├── components
│ ├── Error
│ │ ├── error.png
│ │ ├── Error.js
│ │ └── Error.css
│ ├── student-profile
│ │ ├── Input.js
│ │ ├── Label.js
│ │ ├── StudentProfile
│ │ │ ├── components
│ │ │ │ ├── Project.js
│ │ │ │ ├── Experience.js
│ │ │ │ ├── General.js
│ │ │ │ └── Education.js
│ │ │ └── ProfileView.js
│ │ ├── Skills.js
│ │ ├── Other.js
│ │ ├── Achievments.js
│ │ ├── Volunteer.js
│ │ ├── profile.css
│ │ └── Project.js
│ ├── employer
│ │ ├── employer.css
│ │ └── EmployerProfileScreen.css
│ ├── privacy-policy
│ │ ├── privacy-policy.css
│ │ └── privacy-policy.js
│ ├── home
│ │ └── home.css
│ ├── navbar
│ │ └── navbar.css
│ ├── contact-us
│ │ └── contact-us.css
│ ├── welcomeSignup
│ │ ├── welcomeSignup.js
│ │ └── welcomeSignupEmployer.js
│ ├── footer
│ │ └── footer.css
│ ├── student
│ │ └── register.css
│ ├── Jobs
│ │ ├── JobCompanyName.js
│ │ ├── AllJobs.js
│ │ ├── BookmarkJob.js
│ │ ├── JobsByCompanyName.js
│ │ └── JobsGroupedByStream.js
│ ├── Internships
│ │ ├── InternshipCompanyNames.js
│ │ ├── AllInternships.css
│ │ ├── AllInternships.js
│ │ ├── BookmarkInternhsip.js
│ │ ├── InternshipByStream.js
│ │ ├── InternshipByIndustry.js
│ │ ├── InternshipByLocation.js
│ │ ├── InternshipByCompany.js
│ │ ├── InternshipsGroupedByIndustry.js
│ │ ├── InternshipGroupedByStream.js
│ │ └── InternshipsGroupedByLoction.js
│ ├── FreshersJob
│ │ ├── FreshersJobCompanyName.js
│ │ ├── FreshersJobByCompanyName.js
│ │ ├── AllFresherJob.js
│ │ ├── FresherJobsGroupedByStream.js
│ │ ├── FresherJobsGroupedByIndustry.js
│ │ ├── FresherJobsGroupedByLocation.js
│ │ └── BookmarkFresherJob.js
│ ├── about-us
│ │ ├── about-us.css
│ │ └── about-us.js
│ └── terms-condition
│ │ └── terms-condition.js
├── reducers
│ └── userReducer.js
├── setupTests.js
├── App.test.js
├── index.css
├── reportWebVitals.js
├── index.js
├── App.css
└── utils
│ ├── checkValidation.js
│ └── UI
│ └── InternshipCard
│ └── InternshipCard.css
├── public
├── logo.png
├── robots.txt
├── .DS_Store
├── images
│ ├── jobs.png
│ ├── logo.png
│ ├── ot2.png
│ ├── read.png
│ ├── desktop.png
│ ├── favicon.ico
│ ├── intern.png
│ ├── puzzle.png
│ ├── stream.png
│ ├── texture.png
│ ├── freshers.png
│ ├── industry.png
│ ├── internship.png
│ ├── location.png
│ ├── studying.png
│ ├── inspiration.png
│ ├── 32.-Discussion.png
│ ├── ContributionPR.jpg
│ ├── ContributionFork.jpg
│ ├── ContributionBranch.jpg
│ ├── ContributionIsssues.jpg
│ └── website-content.svg
├── manifest.json
└── index.html
├── readme_assets
├── p1.jfif
├── p2.jfif
├── p3.jfif
├── psoc.PNG
├── banner.png
├── crosswoc.png
├── gssoc_logoNew.png
└── easy-job-intern-about.gif
├── .github
├── ISSUE_TEMPLATE
│ ├── feature_request.md
│ └── bug_report.md
├── workflows
│ └── greetings.yml
└── PULL_REQUEST_TEMPLATE.md
├── LICENSE
├── package.json
├── .gitignore
└── contributors.md
/server/keys.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | JWT_SECRET:"Ilovecoding",
3 | }
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/.DS_Store
--------------------------------------------------------------------------------
/src/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/src/.DS_Store
--------------------------------------------------------------------------------
/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/logo.png
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/public/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/.DS_Store
--------------------------------------------------------------------------------
/server/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/server/.DS_Store
--------------------------------------------------------------------------------
/public/images/jobs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/jobs.png
--------------------------------------------------------------------------------
/public/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/logo.png
--------------------------------------------------------------------------------
/public/images/ot2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/ot2.png
--------------------------------------------------------------------------------
/public/images/read.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/read.png
--------------------------------------------------------------------------------
/readme_assets/p1.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/readme_assets/p1.jfif
--------------------------------------------------------------------------------
/readme_assets/p2.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/readme_assets/p2.jfif
--------------------------------------------------------------------------------
/readme_assets/p3.jfif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/readme_assets/p3.jfif
--------------------------------------------------------------------------------
/readme_assets/psoc.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/readme_assets/psoc.PNG
--------------------------------------------------------------------------------
/public/images/desktop.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/desktop.png
--------------------------------------------------------------------------------
/public/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/favicon.ico
--------------------------------------------------------------------------------
/public/images/intern.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/intern.png
--------------------------------------------------------------------------------
/public/images/puzzle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/puzzle.png
--------------------------------------------------------------------------------
/public/images/stream.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/stream.png
--------------------------------------------------------------------------------
/public/images/texture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/texture.png
--------------------------------------------------------------------------------
/readme_assets/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/readme_assets/banner.png
--------------------------------------------------------------------------------
/public/images/freshers.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/freshers.png
--------------------------------------------------------------------------------
/public/images/industry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/industry.png
--------------------------------------------------------------------------------
/public/images/internship.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/internship.png
--------------------------------------------------------------------------------
/public/images/location.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/location.png
--------------------------------------------------------------------------------
/public/images/studying.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/studying.png
--------------------------------------------------------------------------------
/readme_assets/crosswoc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/readme_assets/crosswoc.png
--------------------------------------------------------------------------------
/public/images/inspiration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/inspiration.png
--------------------------------------------------------------------------------
/src/components/Error/error.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/src/components/Error/error.png
--------------------------------------------------------------------------------
/public/images/32.-Discussion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/32.-Discussion.png
--------------------------------------------------------------------------------
/public/images/ContributionPR.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/ContributionPR.jpg
--------------------------------------------------------------------------------
/readme_assets/gssoc_logoNew.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/readme_assets/gssoc_logoNew.png
--------------------------------------------------------------------------------
/public/images/ContributionFork.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/ContributionFork.jpg
--------------------------------------------------------------------------------
/public/images/ContributionBranch.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/ContributionBranch.jpg
--------------------------------------------------------------------------------
/public/images/ContributionIsssues.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/public/images/ContributionIsssues.jpg
--------------------------------------------------------------------------------
/readme_assets/easy-job-intern-about.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pankajbijarniya/easy-job-intern/HEAD/readme_assets/easy-job-intern-about.gif
--------------------------------------------------------------------------------
/src/components/student-profile/Input.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Input=(props)=>
4 | { return (
5 |
6 | );
7 | }
8 |
9 | export default Input;
--------------------------------------------------------------------------------
/src/reducers/userReducer.js:
--------------------------------------------------------------------------------
1 | export const initialState = null;
2 |
3 | export const reducer = (state, action) => {
4 | if(action.type === "USER"){
5 | console.log(action.payload);
6 | return action.payload;
7 | }
8 | return state;
9 | }
--------------------------------------------------------------------------------
/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render( );
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/src/components/student-profile/Label.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "./profile.css"
3 |
4 | const Label=(props)=>
5 | {
6 | return(
7 | {props.value}*
8 |
9 | );
10 | }
11 |
12 | export default Label;
--------------------------------------------------------------------------------
/src/components/employer/employer.css:
--------------------------------------------------------------------------------
1 | @media only screen and (max-width:750px) {
2 |
3 | .employer_form_card_custom {
4 | min-width: 80vw !important;
5 | font-size: 0.9rem !important;
6 | }
7 |
8 | .employer_form_card_custom input {
9 | font-size: 0.8rem !important;
10 | }
11 |
12 | }
--------------------------------------------------------------------------------
/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/src/components/privacy-policy/privacy-policy.css:
--------------------------------------------------------------------------------
1 | .heading{
2 | color:black;
3 | font-family:'Franklin Gothic Medium', 'Arial Narrow', Arial, sans-serif;
4 | text-align: center;
5 | font-size: 3rem;
6 | }
7 |
8 | .content{
9 | color:black;
10 | width:100%;
11 | background-color:white;
12 | height:100%;
13 | }
14 |
15 | .rules{
16 | text-align:left;
17 | padding-left: 45px;
18 | padding-right: 25px;
19 | }
--------------------------------------------------------------------------------
/server/models/Category.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const Schema = mongoose.Schema;
3 |
4 | const categorySchema = new Schema({
5 | name:{
6 | type: String,
7 | required:true,
8 | maxlength:40
9 | },
10 | slug:{
11 | type:String,
12 | unique:true,
13 | index:true
14 | }
15 | });
16 |
17 | const Category = mongoose.model('Category',categorySchema);
18 |
19 | module.exports = Category;
--------------------------------------------------------------------------------
/src/components/home/home.css:
--------------------------------------------------------------------------------
1 |
2 | #offer-range{
3 | color: white;
4 | font-size: 15px;
5 | }
6 |
7 | .itemLink:hover{
8 | transform: scale(1.1);
9 | }
10 |
11 | #offer-range>img{
12 | width:50px;
13 | height: 50px;
14 | }
15 | .home .container{
16 | width: unset;
17 | background-color: rgba(82, 23, 109, 0.521);
18 |
19 | }
20 | a{
21 | font-weight: bold
22 | }
23 |
24 | .itemLink Button{
25 | font-weight: bold
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: 'Type: Enhancement'
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## Is your feature request related to a problem? Please describe.
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | ## Describe the solution you'd like
14 | A clear and concise description of what you want to happen.
15 |
16 | ## Additional context
17 | Add any other context about the feature request here.
18 |
--------------------------------------------------------------------------------
/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/src/components/employer/EmployerProfileScreen.css:
--------------------------------------------------------------------------------
1 | .employer-main-profile {
2 | background-color: #151c25;
3 | height: 100%;
4 | }
5 |
6 | .employer-secondary-profile ul li {
7 | list-style: none;
8 | margin: 1rem;
9 | color: whitesmoke;
10 | font-size: 1.2rem;
11 | }
12 |
13 | .employer-secondary-profile ul li span {
14 | color: yellow;
15 | font-size: 1.1rem;
16 | display: block;
17 | }
18 |
19 | .employer-profile-heading {
20 | color: white;
21 | text-decoration: none;
22 | border-bottom: 5px solid yellow;
23 | padding-bottom: 10px;
24 | border-radius: 10px;
25 | }
--------------------------------------------------------------------------------
/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon",
9 |
10 | },
11 | {
12 | "src": "logo192.png",
13 | "type": "image/png",
14 | "sizes": "192x192"
15 | },
16 | {
17 | "src": "logo512.png",
18 | "type": "image/png",
19 | "sizes": "512x512"
20 | }
21 | ],
22 | "start_url": ".",
23 | "display": "standalone",
24 | "theme_color": "#000000",
25 | "background_color": "#ffffff"
26 | }
27 |
--------------------------------------------------------------------------------
/src/components/navbar/navbar.css:
--------------------------------------------------------------------------------
1 | .searchForm{
2 | display: flex;
3 | width: fit-content;
4 | }
5 | .inputSearch{
6 | width: 65% !important;
7 | }
8 | .searchBtn{
9 | width: 50px;
10 | color: #f1eaed;
11 | }
12 |
13 | @media only screen and (max-width: 1090px){
14 | .navBTN{
15 | padding-left: 0;
16 | padding-right: 0;
17 | }
18 | }
19 | @media only screen and (max-width: 991px){
20 | .searchForm{
21 | display: flex;
22 | width: fit-content;
23 | }
24 | .navLINK{
25 | border-bottom: 1px solid #888;
26 | }
27 | .linkText{ color: red ; }
28 |
29 | }
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "nodemon index.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "bcrypt": "^5.0.1",
14 | "bcryptjs": "^2.4.3",
15 | "concurrently": "^6.0.0",
16 | "cors": "^2.8.5",
17 | "dotenv": "^8.2.0",
18 | "express": "^4.17.1",
19 | "jsonwebtoken": "^8.5.1",
20 | "mongoose": "^5.11.19",
21 | "nodemailer": "^6.5.0",
22 | "nodemon": "^2.0.7",
23 | "slugify": "^1.5.0"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/src/components/Error/Error.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { Link } from "react-router-dom";
3 | import "./Error.css";
4 | import Error1 from "./error.png"
5 |
6 | const Error = () => {
7 | return (
8 |
9 |
10 |
11 | Look like you're lost
12 |
13 |
the page you are looking for not avaible!
14 |
15 |
Go back
16 |
17 |
18 | );
19 | };
20 |
21 | export default Error;
--------------------------------------------------------------------------------
/.github/workflows/greetings.yml:
--------------------------------------------------------------------------------
1 | name: Greetings
2 |
3 | on: [pull_request, issues]
4 |
5 | jobs:
6 | greeting:
7 | runs-on: ubuntu-latest
8 | steps:
9 | - uses: actions/first-interaction@v1
10 | with:
11 | repo-token: ${{ secrets.GITHUB_TOKEN }}
12 | issue-message: 'Hi 😄, thanks for creating your first issue at easy-job-intern, do read and follow the [Contribution Guidelines](https://github.com/pankajkumarbij/easy-job-intern/blob/master/contributing.md) while contributing. Someone from our team will get back here soon '
13 | pr-message: 'Thank you for your pull request and welcome to our community! We will soon be getting back to you. Your patience will be greatly appreciated!Thanks! 🥳'
14 |
15 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: 'Type: Bug'
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## Describe the bug
11 | A clear and concise description of what the bug is.
12 |
13 | ## To Reproduce
14 | Steps to reproduce the behavior:
15 | 1.
16 | 2.
17 | 3.
18 | 4.
19 |
20 | ## Expected behavior
21 | A clear and concise description of what you expected to happen.
22 |
23 | ## Logs
24 | If applicable, add logs to help explain your problem (e.g. the error message and/or exception traceback).
25 |
26 | ## Environment (please complete the following information):
27 | - OS:
28 | - Browser:
29 |
30 | ## Additional context
31 | Add any other context about the problem here.
32 |
--------------------------------------------------------------------------------
/server/middleware/auth_employer.js:
--------------------------------------------------------------------------------
1 | const jwt = require("jsonwebtoken");
2 | const Employer = require("../models/employer.js");
3 | const { JWT_SECRET } = require("../keys");
4 |
5 | const auth_employer = async (req, res, next) => {
6 | const { authorization } = req.headers;
7 | if (!authorization) {
8 | res.status(401).json({ error: "You must be logged in" });
9 | }
10 | const token = authorization.replace("Bearer ", "");
11 | jwt.verify(token, JWT_SECRET, (err, payload) => {
12 | if (err) {
13 | return res.status(401).json({ error: "you must be logged in" });
14 | }
15 |
16 | const { _id } = payload;
17 | Employer.findById(_id).then((userData) => {
18 | req.user = userData;
19 | next();
20 | });
21 | });
22 | };
23 |
24 | module.exports = auth_employer;
25 |
--------------------------------------------------------------------------------
/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 | .App-logo {
5 | height: 40vmin;
6 | pointer-events: none;
7 | }
8 |
9 | @media (prefers-reduced-motion: no-preference) {
10 | .App-logo {
11 | animation: App-logo-spin infinite 20s linear;
12 | }
13 | }
14 |
15 | .App-header {
16 | background-color: #282c34;
17 | min-height: 100vh;
18 | display: flex;
19 | flex-direction: column;
20 | align-items: center;
21 | justify-content: center;
22 | font-size: calc(10px + 2vmin);
23 | color: white;
24 | }
25 |
26 | .App-link {
27 | color: #61dafb;
28 | }
29 |
30 | @keyframes App-logo-spin {
31 | from {
32 | transform: rotate(0deg);
33 | }
34 | to {
35 | transform: rotate(360deg);
36 | }
37 | }
38 |
39 |
40 | main{
41 | min-height: 50vh;
42 | background-color: #0d1117;
43 | }
44 |
--------------------------------------------------------------------------------
/src/components/contact-us/contact-us.css:
--------------------------------------------------------------------------------
1 | .background {
2 | background: #0d1117;
3 | height: 60%;
4 | display: flex;
5 | justify-content: center;
6 | align-items: center;
7 | }
8 |
9 | .form {
10 | background-color: #000000;
11 | justify-content: center;
12 | align-items: center;
13 | width: 360px;
14 | color: white;
15 | margin-top: 2%;
16 | margin-bottom: 10%;
17 | box-shadow: 5px 5px 15px #000000;
18 | border-radius: 15px 50px;
19 | }
20 |
21 | .contactUs {
22 | background-color: #30363d;
23 | justify-content: center;
24 | align-items: center;
25 | padding-left: 20px;
26 | padding-right: 20px;
27 | padding-top: 35px;
28 | padding-bottom: 430px;
29 | margin-top: 2%;
30 | height: 550px;
31 | width: 360px;
32 | color: white;
33 | box-shadow: 5px 5px 15px #000000;
34 | border-radius: 15px 50px;
35 | }
36 |
37 | textarea {
38 | resize: none;
39 | }
--------------------------------------------------------------------------------
/src/components/welcomeSignup/welcomeSignup.js:
--------------------------------------------------------------------------------
1 | import React from 'react' ;
2 | import {Link} from 'react-router-dom' ;
3 | import axios from 'axios' ;
4 |
5 |
6 |
7 | export default function WelcomeSignup ( props ) {
8 |
9 | if(props.match.path === "/confirm/:confirmationCode" )
10 | {
11 | // verifyUser(props.match.params.confirmationCode )
12 | axios.get("http://localhost:5000/student/confirm/" + props.match.params.confirmationCode )
13 | .then((response) => {
14 | return response.data ;
15 | } )
16 | .catch((err)=> {
17 | console.log(err);
18 | })
19 | }
20 | return (
21 |
22 |
23 |
24 | Account confirmed!
25 |
26 |
27 |
28 | Please Login
29 |
30 |
31 | )
32 | }
33 |
34 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ## Related issue?
2 | close: #issue_number
3 |
4 | ## Describe the changes you've made
5 | A clear and concise description of what you have done to successfully close your assigned issue. Any new files? or anything you feel to let us know!
6 |
7 | ## Describe if there is any unusual behaviour of your code(Write `NA` if there isn't)
8 | A clear and concise description of it.
9 |
10 | ## Additional context (OPTIONAL)
11 | Add any other context or screenshots about the feature request here.
12 |
13 | ## Test plan (OPTIONAL)
14 | A good test plan should give instructions that someone else can easily follow.
15 | How someone can test your code?
16 |
17 | ## Open Source Program names (OPTIONAL)
18 | If you participated in any open-source program then please mention the program name here
19 |
20 |
21 | # Screenshots (Or Videos)
22 |
23 | Original | Updated
24 | :-------------------------:|:-------------------------:
25 | ** original screenshot ** | ** updated screenshot **
26 |
--------------------------------------------------------------------------------
/src/components/welcomeSignup/welcomeSignupEmployer.js:
--------------------------------------------------------------------------------
1 | import React from 'react' ;
2 | import {Link} from 'react-router-dom' ;
3 | import axios from 'axios' ;
4 |
5 |
6 |
7 | export default function WelcomeSignup ( props ) {
8 |
9 | if(props.match.path === "/confirm/employer/:confirmationCode" )
10 | {
11 | // verifyUser(props.match.params.confirmationCode )
12 | axios.get("http://localhost:5000/employer/confirm/" + props.match.params.confirmationCode )
13 | .then((response) => {
14 | return response.data ;
15 | } )
16 | .catch((err)=> {
17 | console.log(err);
18 | })
19 | }
20 | return (
21 |
22 |
23 |
24 | Account confirmed!
25 |
26 |
27 |
28 | Please Login as employer
29 |
30 |
31 | )
32 | }
33 |
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Pankaj Kumar Bij
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/src/components/footer/footer.css:
--------------------------------------------------------------------------------
1 | .icons:hover{
2 | opacity: 0.7;
3 | width: 1.4em;
4 | height: 1.4em;
5 | transform: translateY(-2px);
6 | transition:0.3s;
7 | }
8 |
9 | @import url('https://fonts.googleapis.com/css2?family=Manrope:wght@600&display=swap');
10 |
11 | html,
12 | body {
13 | height: 100%
14 | }
15 |
16 | * {
17 | padding: 0px;
18 | margin: 0px
19 | }
20 |
21 | body {
22 | background-color: #ebdde9;
23 | display: grid;
24 | place-items: center
25 | }
26 |
27 | .card {
28 | background-color: #2c2a2c;
29 | border-radius: 10px;
30 | font-family: 'Manrope', sans-serif
31 | }
32 |
33 | .fa {
34 | color: #d9d5d5
35 | }
36 |
37 | #inp1 {
38 | background-color: #1f1e1e;
39 | border: 1px solid #636161;
40 | font-size: 0.75rem
41 | }
42 |
43 | #inp1:focus {
44 | outline: none;
45 | box-shadow: none;
46 | }
47 |
48 | .btn-newsletter {
49 | background-color: #1a1b1b;
50 | font-size: 0.78rem;
51 | border: 0px;
52 | }
53 |
54 | .btn-newsletter:focus {
55 | outline: none;
56 | box-shadow: none;
57 | }
58 |
59 | *:focus {
60 | outline: none;
61 | }
--------------------------------------------------------------------------------
/server/models/company.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const Schema = mongoose.Schema;
3 | const {ObjectId} = mongoose.Schema.Types;
4 |
5 | const companySchema = new Schema({
6 | companyName:{
7 | type: String,
8 | required:true,
9 | },
10 | companySize:{
11 | enum: ['1-10', '11-50', '51-200', '201-500', '210-500', '501-1000', '1001-5000', '5000+'],
12 | type: String,
13 | required:true,
14 | },
15 | overview: {
16 | type: String,
17 | required: true,
18 | },
19 | locations:[{
20 | type: String,
21 | required:true,
22 | }],
23 | tags:[{
24 | type: String,
25 | required:true,
26 | }],
27 | tagline:{
28 | type: String,
29 | required:true,
30 | },
31 | investmentStage:{
32 | type: String,
33 | required:true,
34 | },
35 | markets:[{
36 | type: String,
37 | required:true,
38 | }],
39 | createdBy: {
40 | type: ObjectId,
41 | ref: "Employer",
42 | required:true,
43 | },
44 |
45 | }, {timestamps: true})
46 |
47 | const Company = mongoose.model('Company',companySchema);
48 |
49 | module.exports = Company;
50 |
--------------------------------------------------------------------------------
/server/models/employer_notification.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const Schema = mongoose.Schema;
3 | const {ObjectId} = mongoose.Schema.Types;
4 |
5 | const employerNotificationSchema = new Schema({
6 | notificationFor:{
7 | type: ObjectId,
8 | ref: "Employer",
9 | required: true
10 | },
11 | notificationBy:{
12 | type: ObjectId,
13 | ref: "Student",
14 | required: true
15 | },
16 | notificationTitle: {
17 | type: String,
18 | required: true
19 | },
20 | internshipApplicationNotification: {
21 | type: ObjectId,
22 | ref: "Application",
23 | },
24 | jobApplicationNotification: {
25 | type: ObjectId,
26 | ref: "Application",
27 | },
28 | fresherJobApplicationNotification: {
29 | type: ObjectId,
30 | ref: "Application",
31 | },
32 | status: {
33 | type: String,
34 | enum: ['read', 'unread'],
35 | required: true
36 | },
37 |
38 | }, {timestamps: true})
39 |
40 | const EmployerNotification = mongoose.model('EmployerNotification', employerNotificationSchema);
41 |
42 | module.exports = EmployerNotification;
--------------------------------------------------------------------------------
/server/utils/signup-email.js:
--------------------------------------------------------------------------------
1 | const nodemailer = require('nodemailer');
2 | require('dotenv').config()
3 | exports.signupEmailFunc = async (name, mail, confirmationCode) => {
4 |
5 | const transporter = nodemailer.createTransport({
6 | service : "gmail",
7 | auth : {
8 | user : process.env.EMAIL_USER,
9 | pass : process.env.EMAIL_PASSWORD
10 | },
11 | tls : {
12 | rejectUnauthorized : false
13 | }
14 |
15 | } )
16 | var mailOptions = {
17 | from: 'Easy-job-intern',
18 | to: mail,
19 | subject: 'Sending Email via Node.js',
20 | html : `Email Confirmation
21 | Hii ${name}
22 | Please verify your account by clicking this link
23 | Click here `
24 | }
25 |
26 |
27 | let info = await transporter.sendMail(mailOptions , (error , response )=> {
28 | if(error) console.log("Email not sent" , error);
29 | else console.log('Email sent successfully');
30 | } );
31 |
32 | };
33 |
34 |
--------------------------------------------------------------------------------
/server/index.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const mongoose = require("mongoose");
3 | const cors = require("cors");
4 | const PORT = 5000;
5 | var url = "mongodb://localhost:27017/eji"
6 |
7 | mongoose.connect(url, {
8 | useNewUrlParser: true,
9 | useUnifiedTopology: true,
10 | useCreateIndex: true,
11 | });
12 | mongoose.connection.on("connected", () => {
13 | console.log("Database Connected");
14 | });
15 | mongoose.connection.on("error", (err) => {
16 | console.log("connecting error", err);
17 | });
18 |
19 | const app = express();
20 |
21 | app.use(cors());
22 |
23 | app.use(express.json());
24 | app.use(express.urlencoded({ extended: true }));
25 |
26 | const StudentRouter = require("./routes/student");
27 | const CategoryRouter = require("./routes/Category");
28 | const EmployerRouter = require("./routes/employer");
29 | const UserRouter = require("./routes/general");
30 |
31 | app.use("/student", StudentRouter);
32 | app.use("/employer", EmployerRouter);
33 | app.use("/category",CategoryRouter);
34 | app.use("/user", UserRouter);
35 |
36 |
37 | app.get("/", (req, res) => {
38 | res.send("Welcome to easy job intern server");
39 | });
40 |
41 | app.listen(PORT, () => {
42 | console.log("server is running on port ", PORT);
43 | });
44 |
--------------------------------------------------------------------------------
/server/utils/signupEmployer-email.js:
--------------------------------------------------------------------------------
1 | const nodemailer = require('nodemailer');
2 | require('dotenv').config()
3 | exports.signupEmailFunc = async (name, mail, confirmationCode) => {
4 |
5 | const transporter = nodemailer.createTransport({
6 | service : "gmail",
7 | auth : {
8 | user : process.env.EMAIL_USER,
9 | pass : process.env.EMAIL_PASSWORD
10 | },
11 | tls : {
12 | rejectUnauthorized : false
13 | }
14 |
15 | } )
16 | var mailOptions = {
17 | from: 'Easy-job-intern',
18 | to: mail,
19 | subject: 'Sending Email via Node.js',
20 | html : `Email Confirmation
21 | Hii ${name}
22 | Please verify your account by clicking this link
23 | Click here `
24 | }
25 |
26 |
27 | let info = await transporter.sendMail(mailOptions , (error , response )=> {
28 | if(error) console.log("Email not sent" , error);
29 | else console.log('Email sent successfully');
30 | } );
31 |
32 | };
33 |
34 |
--------------------------------------------------------------------------------
/server/models/student_notification.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const Schema = mongoose.Schema;
3 | const {ObjectId} = mongoose.Schema.Types;
4 |
5 | const studentNotificationSchema = new Schema({
6 | notificationFor:{
7 | type: ObjectId,
8 | ref: "Student",
9 | required: true
10 | },
11 | notificationBy:{
12 | type: ObjectId,
13 | ref: "Employer",
14 | required: true
15 | },
16 | notificationTitle: {
17 | type: String,
18 | required: true
19 | },
20 | applicationNotification: {
21 | type: ObjectId,
22 | ref: "Application",
23 | },
24 | internshipOpeningNotification: {
25 | type: ObjectId,
26 | ref: "Internship",
27 | },
28 | jobOpeningNotification: {
29 | type: ObjectId,
30 | ref: "Job",
31 | },
32 | fresherJobOpeningNotification: {
33 | type: ObjectId,
34 | ref: "FreshersJob",
35 | },
36 | status: {
37 | type: String,
38 | enum: ['read', 'unread'],
39 | required: true
40 | },
41 |
42 | }, {timestamps: true})
43 |
44 | const StudentNotification = mongoose.model('StudentNotification', studentNotificationSchema);
45 |
46 | module.exports = StudentNotification;
--------------------------------------------------------------------------------
/server/controller/studentProfile.js:
--------------------------------------------------------------------------------
1 | const Student = require("../models/student");
2 |
3 | exports.addProfileBuilder = async (req, res) => {
4 | const { Profile } = req.body;
5 | console.log(Profile);
6 |
7 | let USER;
8 | try {
9 | USER = await Student(req.user._id);
10 | } catch (err) {
11 | console.log(err);
12 | res.status(500).json({ message: "something went wrong!" });
13 | }
14 |
15 | if (!USER) {
16 | res.json({ message: "user not found" });
17 | }
18 |
19 | Student.findByIdAndUpdate(
20 | req.user._id,
21 | {
22 | Profile,
23 | },
24 | { new: true }
25 | )
26 | .then((student) => {
27 | res.status(200).json({ student: student });
28 | })
29 | .catch((err) => {
30 | console.log(err);
31 | res.status(500).json({ message: "something went wrong!" });
32 | });
33 | };
34 |
35 | exports.getProfileStudent = (req, res) => {
36 | console.log(req.user._id);
37 | Student.findById(req.user._id)
38 | .then((student) => {
39 | if (student) {
40 | res.status(200).json({ profile: student.Profile });
41 | }
42 | res.status(400).json({ message: "student not found" });
43 | })
44 | .catch((err) => {
45 | console.log(err);
46 | res.status(500).json({ message: "something went wrong!" });
47 | });
48 | };
49 |
--------------------------------------------------------------------------------
/server/models/application.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const Schema = mongoose.Schema;
3 | const {ObjectId} = mongoose.Schema.Types;
4 |
5 | const applicationSchema = new Schema({
6 | applyingFor:{
7 | type: String,
8 | enum: ['job', 'internship', 'fresherjob'],
9 | required:true,
10 | trim: true
11 | },
12 | employer: {
13 | type: ObjectId,
14 | ref: "Employer",
15 | required: true
16 | },
17 | applied_job: {
18 | type: ObjectId,
19 | ref: "Job",
20 | },
21 | applied_fresherjob: {
22 | type: ObjectId,
23 | ref: "FreshersJob",
24 | },
25 | applied_internship: {
26 | type: ObjectId,
27 | ref: "Internship",
28 | },
29 | applicantId: {
30 | type: ObjectId,
31 | ref: "Student",
32 | required: true
33 | },
34 | applicantSendNote: {
35 | type: String,
36 | },
37 | status: {
38 | type: String,
39 | enum: ['pending', 'approved', 'rejected'],
40 | required: true
41 | },
42 | applicantReceiveNote: {
43 | type: String,
44 | }
45 | }, {timestamps: true})
46 |
47 | const Application = mongoose.model('Application',applicationSchema);
48 |
49 | module.exports = Application;
50 |
51 |
--------------------------------------------------------------------------------
/src/components/student/register.css:
--------------------------------------------------------------------------------
1 | .container {
2 | width: 60%;
3 | background-color: #1a2226;
4 | opacity: 75%;
5 | padding-top: 6%;
6 | padding-bottom: 5%;
7 | text-align: left;
8 | border-radius: 1%;
9 | }
10 | a, a:hover{
11 | color: inherit;
12 | }
13 |
14 |
15 | /* .card_custom{
16 | max-width: max-content !important;
17 | } */
18 |
19 | .input-error {
20 | border: #ff0000 2px solid !important;
21 | }
22 |
23 | .container label {
24 | margin-left: 10%;
25 | font-weight: 700;
26 | color: aqua;
27 | }
28 |
29 | .container button {
30 | margin-top: 3%;
31 | margin-left: 10%;
32 | width: 80%;
33 | }
34 |
35 | .container input {
36 | width: 80%;
37 | margin-left: 10%;
38 | }
39 |
40 | .box {
41 | width: 100%;
42 | background-image: url("http://images.unsplash.com/photo-1486312338219-ce68d2c6f44d?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MXwxMjA3fDB8MXxzZWFyY2h8MXx8am9ifHwwfHx8&ixlib=rb-1.2.1&q=80&w=1080");
43 | background-repeat: repeat;
44 | background-position: center;
45 | background-size: cover;
46 | background-color: rgba(194, 181, 194, 0.329);
47 | background-blend-mode: lighten;
48 | padding-top: 3%;
49 | padding-bottom: 15%;
50 | }
51 |
52 | @media only screen and (max-width:750px) {
53 |
54 | .register_card_custom {
55 | min-width: 80vw !important;
56 | font-size: 0.9rem !important;
57 | }
58 |
59 | .register_card_custom input {
60 | font-size: 0.8rem !important;
61 | }
62 |
63 | .error{
64 | font-size: 0.7rem;
65 | }
66 | }
67 |
68 |
--------------------------------------------------------------------------------
/server/middleware/auth_student.js:
--------------------------------------------------------------------------------
1 | const jwt = require("jsonwebtoken");
2 | const Student = require("../models/student.js");
3 | const { JWT_SECRET } = require("../keys");
4 |
5 | const auth_student = async (req, res, next) => {
6 | // try {
7 | // // Authentication type Bearer
8 | // const token = req.header("Authorization").replace("Bearer ", "");
9 | // const decoded = jwt.verify(token, JWT_SECRET);
10 | // const user = await Student.findOne({
11 | // _id: decoded._id,
12 | // "tokens.token": token,
13 | // });
14 | // if (!user) {
15 | // console.log("error");
16 | // throw new Error("error");
17 | // }
18 | // req.token = token;
19 | // req.user = user;
20 | // } catch (e) {
21 | // console.log(e);
22 | // return res.send({ error: "Please Authenticate" });
23 | // }
24 | // next();
25 |
26 | const { authorization } = req.headers;
27 | if (!authorization) {
28 | res.status(401).json({ error: "You must be logged in" });
29 | }
30 | const token = authorization.replace("Bearer ", "");
31 | jwt.verify(token, JWT_SECRET, (err, payload) => {
32 | if (err) {
33 | console.log(err);
34 | return res.status(401).json({ error: "you must be logged in" });
35 | }
36 |
37 | const { _id } = payload;
38 | console.log(_id);
39 | Student.findById(_id).then((userData) => {
40 | console.log(userData);
41 | req.user = userData;
42 | next();
43 | });
44 | });
45 | };
46 |
47 | module.exports = auth_student;
48 |
--------------------------------------------------------------------------------
/public/images/website-content.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/student-profile/StudentProfile/components/Project.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "../../profile.css";
3 | import { useState } from "react";
4 |
5 | import { Col, Row } from "react-bootstrap";
6 |
7 | const Project = ({ Project }) => {
8 | return (
9 |
10 | Project
11 | {Project &&
12 | Project.map((edu) => (
13 |
14 |
15 | Company
16 | {edu.ProjectTitle}
17 |
18 |
19 | Title:
20 | {edu.ProjectLink}
21 |
22 |
23 | StartDate
24 | {edu.StartDate}
25 |
26 |
27 | EndDate:
28 | {edu.EndDate}
29 |
30 |
31 |
32 | Description:
33 | {edu.Description}
34 |
35 |
36 | ))}
37 |
38 | );
39 | };
40 |
41 | export default Project;
42 |
--------------------------------------------------------------------------------
/src/components/student-profile/StudentProfile/components/Experience.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "../../profile.css";
3 | import { useState } from "react";
4 |
5 | import { Col, Row } from "react-bootstrap";
6 |
7 | const Experience = ({ Experience }) => {
8 | return (
9 |
10 | Experience
11 | {Experience && Experience.map(edu =>
12 |
13 | Company
14 | {edu.Company}
15 |
16 |
17 | Title:
18 | {edu.Title}
19 |
20 |
21 | StartDate
22 | {edu.StartDate}
23 |
24 |
25 | EndDate:
26 | {edu.EndDate}
27 |
28 |
29 | Location:
30 | {edu.Location}
31 |
32 |
33 | Description:
34 | {edu.Description}
35 |
36 |
)}
37 |
38 | );
39 | };
40 |
41 | export default Experience;
42 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "easyjobintern",
3 | "version": "0.1.0",
4 | "private": true,
5 | "proxy": "http://localhost:5000",
6 | "dependencies": {
7 | "@fortawesome/fontawesome-svg-core": "^1.2.35",
8 | "@material-ui/core": "^4.11.3",
9 | "@material-ui/icons": "^4.11.2",
10 | "@testing-library/jest-dom": "^5.11.9",
11 | "@testing-library/react": "^11.2.3",
12 | "@testing-library/user-event": "^12.6.0",
13 | "axios": "^0.21.1",
14 | "bootstrap": "^4.6.0",
15 | "concurrently": "^5.3.0",
16 | "jquery": "^3.6.0",
17 | "nodemailer": "^6.5.0",
18 | "popper.js": "^1.16.1",
19 | "react": "^17.0.1",
20 | "react-bootstrap": "^1.4.3",
21 | "react-bootstrap-icons": "^1.2.3",
22 | "react-dom": "^17.0.1",
23 | "react-hot-toast": "^1.0.2",
24 | "react-json-parser": "^0.2.1",
25 | "react-router-dom": "^5.2.0",
26 | "react-scripts": "4.0.1",
27 | "uuid": "^8.3.2",
28 | "web-vitals": "^0.2.4"
29 | },
30 | "scripts": {
31 | "start": "react-scripts start",
32 | "build": "react-scripts build",
33 | "test": "react-scripts test",
34 | "eject": "react-scripts eject",
35 | "server": "cd server && nodemon index.js",
36 | "dev": "concurrently \"npm run server\" \"npm run start\""
37 | },
38 | "eslintConfig": {
39 | "extends": [
40 | "react-app",
41 | "react-app/jest"
42 | ]
43 | },
44 | "browserslist": {
45 | "production": [
46 | ">0.2%",
47 | "not dead",
48 | "not op_mini all"
49 | ],
50 | "development": [
51 | "last 1 chrome version",
52 | "last 1 firefox version",
53 | "last 1 safari version"
54 | ]
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/server/routes/Category.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const router = express.Router();
3 |
4 | const Category = require("../models/Category");
5 | const slugify = require("slugify");
6 |
7 | // get all categories GET Request public
8 | router.get("/all", (req, res) => {
9 | Category.find({}).exec((err, data) => {
10 | if (err) {
11 | return res.status(400).json({
12 | error: err,
13 | });
14 | }
15 | res.json(data);
16 | });
17 | });
18 |
19 | // Create Category POST Request Admin Only
20 | router.post("/", (req, res) => {
21 | const { name } = req.body;
22 | let slug = slugify(name).toLowerCase();
23 |
24 | let category = new Category({ name, slug });
25 |
26 | category.save((err, data) => {
27 | if (err) {
28 | return res.status(400).json({ error: err });
29 | }
30 | res.json(data);
31 | });
32 | });
33 |
34 | // get single Category GET Request public
35 | router.get("/:slug", (req, res) => {
36 | const slug = req.params.slug.toLowerCase();
37 | Category.findOne({ slug }).exec((err, category) => {
38 | if (err) {
39 | return res.status(400).json({
40 | error: err,
41 | });
42 | }
43 | res.json({ category });
44 | });
45 | });
46 |
47 | // delete Category DELETE Request Admin only
48 | router.delete("/:slug", (req, res) => {
49 | const slug = req.params.slug.toLowerCase();
50 |
51 | Category.findOneAndDelete({ slug }, (err, docs) => {
52 | if (err) {
53 | return res.status(400).json({ error: err });
54 | }
55 | res.json({ message: "Deleted the Category Successfully" });
56 | });
57 | });
58 |
59 | module.exports = router;
60 |
--------------------------------------------------------------------------------
/server/utils/email.js:
--------------------------------------------------------------------------------
1 | const nodemailer = require('nodemailer');
2 |
3 | const email = (name, mail, mobile) => {
4 | const mailTransporter = nodemailer.createTransport({
5 | service: 'SendGrid',
6 | auth: {
7 | user: process.env.EMAIL_USERNAME,
8 | pass: process.env.EMAIL_PASSWORD
9 | }
10 | });
11 |
12 | const send = async subject => {
13 | // 1) define the email options
14 | const mailOptions = {
15 | from: 'Easy Job Intern',
16 | to: mail,
17 | subject,
18 | text: `Hello ${name}.\nWe welcome you to the Easy Job Intern.\n\nEasy Job Intern is a platform which provides the best job and internship opportunities. Companies can post here open application for jobs and internships so students can make their own profile and apply in multiple companies.\n\nYour account details are:\n
19 | Name: ${name}\nEmail: ${mail}\nMobile: ${mobile}\n\nWe’d love to hear what you think of Bunk Manager and if there is anything we can improve. If you have any questions, please reply to this email. We're always happy to help!\n\nEasy Job Intern Team`
20 | };
21 |
22 | // 2) create a transport and send email
23 | await mailTransporter.sendMail(mailOptions, (err,data) => {
24 | if(err) console.log(err);
25 | else console.log('Email sent successfully');
26 | });
27 | }
28 |
29 | //For sending welcome email anytime a new user sign up
30 | const sendWelcome = async () => {
31 | await send('Welcome to Easy Job Intern!');
32 | };
33 |
34 | //We can use this same function for more emails too
35 | };
36 |
37 | module.exports = email;
--------------------------------------------------------------------------------
/server/controller/student_notification.js:
--------------------------------------------------------------------------------
1 | const Internship = require("../models/Internship");
2 | const Job = require("../models/Job");
3 | const FresherJob = require("../models/Freshers");
4 | const Application = require("../models/application");
5 | const Notification = require("../models/student_notification");
6 |
7 | const ObjectID = require("mongodb").ObjectID;
8 |
9 | exports.getNotifications = async (req, res) => {
10 | try {
11 | const notifications = await Notification.find({
12 | notificationFor: req.user._id,
13 | status: "unread",
14 | }).sort("-createdAt");
15 |
16 | if (!notifications || notifications.length === 0) {
17 | return res.status(200).send({ message: "no new notifications" });
18 | }
19 |
20 | return res.status(200).send(notifications);
21 | } catch (e) {
22 | console.log(e);
23 | return res.status(400).send({ message: "something went wrong!" });
24 | }
25 | };
26 |
27 | exports.getNotification = async (req, res) => {
28 | try {
29 | const notification = await Notification.findOne({ _id: req.params.id });
30 | if (!ObjectID.isValid(req.params.id)) {
31 | return res.status(400).send({ message: "invalid notification id" });
32 | }
33 | if (!notification) {
34 | return res.status(400).send({ message: "notification does not exist!" });
35 | }
36 |
37 | if (notification.status === "unread") {
38 | console.log("in");
39 | notification.status = "read";
40 | notification.save();
41 | }
42 |
43 | return res.status(200).send(notification);
44 | } catch (e) {
45 | console.log(e);
46 | return res.status(400).send({ message: "something went wrong!" });
47 | }
48 | };
49 |
--------------------------------------------------------------------------------
/server/models/Freshers.js:
--------------------------------------------------------------------------------
1 | const mongoose = require("mongoose");
2 | const Schema = mongoose.Schema;
3 | const { ObjectId } = mongoose.Schema.Types;
4 |
5 | const FreshersJobSchema = new Schema(
6 | {
7 | companyName: {
8 | type: String,
9 | required: true,
10 | },
11 | description: {
12 | type: String,
13 | required: true,
14 | },
15 | location: {
16 | type: String,
17 | required: true,
18 | },
19 | stream: {
20 | type: String,
21 | required: true,
22 | },
23 | industry: {
24 | type: String,
25 | required: true,
26 | },
27 | salary: {
28 | type: String,
29 | required: true,
30 | },
31 | techstack: {
32 | type: [String],
33 | required: true,
34 | },
35 | lastDate: {
36 | type: Date,
37 | required: true,
38 | },
39 | startDate: {
40 | type: Date,
41 | required: true,
42 | },
43 | createdBy: {
44 | type: ObjectId,
45 | ref: "Employer",
46 | },
47 | role: {
48 | type: String,
49 | required: true,
50 | },
51 | vacancies: {
52 | type: Number,
53 | required: true,
54 | },
55 | workFromHome: {
56 | type: Boolean,
57 | required: true
58 | },
59 | partTimeAllowed: {
60 | type: Boolean,
61 | required: true
62 | },
63 | prerequisites:{
64 | type: [String],
65 | required:true,
66 | }
67 | // bookmarkedBy: [
68 | // {
69 | // type: ObjectId,
70 | // ref: "Student",
71 | // },
72 | // ],
73 | },
74 | { timestamps: true }
75 | );
76 |
77 | const FreshersJob = mongoose.model("FreshersJob", FreshersJobSchema);
78 |
79 | module.exports = FreshersJob;
80 |
--------------------------------------------------------------------------------
/src/components/student-profile/StudentProfile/components/General.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "../../profile.css";
3 | import { useState } from "react";
4 |
5 | import { Col, Row } from "react-bootstrap";
6 |
7 | const General = ({ general }) => {
8 | return (
9 |
10 | General
11 |
12 |
13 | First Name:
14 | {general.FirstName}
15 |
16 |
17 | Last Name:
18 | {general.LastName}
19 |
20 |
21 | Address:
22 | {general.Address}
23 |
24 |
25 | Github Link:
26 | {general.GithubLink}
27 |
28 |
29 | LinkedInLink:
30 | {general.LinkedInLink}
31 |
32 | Other Profile Link:
33 | {general.OtherProfileLink &&
34 | general.OtherProfileLink.map((link) => (
35 |
36 | {link && link.ProfileLink}
37 |
38 | ))}
39 |
40 |
41 | );
42 | };
43 |
44 | export default General;
45 |
--------------------------------------------------------------------------------
/src/components/student-profile/StudentProfile/components/Education.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "../../profile.css";
3 | import { useState } from "react";
4 |
5 | import { Col, Row } from "react-bootstrap";
6 |
7 | const Education = ({ Education }) => {
8 | return (
9 |
10 | Education
11 |
12 |
13 | School
14 | {Education.School}
15 |
16 |
17 | Degree:
18 | {Education.Degree}
19 |
20 |
21 | FieldOfStudy:
22 | {Education.FieldOfStudy}
23 |
24 |
25 | Github Link:
26 | {Education.GithubLink}
27 |
28 |
29 | LinkedInLink:
30 | {Education.LinkedInLink}
31 |
32 | Other Profile Link:
33 | {Education.OtherProfileLink &&
34 | Education.OtherProfileLink.map((link) => (
35 |
36 | {link && link.ProfileLink}
37 |
38 | ))}
39 |
40 |
41 | );
42 | };
43 |
44 | export default Education;
45 |
--------------------------------------------------------------------------------
/server/models/Job.js:
--------------------------------------------------------------------------------
1 | const mongoose = require("mongoose");
2 | const Schema = mongoose.Schema;
3 | const { ObjectId } = mongoose.Schema.Types;
4 |
5 | const JobSchema = new Schema(
6 | {
7 | companyName: {
8 | type: String,
9 | required: true,
10 | },
11 | description: {
12 | type: String,
13 | required: true,
14 | },
15 | location: {
16 | type: String,
17 | required: true,
18 | },
19 | stream: {
20 | type: String,
21 | required: true,
22 | },
23 | industry: {
24 | type: String,
25 | required: true,
26 | },
27 | salary: {
28 | type: String,
29 | required: true,
30 | },
31 | techstack: {
32 | type: [String],
33 | required: true,
34 | },
35 | lastDate: {
36 | type: Date,
37 | required: true,
38 | },
39 | startDate: {
40 | type: Date,
41 | required: true,
42 | },
43 | experience: {
44 | type: Number,
45 | required: true,
46 | },
47 | createdBy: {
48 | type: ObjectId,
49 | ref: "Employer",
50 | },
51 | role: {
52 | type: String,
53 | required: true,
54 | },
55 | vacancies: {
56 | type: Number,
57 | required: true,
58 | },
59 | workFromHome: {
60 | type: Boolean,
61 | required: true
62 | },
63 | partTimeAllowed: {
64 | type: Boolean,
65 | required: true
66 | },
67 | prerequisites:{
68 | type: [String],
69 | required:true,
70 | }
71 | // bookmarkedBy: [
72 | // {
73 | // type: ObjectId,
74 | // ref: "Student",
75 | // },
76 | // ],
77 | },
78 | { timestamps: true }
79 | );
80 |
81 | const Job = mongoose.model("Job", JobSchema);
82 |
83 | module.exports = Job;
84 |
--------------------------------------------------------------------------------
/src/components/Jobs/JobCompanyName.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Link, useHistory, useParams } from "react-router-dom";
4 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
5 |
6 | const JobCompanyName = () => {
7 | const history = useHistory();
8 | const [names, setNames] = useState();
9 | useEffect(() => {
10 | axios({
11 | method: "get",
12 | url: `http://localhost:5000/user/companyName-Job`,
13 | headers: {
14 | Authorization: "Bearer " + localStorage.getItem("jwt"),
15 | },
16 | })
17 | .then((res) => {
18 | console.log(res);
19 | if (res.data.error) {
20 | console.log(res.data.error);
21 | // alert(res.data.error);
22 | // const notify = () => toast(res.data.error);
23 | // notify();
24 | } else {
25 | console.log(res.data.Jobs);
26 | setNames(res.data.Jobs);
27 | console.log(names);
28 | }
29 | })
30 | .catch((err) => {
31 | // setLoading(false);
32 | console.log("Error: ", err);
33 | });
34 | }, []);
35 |
36 | console.log(names);
37 | return (
38 |
39 |
Jobs
40 |
41 | {names &&
42 | names.map((name) => (
43 |
44 |
47 | history.push(`/companyName-job/${name._id}`)
48 | }
49 | >
50 | {name._id}
51 |
52 |
53 | ))}
54 |
55 |
56 | );
57 | };
58 |
59 | export default JobCompanyName;
60 |
--------------------------------------------------------------------------------
/src/components/Internships/InternshipCompanyNames.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Link, useHistory, useParams } from "react-router-dom";
4 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
5 |
6 | const InternshipCompanyName = () => {
7 | const history = useHistory();
8 | const [names, setNames] = useState();
9 | useEffect(() => {
10 | axios({
11 | method: "get",
12 | url: `http://localhost:5000/user/companyName-internship`,
13 | headers: {
14 | Authorization: "Bearer " + localStorage.getItem("jwt"),
15 | },
16 | })
17 | .then((res) => {
18 | console.log(res);
19 | if (res.data.error) {
20 | console.log(res.data.error);
21 | // alert(res.data.error);
22 | // const notify = () => toast(res.data.error);
23 | // notify();
24 | } else {
25 | console.log(res.data.internships);
26 | setNames(res.data.internships);
27 | console.log(names);
28 | }
29 | })
30 | .catch((err) => {
31 | // setLoading(false);
32 | console.log("Error: ", err);
33 | });
34 | }, []);
35 |
36 | console.log(names);
37 | return (
38 |
39 |
Internships
40 |
41 | {names &&
42 | names.map((name) => (
43 |
44 |
47 | history.push(`/companyName-internship/${name._id}`)
48 | }
49 | >
50 | {name._id}
51 |
52 |
53 | ))}
54 |
55 |
56 | );
57 | };
58 |
59 | export default InternshipCompanyName;
60 |
--------------------------------------------------------------------------------
/src/components/FreshersJob/FreshersJobCompanyName.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Link, useHistory, useParams } from "react-router-dom";
4 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
5 |
6 | const FreshersJobCompanyName = () => {
7 | const history = useHistory();
8 | const [names, setNames] = useState();
9 | useEffect(() => {
10 | axios({
11 | method: "get",
12 | url: `http://localhost:5000/user/companyName-freshersjob`,
13 | headers: {
14 | Authorization: "Bearer " + localStorage.getItem("jwt"),
15 | },
16 | })
17 | .then((res) => {
18 | console.log(res);
19 | if (res.data.error) {
20 | console.log(res.data.error);
21 | // alert(res.data.error);
22 | // const notify = () => toast(res.data.error);
23 | // notify();
24 | } else {
25 | console.log(res.data.FreshersJobs);
26 | setNames(res.data.FreshersJobs);
27 | console.log(names);
28 | }
29 | })
30 | .catch((err) => {
31 | // setLoading(false);
32 | console.log("Error: ", err);
33 | });
34 | }, []);
35 |
36 | console.log(names);
37 | return (
38 |
39 |
Fresher's Jobs
40 |
41 | {names &&
42 | names.map((name) => (
43 |
44 |
47 | history.push(`/freshers/companyName/${name._id}`)
48 | }
49 | >
50 | {name._id}
51 |
52 |
53 | ))}
54 |
55 |
56 | );
57 | };
58 |
59 | export default FreshersJobCompanyName;
60 |
--------------------------------------------------------------------------------
/server/models/Internship.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const Schema = mongoose.Schema;
3 | const {ObjectId} = mongoose.Schema.Types;
4 |
5 | const internshipSchema = new Schema({
6 | companyName:{
7 | type: String,
8 | required:true,
9 | },
10 | description:{
11 | type: String,
12 | required:true,
13 | },
14 | location:{
15 | type: String,
16 | required:true,
17 | },
18 | industry:{
19 | type: String,
20 | required:true,
21 | },
22 | stream:{
23 | type: String,
24 | required:true,
25 | },
26 | stipend:{
27 | type: String,
28 | required:true,
29 | },
30 | techstack:{
31 | type: [String],
32 | required:true,
33 | },
34 | lastDate:{
35 | type: Date,
36 | required:true,
37 | },
38 | duration:{
39 | type: String,
40 | required:true,
41 | },
42 | startDate:{
43 | type: Date,
44 | required:true,
45 | },
46 | endDate:{
47 | type: Date,
48 | required:true,
49 | },
50 | createdBy: {
51 | type: ObjectId,
52 | ref: "Employer"
53 | },
54 | role: {
55 | type: String,
56 | required: true
57 | },
58 | vacancies: {
59 | type: Number,
60 | required: true
61 | },
62 | workFromHome: {
63 | type: Boolean,
64 | required: true
65 | },
66 | partTimeAllowed: {
67 | type: Boolean,
68 | required: true
69 | },
70 | withJobOffer: {
71 | type: Boolean,
72 | },
73 | prerequisites:{
74 | type: [String],
75 | required:true,
76 | }
77 | // bookmarkedBy: [{
78 | // type: ObjectId,
79 | // ref: 'Student'
80 | // }]
81 | }, {timestamps: true})
82 |
83 | const Internship = mongoose.model('Internship',internshipSchema);
84 |
85 | module.exports = Internship;
--------------------------------------------------------------------------------
/src/components/Error/Error.css:
--------------------------------------------------------------------------------
1 | * {
2 | margin: 0;
3 | padding: 0;
4 | box-sizing: border-box;
5 | font-family: Arial, Helvetica, sans-serif;
6 | }
7 | .errors {
8 | height: 70vh;
9 | text-align: center;
10 | display: flex;
11 | flex-direction: column;
12 | justify-content: center;
13 | align-items: center;
14 | text-shadow: 1px 2px 3px #2b5d61;
15 | background-color: #052224;
16 | color: #798a8b;
17 | }
18 | .errors h1,
19 | button,
20 | p {
21 | align-items: center;
22 | }
23 |
24 | .error-img {
25 | margin-top: -10%;
26 | margin-bottom: 0%;
27 | animation: up-down 1s ease-in-out infinite alternate-reverse both;
28 | width: 500px;
29 | height: 500px;
30 | }
31 |
32 | @-webkit-keyframes up-down {
33 | 0% {
34 | transform: translateY(15px);
35 | }
36 | 100% {
37 | transform: translateY(-15px);
38 | }
39 | }
40 | @keyframes up-down {
41 | 0% {
42 | transform: translateY(15px);
43 | }
44 | 100% {
45 | transform: translateY(-15px);
46 | }
47 | }
48 |
49 | .error-btn {
50 | background-color: #798a8b;
51 | color: white;
52 | box-shadow: rgba(50, 50, 93, 0.25) 0px 6px 12px -2px,
53 | rgba(0, 0, 0, 0.3) 0px 3px 7px -3px;
54 | border-radius: 1rem;
55 | font-size: 1.5rem;
56 | margin-top: -3%;
57 | margin-bottom: 4%;
58 | padding: 3% auto 3%;
59 | border: 2px solid #fff;
60 | }
61 |
62 | .error-para {
63 | color: yellow;
64 | font-size: 1.5em;
65 | }
66 | .error-heading {
67 | text-shadow: rgb(178, 169, 143) 0px 3px 0px, rgba(0, 0, 0, 0.15) 0px 14px 10px,
68 | rgba(0, 0, 0, 0.1) 0px 24px 2px, rgba(0, 0, 0, 0.1) 0px 34px 30px;
69 | color: #798a8b;
70 | letter-spacing: normal;
71 | font-size: 3.5em;
72 | margin-top: -6%;
73 | font-weight: normal;
74 | }
75 | @media only screen and (max-width:767px) {
76 | .error-img {
77 | margin-top: -20%;
78 | }
79 | .error-heading {
80 | font-size: 3em;
81 | margin-top: -10%;
82 | }
83 | }
--------------------------------------------------------------------------------
/src/utils/checkValidation.js:
--------------------------------------------------------------------------------
1 | //function which takes in the value of the input field and the validation rules(rules as dictionary)
2 | //and currentPassword in case of confirmedPassword field and returns a error Message and a boolean value if theinput is valid or not
3 | const checkValidity = (value, rules, currentPassword) => {
4 | let errorMessage = "";
5 | let isValid = true;
6 |
7 | if (!rules) {
8 | return true;
9 | }
10 |
11 | if (rules.required) {
12 | isValid = value.trim() !== "" && isValid;
13 | if (!isValid) {
14 | errorMessage = "Please fill the required field.";
15 | }
16 | }
17 |
18 | if (rules.minLength) {
19 | isValid = value.length >= rules.minLength && isValid;
20 | if (!isValid) {
21 | errorMessage =
22 | "Required field length should be equal to or greater than" + rules.minLength;
23 | }
24 | }
25 |
26 | if (rules.maxLength) {
27 | isValid = value.length <= rules.maxLength && isValid;
28 | if (!isValid) {
29 | errorMessage =
30 | "Required field length should be less than " + rules.maxLength;
31 | }
32 | }
33 |
34 | if (rules.Length) {
35 | isValid = value.length === rules.Length && isValid;
36 | if (!isValid) {
37 | errorMessage = "Required field length should be " + rules.Length;
38 | }
39 | }
40 |
41 | if (rules.isEmail) {
42 | const pattern = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/;
43 | isValid = pattern.test(value) && isValid;
44 | if (!isValid) {
45 | errorMessage = "Required field should be a email";
46 | }
47 | }
48 | if (rules.isNumeric) {
49 | const pattern = /^\d+$/;
50 | isValid = pattern.test(value) && isValid;
51 | if (!isValid) {
52 | errorMessage = "Required field should be a number";
53 | }
54 | }
55 |
56 | if (rules.checkPassword) {
57 | isValid = value === currentPassword && isValid;
58 | if (!isValid) {
59 | errorMessage = "Password donot match!";
60 | }
61 | }
62 |
63 | return [isValid, errorMessage];
64 | };
65 |
66 | export default checkValidity;
67 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 |
31 | You need to enable JavaScript to run this app.
32 |
33 |
43 |
44 |
45 |
--------------------------------------------------------------------------------
/server/controller/employer_notification.js:
--------------------------------------------------------------------------------
1 | const Internship = require("../models/Internship");
2 | const Job = require('../models/Job')
3 | const FresherJob = require('../models/Freshers')
4 | const Application = require("../models/application");
5 | const Notification = require("../models/employer_notification")
6 |
7 | const ObjectID = require('mongodb').ObjectID;
8 |
9 | exports.getNotifications = async(req, res) => {
10 | try{
11 | const notifications = await Notification.find({notificationFor: req.user._id, status: "unread"})
12 | .sort("-createdAt")
13 |
14 | if(!notifications || notifications.length===0){
15 | return res.status(200).send({message: "no new notifications"})
16 | }
17 |
18 | return res.status(200).send(notifications)
19 |
20 | }
21 |
22 | catch(e){
23 | console.log(e)
24 | return res.status(400).send({message: "something went wrong!"})
25 | }
26 |
27 | }
28 |
29 | exports.getNotification = async(req, res) => {
30 | try{
31 | const notification = await Notification.findOne({_id: req.params.id})
32 | if(!ObjectID.isValid(req.params.id)){
33 | return res
34 | .status(400)
35 | .send({message: "invalid notification id"});
36 | }
37 | if(!notification){
38 | return res
39 | .status(400)
40 | .send({message: "notification does not exist!"});
41 | }
42 |
43 | if(notification.notificationFor.toString() !== req.user._id.toString()){
44 | return res
45 | .status(400)
46 | .send({message: "notification not intended to you!"});
47 | }
48 |
49 | if(notification.status === 'unread'){
50 | console.log("in")
51 | notification.status = 'read'
52 | notification.save()
53 | }
54 |
55 | return res.status(200).send(notification)
56 |
57 | }
58 | catch(e){
59 | console.log(e)
60 | return res.status(400).send({message: "something went wrong!"})
61 | }
62 |
63 | }
--------------------------------------------------------------------------------
/server/models/employer.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const Schema = mongoose.Schema;
3 | const bcrypt = require("bcryptjs");
4 | const {JWT_SECRET} = require('../keys');
5 | const jwt = require("jsonwebtoken");
6 | const employerSchema = new Schema({
7 | companyName:{
8 | type: String,
9 | required:true,
10 | // maxlength:40
11 | },
12 | personName:{
13 | type:String,
14 | required: true,
15 | // unique:true
16 | },
17 | email:{
18 | type:String,
19 | required:true,
20 | // minlength:10,
21 | // maxlength:10
22 | },
23 | contact:{
24 | type:String,
25 | required: true
26 | },
27 | password:{
28 | type:String,
29 | required: true
30 | },
31 | tokens:[{
32 | token:{
33 | type:String,
34 | required:true
35 | }
36 | }],
37 | status: {
38 | type: String,
39 | enum: ['Pending', 'Active'],
40 | default: 'Pending',
41 | },
42 | confirmationCode: {
43 | type: String,
44 | unique: true
45 | }
46 | });
47 |
48 |
49 | employerSchema.methods.generateAuthToken = async function(){
50 | const employer = this
51 | const token = jwt.sign({_id: employer._id}, JWT_SECRET)
52 | employer.tokens = employer.tokens.concat({token:token})
53 | await employer.save()
54 | return token
55 | }
56 |
57 | employerSchema.statics.findByCredentials = async(email, password) =>{
58 | const employer = await Employer.findOne({email: email})
59 | if(!employer){
60 | throw new Error('Invalid email or password')
61 | }
62 | const isMatch = await bcrypt.compare(password, employer.password)
63 |
64 | if(!isMatch){
65 | throw new Error('Invalid email or password')
66 | }
67 |
68 | return employer
69 | }
70 |
71 | employerSchema.pre('save',async function (next){
72 | const employer = this
73 | if(employer.isModified('password')){
74 | employer.password = await bcrypt.hash(employer.password, 10)
75 | }
76 | next()
77 |
78 | })
79 |
80 | const Employer = mongoose.model('Employer',employerSchema);
81 |
82 | module.exports = Employer;
--------------------------------------------------------------------------------
/server/routes/general.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const router = express.Router();
3 | const {
4 | getAllInternships,
5 | getInternshipsByLocation,
6 | getInternshipsByIndustry,
7 | getInternshipsByStream,
8 | getInternhsipsByLocations,
9 | getInternhsipsByStreams,
10 | getInternhsipsByIndustries,
11 | getInternshipsByCompanyName,
12 | getInternshipCompanyNames,
13 | } = require("../controller/internships");
14 | const { getAllJobs, getJobsByLocations, getJobsByStreams, getJobsByIndustries, getJobsByCompanyName, getJobsCompanyNames } = require("../controller/jobs");
15 | const { getAllFreshersJobs, getFreshersJobsByLocations, getFreshersJobsByStreams, getFreshersJobsByIndustries, getFreshersJobsByCompanyName, getFreshersJobsCompanyNames } = require("../controller/freshersjob");
16 |
17 | const auth_employer = require("../middleware/auth_employer");
18 |
19 | router.get("/all-internships", getAllInternships);
20 | router.get("/all-jobs", getAllJobs);
21 | router.get("/all-freshersjobs", getAllFreshersJobs);
22 |
23 | router.get("/location-internship/:location", getInternshipsByLocation);
24 | router.get("/industry-internship/:industry", getInternshipsByIndustry);
25 | router.get("/stream-internship/:stream", getInternshipsByStream);
26 | router.get("/companyName-internship/:companyName", getInternshipsByCompanyName);
27 | router.get("/companyName-internship/", getInternshipCompanyNames);
28 |
29 | router.get("/internship/location", getInternhsipsByLocations);
30 | router.get("/internship/stream", getInternhsipsByStreams);
31 | router.get("/internship/industry", getInternhsipsByIndustries);
32 |
33 | router.get("/job/location", getJobsByLocations);
34 | router.get("/job/stream", getJobsByStreams);
35 | router.get("/job/industry", getJobsByIndustries);
36 | router.get("/job/companyName/:companyName", getJobsByCompanyName);
37 | router.get("/companyName-Job/", getJobsCompanyNames);
38 |
39 | router.get("/freshersjob/location", getFreshersJobsByLocations);
40 | router.get("/freshersjob/stream", getFreshersJobsByStreams);
41 | router.get("/freshersjob/industry", getFreshersJobsByIndustries);
42 | router.get("/freshersjob/companyName/:companyName", getFreshersJobsByCompanyName);
43 | router.get("/companyName-freshersjob/", getFreshersJobsCompanyNames);
44 |
45 |
46 | module.exports = router;
47 |
--------------------------------------------------------------------------------
/src/components/student-profile/Skills.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import "./profile.css";
3 | import { useState } from "react";
4 | import Button from "@material-ui/core/Button";
5 | import Icon from "@material-ui/core/Icon";
6 | import IconButton from "@material-ui/core/IconButton";
7 | import RemoveIcon from "@material-ui/icons/Remove";
8 | import AddIcon from "@material-ui/icons/Add";
9 | import Label from "./Label";
10 | import Input from "./Input";
11 |
12 | const Skills = ({ Skills, changeValue }) => {
13 | const [inputFields, setInputFields] = useState([{ Skill: "" }]);
14 |
15 | useEffect(() => {
16 | changeValue(inputFields, "Skills");
17 | }, [inputFields]);
18 |
19 | const handleSubmit = (e) => {
20 | e.preventDefault();
21 | console.log("InputFields", inputFields);
22 | };
23 |
24 | const handleChangeInput = (id, event) => {
25 | const newInputFields = inputFields.map((i) => {
26 | if (id === i.id) {
27 | i[event.target.name] = event.target.value;
28 | }
29 | return i;
30 | });
31 |
32 | setInputFields(newInputFields);
33 | };
34 |
35 | const handleAddFields = () => {
36 | setInputFields([...inputFields, { Skill: "" }]);
37 | };
38 |
39 | const handleRemoveFields = (id) => {
40 | const values = [...inputFields];
41 | values.splice(
42 | values.findIndex((value) => value.id === id),
43 | 1
44 | );
45 | setInputFields(values);
46 | };
47 |
48 | return (
49 |
77 | );
78 | };
79 |
80 | export default Skills;
81 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | server/node_modules
43 |
44 |
45 | jspm_packages/
46 |
47 | # Snowpack dependency directory (https://snowpack.dev/)
48 | web_modules/
49 |
50 | # TypeScript cache
51 | *.tsbuildinfo
52 |
53 | # Optional npm cache directory
54 | .npm
55 |
56 | # Optional eslint cache
57 | .eslintcache
58 |
59 | # Microbundle cache
60 | .rpt2_cache/
61 | .rts2_cache_cjs/
62 | .rts2_cache_es/
63 | .rts2_cache_umd/
64 |
65 | # Optional REPL history
66 | .node_repl_history
67 |
68 | # Output of 'npm pack'
69 | *.tgz
70 |
71 | # Yarn Integrity file
72 | .yarn-integrity
73 |
74 | # dotenv environment variables file
75 | .env
76 | .env.test
77 |
78 | # parcel-bundler cache (https://parceljs.org/)
79 | .cache
80 | .parcel-cache
81 |
82 | # Next.js build output
83 | .next
84 | out
85 |
86 | # Nuxt.js build / generate output
87 | .nuxt
88 | dist
89 |
90 | # Gatsby files
91 | .cache/
92 | # Comment in the public line in if your project uses Gatsby and not Next.js
93 | # https://nextjs.org/blog/next-9-1#public-directory-support
94 | # public
95 |
96 | # vuepress build output
97 | .vuepress/dist
98 |
99 | # Serverless directories
100 | .serverless/
101 |
102 | # FuseBox cache
103 | .fusebox/
104 |
105 | # DynamoDB Local files
106 | .dynamodb/
107 |
108 | # TernJS port file
109 | .tern-port
110 |
111 | # Stores VSCode versions used for testing VSCode extensions
112 | .vscode-test
113 |
114 | .yarn/cache
115 | .yarn/unplugged
116 | .yarn/build-state.yml
117 | .yarn/install-state.gz
118 | .pnp.*
119 |
--------------------------------------------------------------------------------
/src/components/student-profile/Other.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import "./profile.css";
3 | import { useState } from "react";
4 | import Button from "@material-ui/core/Button";
5 | import Icon from "@material-ui/core/Icon";
6 | import IconButton from "@material-ui/core/IconButton";
7 | import RemoveIcon from "@material-ui/icons/Remove";
8 | import AddIcon from "@material-ui/icons/Add";
9 | import Label from "./Label";
10 | import Input from "./Input";
11 |
12 | const Other = ({ Others, changeValue }) => {
13 | const [inputFields, setInputFields] = useState([{ Other: "" }]);
14 |
15 | useEffect(() => {
16 | changeValue(inputFields, "Other");
17 | }, [inputFields]);
18 |
19 | const handleSubmit = (e) => {
20 | e.preventDefault();
21 | console.log("InputFields", inputFields);
22 | };
23 |
24 | const handleChangeInput = (id, event) => {
25 | const newInputFields = inputFields.map((i, j) => {
26 | if (id === j) {
27 | i[event.target.name] = event.target.value;
28 | }
29 | return i;
30 | });
31 |
32 | setInputFields(newInputFields);
33 | };
34 |
35 | const handleAddFields = () => {
36 | setInputFields([...inputFields, { Other: "" }]);
37 | };
38 |
39 | const handleRemoveFields = (id) => {
40 | let values = [...inputFields];
41 | values = values.filter((val, j) => id != j);
42 | // values.splice(
43 | // values.findIndex((value) => value.j === id),
44 | // 1
45 | // );
46 | setInputFields(values);
47 | };
48 |
49 | return (
50 |
78 | );
79 | };
80 |
81 | export default Other;
82 |
--------------------------------------------------------------------------------
/src/components/student-profile/Achievments.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import "./profile.css";
3 | import { useState } from "react";
4 | import Button from "@material-ui/core/Button";
5 | import Icon from "@material-ui/core/Icon";
6 | import IconButton from "@material-ui/core/IconButton";
7 | import RemoveIcon from "@material-ui/icons/Remove";
8 | import AddIcon from "@material-ui/icons/Add";
9 | import Label from "./Label";
10 | import Input from "./Input";
11 |
12 | const Achievments = ({Achievments, changeValue}) => {
13 | const [inputFields, setInputFields] = useState([{ Achievment: "" }]);
14 |
15 | useEffect(() => {
16 | changeValue(inputFields, "Achievments");
17 | },[inputFields])
18 |
19 |
20 | const handleSubmit = (e) => {
21 | e.preventDefault();
22 | console.log("InputFields", inputFields);
23 | };
24 |
25 | const handleChangeInput = (id, event) => {
26 | const newInputFields = inputFields.map((i) => {
27 | if (id === i.id) {
28 | i[event.target.name] = event.target.value;
29 | }
30 | return i;
31 | });
32 |
33 | setInputFields(newInputFields);
34 | };
35 |
36 | const handleAddFields = () => {
37 | setInputFields([...inputFields, { Achievment: "" }]);
38 | };
39 |
40 | const handleRemoveFields = (id) => {
41 | const values = [...inputFields];
42 | values.splice(
43 | values.findIndex((value) => value.id === id),
44 | 1
45 | );
46 | setInputFields(values);
47 | };
48 |
49 | return (
50 |
78 | );
79 | };
80 |
81 | export default Achievments;
82 |
--------------------------------------------------------------------------------
/src/components/student-profile/Volunteer.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import "./profile.css";
3 | import { useState } from "react";
4 | import Button from "@material-ui/core/Button";
5 | import Icon from "@material-ui/core/Icon";
6 | import IconButton from "@material-ui/core/IconButton";
7 | import RemoveIcon from "@material-ui/icons/Remove";
8 | import AddIcon from "@material-ui/icons/Add";
9 | import Label from "./Label";
10 | import Input from "./Input";
11 |
12 | const Volunteer = ({ VolunteerExperience, changeValue }) => {
13 | const [inputFields, setInputFields] = useState([{ Volunteer: "" }]);
14 |
15 | useEffect(() => {
16 | changeValue(inputFields, "VolunteerExperience");
17 | },[inputFields])
18 |
19 |
20 | const handleSubmit = (e) => {
21 | e.preventDefault();
22 | console.log("InputFields", inputFields);
23 | };
24 |
25 | const handleChangeInput = (id, event) => {
26 | const newInputFields = inputFields.map((i) => {
27 | if (id === i.id) {
28 | i[event.target.name] = event.target.value;
29 | }
30 | return i;
31 | });
32 |
33 | setInputFields(newInputFields);
34 | };
35 |
36 | const handleAddFields = () => {
37 | setInputFields([...inputFields, { Volunteer: "" }]);
38 | };
39 |
40 | const handleRemoveFields = (id) => {
41 | const values = [...inputFields];
42 | values.splice(
43 | values.findIndex((value) => value.id === id),
44 | 1
45 | );
46 | setInputFields(values);
47 | };
48 |
49 | return (
50 |
78 | );
79 | };
80 |
81 | export default Volunteer;
82 |
--------------------------------------------------------------------------------
/src/components/student-profile/StudentProfile/ProfileView.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from "react";
2 | import "../profile.css";
3 | import { useState } from "react";
4 | import Button from "@material-ui/core/Button";
5 | import Icon from "@material-ui/core/Icon";
6 | import IconButton from "@material-ui/core/IconButton";
7 | import RemoveIcon from "@material-ui/icons/Remove";
8 | import AddIcon from "@material-ui/icons/Add";
9 |
10 | import Start from "../Start";
11 | import axios from "axios";
12 | import toast, { Toaster } from "react-hot-toast";
13 | import { useHistory } from "react-router";
14 | import { Col, Row } from "react-bootstrap";
15 | import General from "./components/General";
16 | import Education from "./components/Education";
17 | import Experience from "./components/Experience";
18 | import Project from "./components/Project";
19 |
20 | const ProfileView = () => {
21 | const [profile, setProfile] = useState();
22 |
23 | useEffect(() => {
24 | axios({
25 | method: "get",
26 | url: `http://localhost:5000/student/buildprofile/get`,
27 | headers: {
28 | Authorization: "Bearer " + localStorage.getItem("jwt"),
29 | },
30 | })
31 | .then((res) => {
32 | console.log(res);
33 | // setLoading(false);
34 | if (res.data.error) {
35 | console.log(res.data.error);
36 | // alert(res.data.error);
37 | const notify = () => toast(res.data.error);
38 | notify();
39 | } else {
40 | // console.log(res.data.Jobs);
41 | // res.data.profile.General.OtherProfileLink =
42 | res.data.profile.General.OtherProfileLink.forEach((link) => {
43 | link._id = null;
44 | });
45 | setProfile(res.data.profile);
46 | console.log(profile);
47 | }
48 | })
49 | .catch((err) => {
50 | // setLoading(false);
51 | console.log("Error: ", err);
52 | });
53 | }, []);
54 |
55 | console.log(profile);
56 |
57 | return (
58 |
59 |
60 | {profile && (
61 |
62 |
Student Profile
63 | {profile.General &&
}
64 | {profile.Education &&
}
65 | {profile.Experience &&
}
66 | {profile.Project &&
}
67 |
68 | )}
69 |
70 | );
71 | };
72 |
73 | export default ProfileView;
74 |
--------------------------------------------------------------------------------
/src/components/Internships/AllInternships.css:
--------------------------------------------------------------------------------
1 | body,
2 | html {
3 | overflow-x: hidden;
4 | }
5 | .internshipsOuterContainer {
6 | width: 90%;
7 | margin: auto;
8 | padding: 30px 10px;
9 | }
10 | .colPost {
11 | margin-bottom: 30px;
12 | }
13 | .cardPost {
14 | background-color: #52176d85;
15 | color: white;
16 | border-radius: 10px;
17 | height: 100%;
18 | }
19 | .titleOfPost {
20 | font-size: 1.7rem;
21 | font-weight: 900;
22 | text-align: left;
23 | }
24 | .subtitleOfPost {
25 | font-weight: 300;
26 | font-style: oblique;
27 | color: #ccc;
28 | text-align: left;
29 | padding: 5px 0 12px 0;
30 | font-size: 20px;
31 | }
32 | .subsubtitleOfPost {
33 | font-weight: 600;
34 | font-style: oblique;
35 | color: #ddd;
36 | text-align: left;
37 | padding-bottom: 20px;
38 | font-size: 17px;
39 | }
40 | .textPost {
41 | padding-top: 10px;
42 | font-weight: 300px;
43 | font-size: 15px;
44 | text-align: justify;
45 | }
46 | .itemPost {
47 | font-size: 14px;
48 | padding: 8px;
49 | background-color: inherit;
50 | border-color: #888;
51 | }
52 | .last {
53 | color: red;
54 | margin-bottom: 20px;
55 | }
56 | .tech {
57 | display: flex;
58 | flex-wrap: wrap;
59 | justify-content: space-evenly;
60 | }
61 | .TechStack {
62 | background-color: #7f56f0;
63 | /* border: 1px solid #88f; */
64 | padding: 10px;
65 | color: white;
66 | border-radius: 10px;
67 | margin: 10px 0;
68 | }
69 | .TechStack:hover {
70 | color: white;
71 | }
72 | .postOptions {
73 | float: right;
74 | padding: 0;
75 | color: #fff !important;
76 | }
77 | .postOptionsBtn {
78 | background-color: inherit !important;
79 | border: none;
80 | padding: 0;
81 | }
82 | .postOptionsBtn::after {
83 | content: none;
84 | }
85 | .postOptionsBtn:focus {
86 | box-shadow: none !important;
87 | }
88 | .optionMenu {
89 | min-width: fit-content !important;
90 | font-size: 1.4rem;
91 | background-color: #222;
92 | color: #fff !important;
93 | }
94 | .optionItem:hover,
95 | .optionItem:focus {
96 | background-color: #444 !important;
97 | }
98 | .optionsMenuIcon {
99 | color: #fff !important;
100 | }
101 | .parameter {
102 | color: white;
103 | width: 100%;
104 | background: #d6c20a;
105 | border-radius: 10px;
106 | text-decoration: none !important;
107 | padding: 10px;
108 | font-size: 2.5rem;
109 | margin: 30px 0 !important;
110 | font-weight: 700;
111 | text-transform: uppercase;
112 | color: #595661;
113 | }
114 | .companyHeading{
115 | font-size: 3rem;
116 | padding: 25px 0;
117 | font-family: Georgia, 'Times New Roman', Times, serif;
118 | text-decoration: none;
119 | font-weight: 800;
120 | }
121 |
122 | .COMPANYNAME {
123 | /* background: #888; */
124 | color: #d6c20a;
125 | margin: 20px 0;
126 | font-size: 2rem;
127 | }
128 | .NAME-company {
129 | width: 80%;
130 | /* background-color: rgb(34, 34, 34); */
131 | margin: auto;
132 | border-radius: 10px;
133 | border: 2px solid #d6c20a;
134 | box-shadow: 0px 7px 10px rgba(0, 0, 0, 0.5);
135 | cursor: pointer;
136 | }
137 |
--------------------------------------------------------------------------------
/server/routes/employer.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const router = express.Router();
3 | const {
4 | signup,
5 | signin,
6 | logout,
7 | logoutAll,
8 | signupConfirm,
9 | update,
10 | deleteEmployer,
11 | findEmployerById,
12 | viewStudent,
13 | addCompany,
14 | updateCompany,
15 | viewMyCompany
16 | } = require("../controller/employer.auth");
17 |
18 | const { createFreshersJob, updateFreshersJob, deleteFreshersJob, searchFresherJob, getFresherJobValues } = require("../controller/freshersjob");
19 | const { createInternship, updateInternship, getInternshipValues, deleteInternship, searchInternship } = require("../controller/internships");
20 | const { createJob, updateJob, deleteJob, searchJob, getJobValues } = require("../controller/jobs");
21 |
22 | const {approve, reject, employer_getPendingJobs, employer_getPendingFresherJobs} = require("../controller/applications")
23 | const auth_employer = require("../middleware/auth_employer");
24 |
25 | const {employer_getPendingInternships} = require('../controller/applications');
26 | const {getNotifications, getNotification} = require("../controller/employer_notification")
27 |
28 |
29 |
30 | router.post("/signup", signup);
31 | router.post("/signin", signin);
32 | router.get("/logout", auth_employer, logout);
33 | router.get("/logoutAll", auth_employer, logoutAll);
34 |
35 | router.post("/create-internship", auth_employer, createInternship);
36 | router.post("/create-job", auth_employer, createJob);
37 | router.post("/create-fresherjob", auth_employer, createFreshersJob);
38 | router.patch("/update", auth_employer, update);
39 |
40 | router.patch("/update-internship", auth_employer, updateInternship);
41 | router.get("/get-internship/:postId", auth_employer, getInternshipValues);
42 | router.patch("/update-job", auth_employer, updateJob);
43 | router.patch("/update-fresherjob", auth_employer, updateFreshersJob);
44 | router.get("/get-job/:postId", auth_employer, getJobValues);
45 | router.get("/get-freshersjob/:postId", auth_employer, getFresherJobValues);
46 |
47 | router.delete("/delete-internship", auth_employer, deleteInternship);
48 | router.delete("/delete-job", auth_employer, deleteJob);
49 | router.delete("/delete-freshersjob", auth_employer, deleteFreshersJob);
50 | router.get("/approve/:id", auth_employer, approve)
51 | router.get("/reject/:id", auth_employer, reject)
52 |
53 | router.get('/searchInternship', auth_employer, searchInternship)
54 |
55 |
56 | router.get('/searchJob', auth_employer, searchJob)
57 | router.get('/searchFresherJob', auth_employer, searchFresherJob)
58 | router.get('/confirm/:confirmationCode' , signupConfirm );
59 | router.get('/employerfetch/:id' , findEmployerById);
60 | router.delete('/deleteEmployer', auth_employer, deleteEmployer)
61 |
62 | router.get('/getPendingJobs', auth_employer, employer_getPendingJobs)
63 | router.get('/getPendingFresherJobs', auth_employer, employer_getPendingFresherJobs)
64 | router.get('/getPendingInternships', auth_employer, employer_getPendingInternships)
65 |
66 |
67 | router.get('/getNotification/:id', auth_employer, getNotification)
68 |
69 | router.get('/getNotifications', auth_employer, getNotifications)
70 |
71 |
72 | router.get('/viewStudent/:id', auth_employer, viewStudent)
73 |
74 | router.post('/addCompany', auth_employer, addCompany)
75 |
76 | router.patch('/updateCompany/:id', auth_employer, updateCompany)
77 | router.get('/viewMyCompany', auth_employer, viewMyCompany)
78 |
79 | module.exports = router;
80 |
--------------------------------------------------------------------------------
/src/components/FreshersJob/FreshersJobByCompanyName.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 | import toast, { Toaster } from "react-hot-toast";
5 | import { UserContext } from "../../App";
6 |
7 | import "../Internships/AllInternships.css";
8 | import FresherJobCard from "../../utils/UI/FresherJobCard/FresherJobCard";
9 | import { useParams } from "react-router";
10 | import { CompareArrows } from "@material-ui/icons";
11 | // import { Alert } from "bootstrap";
12 |
13 | const FreshersJobByCompanyName = () => {
14 | const { state, dispatch } = useContext(UserContext);
15 | const [freshersJobs, setFreshersJobs] = useState([]);
16 | const [loading, setLoading] = useState(true);
17 | const { companyName } = useParams();
18 |
19 | useEffect(() => {
20 | axios({
21 | method: "get",
22 | url: `http://localhost:5000/user/freshersJob/companyName/${companyName}`,
23 | headers: {
24 | Authorization: "Bearer " + localStorage.getItem("jwt"),
25 | },
26 | })
27 | .then((res) => {
28 | // console.log(res);
29 | setLoading(false);
30 | if (res.data.error) {
31 | // console.log(res.data.error);
32 | // alert(res.data.error);
33 | const notify = () => toast(res.data.error);
34 | notify();
35 | } else {
36 | // console.log(res.data.freshersjobs);
37 | setFreshersJobs(res.data.FreshersJobs);
38 | // console.log(freshersJobs);
39 | }
40 | })
41 | .catch((err) => {
42 | setLoading(false);
43 | console.log("Error: ", err);
44 | });
45 | }, [freshersJobs]);
46 |
47 | if (freshersJobs && freshersJobs[4]) {
48 | console.log(freshersJobs[4]);
49 | const t = new Date(freshersJobs[4].startDate).toString("YYYY-MM-DD");
50 | console.log(t);
51 | }
52 |
53 | return (
54 |
55 |
56 |
57 | {loading ? (
58 |
59 |
67 |
68 | ) : freshersJobs && !freshersJobs.length > 0 ? (
69 |
78 | No Fresher Jobs available right now
79 |
80 | ) : (
81 | freshersJobs &&
82 | freshersJobs.map((fresher) => {
83 | return (
84 |
88 |
89 |
90 | );
91 | })
92 | )}
93 |
94 |
95 | );
96 | };
97 | export default FreshersJobByCompanyName;
98 |
--------------------------------------------------------------------------------
/src/components/FreshersJob/AllFresherJob.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import {
4 | Col,
5 | Row,
6 | Spinner,
7 | Alert,
8 | } from "react-bootstrap";
9 | import toast, { Toaster } from "react-hot-toast";
10 | import { UserContext } from "../../App";
11 |
12 | import "../Internships/AllInternships.css";
13 | import FresherJobCard from "../../utils/UI/FresherJobCard/FresherJobCard";
14 | // import { Alert } from "bootstrap";
15 |
16 | const AllFreshersJobs = () => {
17 | const { state, dispatch } = useContext(UserContext);
18 | const [freshersJobs, setFreshersJobs] = useState([]);
19 | const [loading, setLoading] = useState(true);
20 |
21 |
22 |
23 |
24 | useEffect(() => {
25 | axios({
26 | method: "get",
27 | url: "http://localhost:5000/user/all-freshersjobs",
28 | headers: {
29 | Authorization: "Bearer " + localStorage.getItem("jwt"),
30 | },
31 | })
32 | .then((res) => {
33 | // console.log(res);
34 | setLoading(false);
35 | if (res.data.error) {
36 | // console.log(res.data.error);
37 | // alert(res.data.error);
38 | const notify = () => toast(res.data.error);
39 | notify();
40 | } else {
41 | // console.log(res.data.freshersjobs);
42 | setFreshersJobs(res.data.freshersjobs);
43 | // console.log(freshersJobs);
44 | }
45 | })
46 | .catch((err) => {
47 | setLoading(false);
48 | console.log("Error: ", err);
49 | });
50 | }, [freshersJobs]);
51 |
52 | if (freshersJobs && freshersJobs[4]) {
53 | console.log(freshersJobs[4]);
54 | const t = new Date(freshersJobs[4].startDate).toString("YYYY-MM-DD");
55 | console.log(t);
56 | }
57 |
58 |
59 |
60 | return (
61 |
62 |
63 |
64 | {loading ? (
65 |
66 |
74 |
75 | ) : freshersJobs && !freshersJobs.length > 0 ? (
76 |
85 | No Fresher Jobs available right now
86 |
87 | ) : (
88 | freshersJobs &&
89 | freshersJobs.map((fresher) => {
90 | return (
91 |
95 |
99 |
100 | );
101 | })
102 | )}
103 |
104 |
105 | );
106 | };
107 | export default AllFreshersJobs;
108 |
--------------------------------------------------------------------------------
/src/components/privacy-policy/privacy-policy.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import './privacy-policy.css';
3 |
4 | export default function PrivacyPolicy() {
5 | return (
6 |
7 |
10 |
11 |
Overview
12 |
We respect your privacy and strive to provide a safe, secure user experience. This privacy statement sets forth our online data collection and usage policies and practices. By using our services, you consent to the policies and practices described in this statement. Your data will be stored and processed on our servers which may be inside or outside India and your usage of the Services constitutes consent to the transfer of your data out of India. Our Services may contain links to other website over which we have no control and we are not responsible for the privacy policies or practices of other websites to which you navigate from our Services. We encourage you to review the privacy policies of these other websites so you can understand how they collect, use and share your information. This privacy statement applies solely to the information we collect on easy job intern.com and its sub-domains and not to information collected otherwise.
13 |
Sharing of Information
14 |
15 | If you are an employer, information related to your internship and/or job post such as organisation name, URL, and description, job description, skills required etc. is published online and can be viewed by anyone visiting Easy Job Intern site. This information may also appear in search websites like Google. Further, we may share your personal information (including contact details) with students who apply to your internships and/or jobs or get hired by you through Easy Job Intern.
16 | If you are an applicant, we may share your personal information with employers whose internships and/or jobs you apply to or whose internships and/or jobs we feel may be relevant for you or who may come across your profile through a search of our user base.
17 | When we send you an email or SMS, we use a third party service. In this case, it becomes necessary to pass on your email address/ mobile number to the third party. While we only work with reputed service providers in this regard, we are not responsible for the use made by them of this information.
18 |
19 |
Security of Information
20 |
We have implemented generally accepted industry standards in terms of security measures to protect your information on Internshala. The third party payment service providers (payment gateways) are all validated as compliant with the payment card industry standard (generally referred to as PCI compliant service providers).
21 |
22 | While we try our best to safeguard information, there may be factors beyond our control that may result in unwanted disclosure of information. We assume no liability or responsibility for disclosure of your information due to causes beyond our control.
23 |
24 | In order to keep personal information secure, you must not share your password or other security information (for example, unique keys) of your Internshala account with anyone. If you are using a shared computer, please make sure you logout after every use. If we receive instructions using your email and password, we will consider that the instructions have been authorized by you.
25 |
26 |
27 | )
28 | }
--------------------------------------------------------------------------------
/server/routes/student.js:
--------------------------------------------------------------------------------
1 | const express = require("express");
2 | const router = express.Router();
3 | const {
4 | signup,
5 | signin,
6 | update,
7 | logout,
8 | logoutAll,
9 | signupConfirm,
10 | deleteStudent,
11 | saveCompany,
12 | findStudentById,
13 | viewCompany,
14 | } = require("../controller/student.auth");
15 | const auth_student = require("../middleware/auth_student");
16 |
17 | const {
18 | searchFilterInternships,
19 | bookmarkInternship,
20 | getBookmarkedInternships,
21 | searchBookmarkedInternship,
22 | } = require("../controller/internships");
23 | const {
24 | searchFilterJobs,
25 | bookmarkJob,
26 | getBookmarkedJobs,
27 | searchBookmarkedJob,
28 | } = require("../controller/jobs");
29 | const {
30 | searchFilterFreshersJobs,
31 | bookmarkFresherJob,
32 | getBookmarkedFresherJobs,
33 | searchBookmarkedFresherJob,
34 | } = require("../controller/freshersjob");
35 |
36 | const {
37 | apply,
38 | student_getPendingApplications,
39 | student_getApprovedApplications,
40 | student_getRejectedApplications,
41 | } = require("../controller/applications");
42 | const {
43 | getNotifications,
44 | getNotification,
45 | } = require("../controller/student_notification");
46 | const { addProfileBuilder, getProfileStudent } = require("../controller/studentProfile");
47 |
48 | router.post("/signup", signup);
49 | router.post("/signin", signin);
50 | router.patch("/update", auth_student, update);
51 | router.get("/logout", auth_student, logout);
52 | router.get("/logoutAll", auth_student, logoutAll);
53 | router.get("/searchFilterInternships", auth_student, searchFilterInternships);
54 | router.get("/searchFilterJobs", auth_student, searchFilterJobs);
55 | router.get("/searchFilterFreshersJobs", auth_student, searchFilterFreshersJobs);
56 | router.get("/confirm/:confirmationCode", signupConfirm);
57 | router.get("/studentfetch/:id", findStudentById);
58 | router.post("/bookmarkInternship/:id", auth_student, bookmarkInternship);
59 | router.post("/bookmarkJob/:id", auth_student, bookmarkJob);
60 | router.post("/bookmarkFresherJob/:id", auth_student, bookmarkFresherJob);
61 | router.post(
62 | "/getBookmarkedInternships",
63 | auth_student,
64 | getBookmarkedInternships
65 | );
66 | router.post("/getBookmarkedJobs", auth_student, getBookmarkedJobs);
67 | router.post(
68 | "/getBookmarkedFresherJobs",
69 | auth_student,
70 | getBookmarkedFresherJobs
71 | );
72 | router.delete("/deleteStudent", auth_student, deleteStudent);
73 | router.get("/searchBookmarkedJob", auth_student, searchBookmarkedJob);
74 | router.get(
75 | "/searchBookmarkedFresherJob",
76 | auth_student,
77 | searchBookmarkedFresherJob
78 | );
79 | router.get(
80 | "/searchBookmarkedInternship",
81 | auth_student,
82 | searchBookmarkedInternship
83 | );
84 |
85 | router.post("/apply", auth_student, apply);
86 |
87 | router.get(
88 | "/getPendingApplications",
89 | auth_student,
90 | student_getPendingApplications
91 | );
92 | router.get(
93 | "/getApprovedApplications",
94 | auth_student,
95 | student_getApprovedApplications
96 | );
97 | router.get(
98 | "/getRejectedApplications",
99 | auth_student,
100 | student_getRejectedApplications
101 | );
102 |
103 | router.post("/saveCompany", auth_student, saveCompany);
104 | router.get("/getNotifications", auth_student, getNotifications);
105 | router.get("/getNotification/:id", auth_student, getNotification);
106 |
107 | router.post("/buildprofile", auth_student, addProfileBuilder);
108 | router.get("/buildprofile/get", auth_student, getProfileStudent);
109 | router.get("/viewCompany/:id", auth_student,viewCompany )
110 |
111 | module.exports = router;
112 |
--------------------------------------------------------------------------------
/src/components/FreshersJob/FresherJobsGroupedByStream.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 | import toast, { Toaster } from "react-hot-toast";
5 | import { UserContext } from "../../App";
6 |
7 | import "../Internships/AllInternships.css";
8 | import FresherJobCard from "../../utils/UI/FresherJobCard/FresherJobCard";
9 | // import { Alert } from "bootstrap";
10 |
11 | const FresherJobsGroupedByStream = () => {
12 | const { state, dispatch } = useContext(UserContext);
13 | const [freshersJobs, setFreshersJobs] = useState([]);
14 | const [loading, setLoading] = useState(true);
15 |
16 | useEffect(() => {
17 | axios({
18 | method: "get",
19 | url: "http://localhost:5000/user/freshersjob/stream",
20 | headers: {
21 | Authorization: "Bearer " + localStorage.getItem("jwt"),
22 | },
23 | })
24 | .then((res) => {
25 | console.log(res);
26 | setLoading(false);
27 | if (res.data.error) {
28 | console.log(res.data.error);
29 | // alert(res.data.error);
30 | const notify = () => toast(res.data.error);
31 | notify();
32 | } else {
33 | // console.log(res.data.freshersjobs);
34 | setFreshersJobs(res.data.freshersjobs);
35 | // console.log(freshersJobs);
36 | }
37 | })
38 | .catch((err) => {
39 | setLoading(false);
40 | console.log("Error: ", err);
41 | });
42 | }, []);
43 |
44 | if (freshersJobs && freshersJobs[4]) {
45 | console.log(freshersJobs[4]);
46 | const t = new Date(freshersJobs[4].startDate).toString("YYYY-MM-DD");
47 | console.log(t);
48 | }
49 |
50 | return (
51 |
52 |
53 | {loading ? (
54 |
55 |
63 |
64 | ) : freshersJobs && !freshersJobs.length > 0 ? (
65 |
74 | No Fresher Jobs available right now
75 |
76 | ) : (
77 | freshersJobs &&
78 | freshersJobs.map((catefresher) => (
79 |
80 |
{catefresher._id}
81 |
82 | {catefresher.freshersjobs &&
83 | catefresher.freshersjobs.map((fresher) => {
84 | // console.log(internship.createdBy._id, state.user._id);
85 | return (
86 |
90 |
94 |
95 | );
96 | })}
97 |
98 |
99 | ))
100 | )}
101 |
102 | );
103 | };
104 | export default FresherJobsGroupedByStream;
105 |
--------------------------------------------------------------------------------
/src/components/FreshersJob/FresherJobsGroupedByIndustry.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 | import toast, { Toaster } from "react-hot-toast";
5 | import { UserContext } from "../../App";
6 |
7 | import "../Internships/AllInternships.css";
8 | import FresherJobCard from "../../utils/UI/FresherJobCard/FresherJobCard";
9 | // import { Alert } from "bootstrap";
10 |
11 | const FresherJobsGroupedByIndustry = () => {
12 | const { state, dispatch } = useContext(UserContext);
13 | const [freshersJobs, setFreshersJobs] = useState([]);
14 | const [loading, setLoading] = useState(true);
15 |
16 | useEffect(() => {
17 | axios({
18 | method: "get",
19 | url: "http://localhost:5000/user/freshersjob/industry",
20 | headers: {
21 | Authorization: "Bearer " + localStorage.getItem("jwt"),
22 | },
23 | })
24 | .then((res) => {
25 | // console.log(res);
26 | setLoading(false);
27 | if (res.data.error) {
28 | console.log(res.data.error);
29 | // alert(res.data.error);
30 | const notify = () => toast(res.data.error);
31 | notify();
32 | } else {
33 | // console.log(res.data.freshersjobs);
34 | setFreshersJobs(res.data.freshersjobs);
35 | // console.log(freshersJobs);
36 | }
37 | })
38 | .catch((err) => {
39 | setLoading(false);
40 | console.log("Error: ", err);
41 | });
42 | }, []);
43 |
44 | if (freshersJobs && freshersJobs[4]) {
45 | console.log(freshersJobs[4]);
46 | const t = new Date(freshersJobs[4].startDate).toString("YYYY-MM-DD");
47 | console.log(t);
48 | }
49 |
50 | return (
51 |
52 |
53 | {loading ? (
54 |
55 |
63 |
64 | ) : freshersJobs && !freshersJobs.length > 0 ? (
65 |
74 | No Fresher Jobs available right now
75 |
76 | ) : (
77 | freshersJobs &&
78 | freshersJobs.map((catefresher) => (
79 |
80 |
{catefresher._id}
81 |
82 | {catefresher.freshersjobs &&
83 | catefresher.freshersjobs.map((fresher) => {
84 | // console.log(internship.createdBy._id, state.user._id);
85 | return (
86 |
90 |
94 |
95 | );
96 | })}
97 |
98 |
99 | ))
100 | )}
101 |
102 | );
103 | };
104 | export default FresherJobsGroupedByIndustry;
105 |
--------------------------------------------------------------------------------
/src/components/FreshersJob/FresherJobsGroupedByLocation.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 | import toast, { Toaster } from "react-hot-toast";
5 | import { UserContext } from "../../App";
6 |
7 | import "../Internships/AllInternships.css";
8 | import FresherJobCard from "../../utils/UI/FresherJobCard/FresherJobCard";
9 | // import { Alert } from "bootstrap";
10 |
11 | const FresherJobsGroupedByLocation = () => {
12 | const { state, dispatch } = useContext(UserContext);
13 | const [freshersJobs, setFreshersJobs] = useState([]);
14 | const [loading, setLoading] = useState(true);
15 |
16 | useEffect(() => {
17 | axios({
18 | method: "get",
19 | url: "http://localhost:5000/user/freshersjob/location",
20 | headers: {
21 | Authorization: "Bearer " + localStorage.getItem("jwt"),
22 | },
23 | })
24 | .then((res) => {
25 | // console.log(res);
26 | setLoading(false);
27 | if (res.data.error) {
28 | console.log(res.data.error);
29 | // alert(res.data.error);
30 | const notify = () => toast(res.data.error);
31 | notify();
32 | } else {
33 | // console.log(res.data.freshersjobs);
34 | setFreshersJobs(res.data.freshersJobs);
35 | // console.log(freshersJobs);
36 | }
37 | })
38 | .catch((err) => {
39 | setLoading(false);
40 | console.log("Error: ", err);
41 | });
42 | }, []);
43 |
44 | if (freshersJobs && freshersJobs[4]) {
45 | console.log(freshersJobs[4]);
46 | const t = new Date(freshersJobs[4].startDate).toString("YYYY-MM-DD");
47 | console.log(t);
48 | }
49 |
50 | return (
51 |
52 |
53 | {loading ? (
54 |
55 |
63 |
64 | ) : freshersJobs && !freshersJobs.length > 0 ? (
65 |
74 | No Fresher Jobs available right now
75 |
76 | ) : (
77 | freshersJobs &&
78 | freshersJobs.map((catefresher) => (
79 |
80 |
{catefresher._id}
81 |
82 | {catefresher.freshersJobs &&
83 | catefresher.freshersJobs.map((fresher) => {
84 | // console.log(internship.createdBy._id, state.user._id);
85 | return (
86 |
90 |
94 |
95 | );
96 | })}
97 |
98 |
99 | ))
100 | )}
101 |
102 | );
103 | };
104 | export default FresherJobsGroupedByLocation;
105 |
--------------------------------------------------------------------------------
/src/components/about-us/about-us.css:
--------------------------------------------------------------------------------
1 | .aboutus {
2 | background: #0d1117;
3 | }
4 | .about-heading {
5 | display: inline-block;
6 | font-size: 4rem;
7 | margin-top: 2rem;
8 | border-radius: 25px;
9 | padding: 8px;
10 | /* background-color: #fff; */
11 | color: #fff;
12 | mix-blend-mode: screen;
13 | text-align: center;
14 | -webkit-text-stroke: 1px yellow;
15 | text-shadow: 0px 4px 4px yellow;
16 | margin-bottom: 1.5rem;
17 | }
18 | .about-heading1 {
19 | display: inline-block;
20 | font-size: 3.75rem;
21 | margin-top: 3rem;
22 | border-radius: 25px;
23 | padding: 8px;
24 | /* background-color: #fff; */
25 | color: #fff;
26 | mix-blend-mode: screen;
27 | text-align: center;
28 | -webkit-text-stroke: 1px yellow;
29 | text-shadow: 0px 4px 4px yellow;
30 | margin-bottom: 0%;
31 | }
32 | .about-img {
33 | width: 25vw;
34 | height: 50vh;
35 | border: 3px solid #fff;
36 | border-radius: 50%;
37 | /* margin-bottom: 1.5rem;; */
38 | box-shadow: 0 0 20px 2px rgba(0, 0, 0, 0.5);
39 | }
40 |
41 | #offer-range1 {
42 | color: white;
43 | font-size: 15px;
44 | padding: 5% 5% 7% 5%;
45 | min-height: 30vh;
46 | }
47 | #offer-range2 {
48 | color: white;
49 | font-size: 15px;
50 | padding: 5% 5% 7% 5%;
51 | min-height: 30vh;
52 | }
53 | #offer-range3 {
54 | color: white;
55 | font-size: 15px;
56 | padding: 5% 5% 7% 5%;
57 | min-height: 30vh;
58 | }
59 |
60 | #offer-range1:hover {
61 | transform: scale(1.1);
62 | }
63 | #offer-range2:hover {
64 | transform: scale(1.1);
65 | }
66 | #offer-range3:hover {
67 | transform: scale(1.1);
68 | }
69 | #offer-range4:hover {
70 | transform: scale(1.1);
71 | }
72 |
73 | #offer-range1 > img {
74 | width: 12vw;
75 | height: 25vh;
76 | border-radius: 50%;
77 | margin-bottom: 1rem;
78 | }
79 | #offer-range2 > img {
80 | width: 12vw;
81 | height: 25vh;
82 | border-radius: 50%;
83 | margin-bottom: 1rem;
84 | }
85 | #offer-range3 > img {
86 | width: 12vw;
87 | height: 25vh;
88 | border-radius: 50%;
89 | margin-bottom: 1rem;
90 | }
91 | .btn-v {
92 | padding: 1.5% 2% 1.5% 2%;
93 | color: #fff;
94 | border: 3px solid #fff;
95 | font-size: 1.25rem;
96 | background-color: transparent;
97 | border-radius: 16px;
98 | }
99 | .btn-v:hover {
100 | background-color: #fff;
101 | color: #000;
102 | border: 3px solid yellow;
103 | }
104 | @media only screen and (max-width: 1200px) {
105 | }
106 | @media only screen and (max-width: 992px) {
107 | .about-img {
108 | width: 33vw;
109 | height: 45vh;
110 | margin-bottom: 2.5rem;
111 | }
112 |
113 | #offer-range1 > img {
114 | width: 25vw;
115 | height: 25vh;
116 | border-radius: 50%;
117 | margin-bottom: 1rem;
118 | }
119 | #offer-range2 > img {
120 | width: 25vw;
121 | height: 25vh;
122 | border-radius: 50%;
123 | margin-bottom: 1rem;
124 | }
125 | #offer-range3 > img {
126 | width: 25vw;
127 | height: 25vh;
128 | border-radius: 50%;
129 | margin-bottom: 1rem;
130 | }
131 | }
132 |
133 | @media only screen and (max-width: 600px) {
134 | .about-img {
135 | width: 40vw;
136 | height: 40vh;
137 | margin-bottom: 2.5rem;
138 | }
139 | #offer-range1 > img {
140 | width: 30vw;
141 | height: 25vh;
142 | border-radius: 50%;
143 | margin-bottom: 1rem;
144 | }
145 | #offer-range2 > img {
146 | width: 30vw;
147 | height: 25vh;
148 | border-radius: 50%;
149 | margin-bottom: 1rem;
150 | }
151 | #offer-range3 > img {
152 | width: 30vw;
153 | height: 25vh;
154 | border-radius: 50%;
155 | margin-bottom: 1rem;
156 | }
157 | .btn-v {
158 | margin-bottom: 2rem;
159 | }
160 | }
161 |
--------------------------------------------------------------------------------
/contributors.md:
--------------------------------------------------------------------------------
1 | # Our Valuable Contributors
2 |
3 | ## 1. Cross Winter of Code
4 |
5 |
6 | Github Username Good First Issue (50) Easy (100) Medium (200) Hard (500) Total
7 |
8 |
9 | Devenkapoor7303
10 |
11 |
12 |
16 |
17 |
18 |
19 | 200
20 |
21 |
22 |
23 | abhinav5481
24 |
25 |
26 |
27 |
34 |
35 |
36 |
39 |
40 | 1500
41 |
42 |
43 |
44 | Nirbhay1910
45 |
46 |
47 |
48 |
51 |
52 |
53 | 200
54 |
55 |
56 |
57 | soumya-badkul
58 |
59 |
60 |
66 |
67 |
68 |
69 | 400
70 |
71 |
72 |
73 | arbazalam01
74 |
75 |
78 |
79 |
80 |
83 |
84 |
85 |
88 |
89 |
90 | 350
91 |
92 |
93 |
94 | raman-thakur
95 |
96 |
97 |
98 |
101 |
102 |
103 | 200
104 |
105 |
106 |
107 | kmryashasvi
108 |
109 |
112 |
113 |
114 |
115 |
116 | 50
117 |
118 |
119 |
120 |
--------------------------------------------------------------------------------
/src/utils/UI/InternshipCard/InternshipCard.css:
--------------------------------------------------------------------------------
1 | .card-custom {
2 | width: 18rem;
3 | height: 25rem;
4 | padding: 2rem 1rem;
5 | background: #151c25;
6 | /* background-image: linear-gradient(#0D1117, #272b30); */
7 | position: relative;
8 | box-shadow: 0px 7px 10px rgba(0, 0, 0, 0.5);
9 | transition: 0.5s ease-in-out;
10 | border: yellow solid 1px;
11 | border-radius: 10px;
12 | }
13 |
14 | .card-custom:hover {
15 | /* display: flex;
16 | align-items: center;
17 | justify-content: center; */
18 | border: none;
19 | /* transform: translateY(20px); */
20 | }
21 |
22 |
23 | /* .primary-info {
24 | display: block;
25 | color: black;
26 | } */
27 |
28 | .card-custom:before {
29 | content: '';
30 | position: absolute;
31 | top: 0;
32 | left: 0;
33 | display: block;
34 | width: 100%;
35 | height: 100%;
36 | background: #151c25;
37 |
38 | /* background: linear-gradient(to bottom, #292e33, #49525a); */
39 | transition: 0.5s all;
40 | opacity: 0;
41 | border-radius: 10px;
42 |
43 | }
44 |
45 | .card-custom:hover:before {
46 |
47 | opacity: 1;
48 | z-index: 2;
49 | }
50 |
51 | .card-custom .primary-info {
52 | width: 100%;
53 | height: 100%;
54 | /* position: absolute;
55 | top: 0;
56 | left: 0; */
57 | text-align: left;
58 | color: #333;
59 | opacity: 1;
60 | transition: all 0.5s;
61 | }
62 |
63 | .card-custom:hover .primary-info {
64 | opacity: 0;
65 | display: none;
66 | }
67 |
68 | .card-custom .secondary-info {
69 | position: relative;
70 | width: 100%;
71 | z-index: 3;
72 | color: whitesmoke;
73 | opacity: 0;
74 | transform: translateY(30px);
75 | transition: all 0.5s;
76 | }
77 |
78 | .card-custom:hover .secondary-info {
79 | opacity: 1;
80 | transform: translateY(0px);
81 | width: 100%;
82 | height: 100%;
83 | }
84 |
85 | .primary-info-role {
86 | font-size: 1.8rem;
87 | font-weight: bold;
88 | color: yellow;
89 |
90 | }
91 |
92 | .primary-info-role {
93 | font-size: 1.8rem;
94 | font-weight: bold;
95 | font-family: Arial, Helvetica, sans-serif;
96 | text-transform: capitalize;
97 | }
98 |
99 | .primary-info-company,
100 | .primary-info-indus-stream {
101 | font-size: 0.8rem;
102 | font-weight: bold;
103 | font-family: Arial, Helvetica, sans-serif;
104 | text-transform: uppercase;
105 | color: whitesmoke;
106 | }
107 |
108 | .primary-info-table {
109 | margin-top: 20px;
110 | }
111 |
112 | .primary-info-table ul li {
113 | list-style: none;
114 | padding: 5px 0;
115 | color: whitesmoke;
116 | text-transform: uppercase;
117 | font-size: 0.9rem;
118 | }
119 |
120 | .primary-info-table ul li i {
121 | color: yellow;
122 | margin-right: 10px;
123 | }
124 |
125 | .primary-info-table ul li span {
126 | color: #e2e2e2;
127 | font-size: 0.7rem;
128 | font-family: Arial, Helvetica, sans-serif;
129 | text-transform: uppercase;
130 | margin-right: 2px;
131 | }
132 |
133 | .primary-info-techstack {
134 | display: flex;
135 | flex-wrap: wrap;
136 | }
137 |
138 | .primary-info-techstack div {
139 | margin-right: 20px;
140 | margin-bottom: 10px;
141 | font-size: 1rem;
142 | text-transform: capitalize;
143 | padding: 6px 12px;
144 | border-radius: 10px;
145 | color: black;
146 | background-color: rgba(255, 255, 0, 0.745);
147 | }
148 |
149 | .secondary-info-description {
150 | margin-bottom: 20px;
151 | text-align: center;
152 | }
153 |
154 | .btn-custom {
155 | background-color: yellow;
156 | display: block;
157 | color: black;
158 | font-weight: bold;
159 | transition: all 0.5s;
160 | }
161 |
162 | .btn-custom:hover {
163 | transform: translateY(-5px);
164 | }
165 |
166 | .dropdown-container{
167 | position: absolute;
168 | top: 0;
169 | right: 0;
170 | }
171 |
172 | .secondary-info-container{
173 | position: absolute;
174 | top: 50%;
175 | left: 50%;
176 | transform: translate(-50%,-50%);
177 | }
--------------------------------------------------------------------------------
/src/components/Jobs/AllJobs.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 | import toast, { Toaster } from "react-hot-toast";
5 | import { UserContext } from "../../App";
6 |
7 | import "../Internships/AllInternships.css";
8 | import JobsCard from "../../utils/UI/JobsCard/JobsCard";
9 |
10 | const AllJobs = () => {
11 | const { state, dispatch } = useContext(UserContext);
12 | const [jobs, setJobs] = useState([]);
13 | const [loading, setLoading] = useState(true);
14 | // useEffect(() => {
15 | // axios({
16 | // method: "get",
17 | // url: "http://localhost:5000/user/all-jobs",
18 | // headers: {
19 | // Authorization: "Bearer " + localStorage.getItem("jwt"),
20 | // },
21 | // })
22 | // .then((res) => {
23 | // console.log(res);
24 | // if (res.data.error) {
25 | // console.log(res.data.error);
26 | // // alert(res.data.error);
27 | // const notify = () => toast(res.data.error);
28 | // notify();
29 | // } else {
30 | // // if (res && res.data) {
31 | // console.log(res.data.jobs);
32 | // setJobs(res.data.jobs);
33 | // console.log(jobs);
34 | // // }
35 | // }
36 | // })
37 | // .catch((err) => {
38 | // console.log("Error: ", err);
39 | // });
40 | // }, []);
41 |
42 | useEffect(() => {
43 | axios({
44 | method: "get",
45 | url: "http://localhost:5000/user/all-jobs",
46 | headers: {
47 | Authorization: "Bearer " + localStorage.getItem("jwt"),
48 | },
49 | })
50 | .then((res) => {
51 | console.log(res);
52 | setLoading(false);
53 | if (res.data.error) {
54 | console.log(res.data.error);
55 | // alert(res.data.error);
56 | const notify = () => toast(res.data.error);
57 | notify();
58 | } else {
59 | console.log(res.data.jobs);
60 |
61 | setJobs(res.data.jobs);
62 | console.log(jobs);
63 | }
64 | })
65 | .catch((err) => {
66 | setLoading(false);
67 | console.log("Error: ", err);
68 | });
69 | }, []);
70 |
71 | if (jobs && jobs[4]) {
72 | console.log(jobs[4]);
73 | const t = new Date(jobs[4].startDate).toString("YYYY-MM-DD");
74 | console.log(t);
75 | }
76 |
77 | return (
78 |
79 |
80 |
81 | {loading ? (
82 |
83 |
91 |
92 | ) : jobs && !jobs.length > 0 ? (
93 |
102 | No Jobs available right now
103 |
104 | ) : (
105 | jobs &&
106 | jobs.map((job) => {
107 | return (
108 |
112 |
113 |
114 | );
115 | })
116 | )}
117 |
118 |
119 | );
120 | };
121 | export default AllJobs;
122 |
--------------------------------------------------------------------------------
/src/components/Jobs/BookmarkJob.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 | import toast, { Toaster } from "react-hot-toast";
5 | import { UserContext } from "../../App";
6 |
7 | import "../Internships/AllInternships.css";
8 | import JobsCard from "../../utils/UI/JobsCard/JobsCard";
9 |
10 | const BookmarkJobs = () => {
11 | const { state, dispatch } = useContext(UserContext);
12 | const [jobs, setJobs] = useState([]);
13 | const [loading, setLoading] = useState(true);
14 |
15 | useEffect(() => {
16 | axios({
17 | method: "post",
18 | url: "http://localhost:5000/student/getBookmarkedJobs",
19 | headers: {
20 | Authorization: "Bearer " + localStorage.getItem("jwt"),
21 | },
22 | })
23 | .then((res) => {
24 | console.log(res);
25 | setLoading(false);
26 | if (res.data.error) {
27 | console.log(res.data.error);
28 | // alert(res.data.error);
29 | const notify = () => toast(res.data.error);
30 | notify();
31 | } else {
32 | console.log(res.data.job);
33 |
34 | setJobs(res.data.job);
35 | console.log(jobs);
36 | }
37 | })
38 | .catch((err) => {
39 | setLoading(false);
40 | console.log("Error: ", err);
41 | });
42 | }, []);
43 |
44 | if (jobs && jobs[4]) {
45 | console.log(jobs[4]);
46 | const t = new Date(jobs[4].startDate).toString("YYYY-MM-DD");
47 | console.log(t);
48 | }
49 |
50 | const deletePost = (postId) => {
51 | axios({
52 | method: "delete",
53 | url: "http://localhost:5000/employer/delete-job",
54 | data: {
55 | postId,
56 | },
57 | headers: {
58 | Authorization: "Bearer " + localStorage.getItem("jwt"),
59 | "Content-Type": "application/json",
60 | },
61 | })
62 | .then((res) => {
63 | console.log(res);
64 | if (res.data.error) {
65 | console.log(res.data.error);
66 | // alert(res.data.error);
67 | const notify = () => toast(res.data.error);
68 | notify();
69 | } else {
70 | // console.log(res.data.jobs);
71 | // setJobs(res.data.jobs);
72 | // console.log(jobs);
73 | window.location.reload(false);
74 | const notify = () => toast(res.data.message);
75 | notify();
76 | }
77 | })
78 | .catch((err) => {
79 | console.log("Error: ", err);
80 | });
81 | };
82 |
83 | return (
84 |
85 |
86 |
87 | {loading ? (
88 |
89 |
97 |
98 | ) : jobs && !jobs.length > 0 ? (
99 |
108 | No Jobs available right now
109 |
110 | ) : (
111 | jobs &&
112 | jobs.map((job) => {
113 | return (
114 |
118 |
124 |
125 | );
126 | })
127 | )}
128 |
129 |
130 | );
131 | };
132 | export default BookmarkJobs;
133 |
--------------------------------------------------------------------------------
/src/components/about-us/about-us.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import "bootstrap/dist/css/bootstrap.min.css";
3 | import { Card, Container, Row } from "react-bootstrap";
4 | import "./about-us.css";
5 |
6 | export default function AboutUs() {
7 | return (
8 | <>
9 |
10 |
About Us
11 |
12 |
13 |
26 |
27 |
28 |
29 |
30 |
31 |
39 | Our main motive behind this project to provide the best jobs
40 | and internship opportunities. Companies can post here open
41 | application for job and internship so students can make own
42 | profile and apply in multiple companies. We want to make this
43 | website for the purpose of connecting students to companies .
44 | You can explore the job and internship opportunities according
45 | to your convience. We also have online trainings session for
46 | you. We connect you and your requirements on the same page.
47 | You can fill your application for your internship or your jobs
48 | on the same place and get the response .
49 |
50 |
51 |
52 |
53 |
54 |
What we offer ?
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
Internships
63 |
64 | Are you looking for students internship? Find the best winter
65 | & summer internships for college students in Engineering, MBA,
66 | IT, Media, Finance & other streams.
67 |
68 |
69 |
visit it
70 |
71 |
72 |
73 |
Fresher's Jobs
74 |
75 |
76 | Are you a Fresher ? Go and explore it and start your journey
77 | according to your requirements ,your choices .We all have for
78 | you.
79 |
80 |
visit it
81 |
82 |
83 |
84 |
Jobs
85 |
86 | Are you looking for jobs ? Then it is the right place .Choose
87 | your job according to your experience , your interest.Make the
88 | wise choice .
89 |
90 |
visit it
91 |
92 |
93 |
94 |
95 |
96 | >
97 | );
98 | }
99 |
--------------------------------------------------------------------------------
/src/components/student-profile/profile.css:
--------------------------------------------------------------------------------
1 | h2 {
2 | color: white;
3 | text-decoration: underline;
4 | margin: auto;
5 | text-align: center;
6 | }
7 | .center {
8 | text-align: center;
9 | }
10 |
11 | .edu {
12 | /* margin-right: 115px; */
13 | }
14 |
15 | h1 {
16 | color: white;
17 | text-decoration: underline;
18 | }
19 | h6 {
20 | color: white;
21 | }
22 |
23 | .main-box {
24 | /* background-color: #1f4468; */
25 | width: 750px;
26 | margin: auto;
27 | border-radius: 30px;
28 | border: 2px solid #d6c20a;
29 | box-shadow: 10px 10px 15px rgba(0, 0, 0, 0.5);
30 | color: white;
31 | }
32 | .profile-box{
33 | text-align: justify;
34 | }
35 | .ProfileBuilderheading {
36 | font-family: Georgia, "Times New Roman", Times, serif;
37 | text-decoration: none;
38 | font-size: 3rem;
39 | font-weight: 500;
40 | padding: 0 30px;
41 | text-align: center;
42 | }
43 | .inst {
44 | color: #aaa;
45 | padding: 0 30px;
46 | }
47 |
48 | .side,
49 | .byside {
50 | display: inline-block;
51 | width: 45%;
52 | }
53 |
54 | .education,
55 | .experience,
56 | .projects,
57 | .skills,
58 | .achievments,
59 | .volunteer,
60 | .Other,
61 | .projects {
62 | text-align: left;
63 | padding: 0 30px;
64 | margin-top: 4px;
65 | }
66 |
67 | .form-main {
68 | text-align: left;
69 | padding: 0 30px;
70 | margin-top: 4px;
71 | }
72 |
73 | span {
74 | color: red;
75 | padding-left: 5px;
76 | font-size: 1.2rem;
77 | }
78 | .div-1, .div-2{
79 | color: white;
80 | display: inline;
81 | }
82 | .div-1{
83 | font-weight: 900;
84 | font-size: 1.3rem;
85 | }
86 | .div-2{
87 | /* font-weight: 00; */
88 | font-style: italic;
89 | font-size: 1.1rem;
90 | }
91 |
92 | .label-text {
93 | color: white;
94 | margin-top: 20px;
95 | }
96 |
97 | input,
98 | select {
99 | background-color: #a6a6a6;
100 | border-radius: 6px;
101 | width: 30%;
102 | }
103 |
104 | textarea {
105 | background-color: #a6a6a6;
106 | border-radius: 6px;
107 | }
108 | .textbox {
109 | width: 100%;
110 | }
111 |
112 | .text-long {
113 | background-color: #a6a6a6;
114 | border-radius: 6px;
115 | width: 100%;
116 | padding: 5px 10px;
117 | }
118 |
119 | ::placeholder {
120 | color: #000;
121 | font-size: 0.8rem;
122 | }
123 |
124 | .add-button {
125 | margin-left: 10px;
126 | }
127 |
128 | .side-by-side {
129 | display: inline-block;
130 | }
131 |
132 | .long-cal {
133 | width: 75%;
134 | }
135 |
136 | .subHeading {
137 | font-size: 2.5rem;
138 | text-align: center;
139 | padding-top: 30px;
140 | text-decoration: none;
141 | font-family: "Times New Roman", Times, serif;
142 | font-weight: 800;
143 | }
144 | .buttonProfileDiv{
145 | padding: 0 30px 30px ;
146 | }
147 |
148 | .buttonProfileDiv .buttonProfile{
149 | font-size: 1.2rem;
150 | width: 100%;
151 | color: aqua !important;
152 | /* margin: 10px 30px !important; */
153 | /* box-sizing: border-box; */
154 | padding: 10px 30px;
155 | background-color: #d6c20a !important;
156 | border-radius: 10px;
157 | }
158 |
159 | .btnprofile{
160 | color: #222;
161 | font-weight: 600;
162 | }
163 |
164 | @media only screen and (max-width: 800px) {
165 | .main-box {
166 | width: 600px;
167 | }
168 | }
169 | @media only screen and (max-width: 650px) {
170 | .main-box {
171 | width: 500px;
172 | }
173 | .side,
174 | .byside {
175 | /* display: inline-block; */
176 | width: 100%;
177 | }
178 | .ProfileBuilderheading {
179 | font-size: 2.5rem;
180 | }
181 | .subHeading {
182 | font-size: 2rem;
183 | }
184 | }
185 |
186 | @media only screen and (max-width: 510px) {
187 | .main-box {
188 | width: 450px;
189 | }
190 | .inst {
191 | font-size: 1rem;
192 | }
193 | }
194 | @media only screen and (max-width: 460px) {
195 | .main-box {
196 | width: 400px;
197 | }
198 | .ProfileBuilderheading {
199 | font-size: 2.1rem;
200 | }
201 | .subHeading {
202 | font-size: 1.7rem;
203 | }
204 | }
205 | @media only screen and (max-width: 420px) {
206 | .main-box {
207 | width: 350px;
208 | }
209 | }
210 | @media only screen and (max-width: 360px) {
211 | .main-box {
212 | width: 300px;
213 | }
214 | }
215 | @media only screen and (max-width: 30px) {
216 | .main-box {
217 | width: 250px;
218 | }
219 | }
220 |
--------------------------------------------------------------------------------
/src/components/Internships/AllInternships.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 |
5 | import toast, { Toaster } from "react-hot-toast";
6 |
7 | import "./AllInternships.css";
8 | import { UserContext } from "../../App";
9 | import InternshipCard from "../../utils/UI/InternshipCard/InternshipCard";
10 |
11 | const AllInternships = () => {
12 | const { state, dispatch } = useContext(UserContext);
13 | const [internships, setInternships] = useState([]);
14 | const [loading, setLoading] = useState(true);
15 | // console.log(internships);
16 | // console.log(state);
17 | useEffect(() => {
18 | axios({
19 | method: "get",
20 | url: "http://localhost:5000/user/all-internships",
21 | headers: {
22 | Authorization: "Bearer " + localStorage.getItem("jwt"),
23 | },
24 | })
25 | .then((res) => {
26 | console.log(res);
27 | setLoading(false);
28 | if (res.data.error) {
29 | console.log(res.data.error);
30 | // alert(res.data.error);
31 | const notify = () => toast(res.data.error);
32 | notify();
33 | } else {
34 | console.log(res.data.internships);
35 | setInternships(res.data.internships);
36 | console.log(internships);
37 | }
38 | })
39 | .catch((err) => {
40 | setLoading(false);
41 | console.log("Error: ", err);
42 | });
43 | }, []);
44 |
45 | if (internships && internships[4]) {
46 | console.log(internships[4]);
47 | const t = new Date(internships[4].startDate).toString("YYYY-MM-DD");
48 | console.log(t);
49 | }
50 |
51 | const deletePost = (postId) => {
52 | axios({
53 | method: "delete",
54 | url: "http://localhost:5000/employer/delete-internship",
55 | data: {
56 | postId,
57 | },
58 | headers: {
59 | Authorization: "Bearer " + localStorage.getItem("jwt"),
60 | "Content-Type": "application/json",
61 | },
62 | })
63 | .then((res) => {
64 | console.log(res);
65 | if (res.data.error) {
66 | // console.log(res.data.error);
67 | const notify = () => toast(res.data.error);
68 | notify();
69 | } else {
70 | setInternships(res.data.internships);
71 | window.location.reload(false);
72 | const notify = () => toast(res.data.message);
73 | notify();
74 | }
75 | })
76 | .catch((err) => {
77 | console.log("Error: ", err);
78 | });
79 | };
80 |
81 | return (
82 |
83 |
84 |
85 | {loading ? (
86 |
87 |
95 |
96 | ) : internships && !internships.length > 0 ? (
97 |
106 | No internships available right now
107 |
108 | ) : (
109 | internships &&
110 | internships.map((internship) => {
111 | // console.log(internship.createdBy._id, state.user._id);
112 | return (
113 |
117 |
122 |
123 | );
124 | })
125 | )}
126 |
127 |
128 | );
129 | };
130 | export default AllInternships;
131 |
--------------------------------------------------------------------------------
/src/components/Internships/BookmarkInternhsip.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 |
5 | import toast, { Toaster } from "react-hot-toast";
6 |
7 | import "./AllInternships.css";
8 | import { UserContext } from "../../App";
9 | import InternshipCard from "../../utils/UI/InternshipCard/InternshipCard";
10 |
11 | const BookmarkedInternships = () => {
12 | const { state, dispatch } = useContext(UserContext);
13 | const [internships, setInternships] = useState([]);
14 | const [loading, setLoading] = useState(true);
15 | // console.log(internships);
16 | // console.log(state);
17 | useEffect(() => {
18 | axios({
19 | method: "post",
20 | url: "http://localhost:5000/student/getBookmarkedInternships",
21 | headers: {
22 | Authorization: "Bearer " + localStorage.getItem("jwt"),
23 | },
24 | })
25 | .then((res) => {
26 | console.log(res);
27 | setLoading(false);
28 | if (res.data.error) {
29 | console.log(res.data.error);
30 | // alert(res.data.error);
31 | const notify = () => toast(res.data.error);
32 | notify();
33 | } else {
34 | console.log(res.data.internship);
35 | setInternships(res.data.internship);
36 | console.log(internships);
37 | }
38 | })
39 | .catch((err) => {
40 | setLoading(false);
41 | console.log("Error: ", err);
42 | });
43 | }, []);
44 |
45 | if (internships && internships[4]) {
46 | console.log(internships[4]);
47 | const t = new Date(internships[4].startDate).toString("YYYY-MM-DD");
48 | console.log(t);
49 | }
50 |
51 | const deletePost = (postId) => {
52 | axios({
53 | method: "delete",
54 | url: "http://localhost:5000/employer/delete-internship",
55 | data: {
56 | postId,
57 | },
58 | headers: {
59 | Authorization: "Bearer " + localStorage.getItem("jwt"),
60 | "Content-Type": "application/json",
61 | },
62 | })
63 | .then((res) => {
64 | console.log(res);
65 | if (res.data.error) {
66 | // console.log(res.data.error);
67 | const notify = () => toast(res.data.error);
68 | notify();
69 | } else {
70 | setInternships(res.data.internships);
71 | window.location.reload(false);
72 | const notify = () => toast(res.data.message);
73 | notify();
74 | }
75 | })
76 | .catch((err) => {
77 | console.log("Error: ", err);
78 | });
79 | };
80 |
81 | return (
82 |
83 |
84 |
85 | {loading ? (
86 |
87 |
95 |
96 | ) : internships && !internships.length > 0 ? (
97 |
106 | No internships available right now
107 |
108 | ) : (
109 | internships &&
110 | internships.map((internship) => {
111 | // console.log(internship.createdBy._id, state.user._id);
112 | return (
113 |
117 |
122 |
123 | );
124 | })
125 | )}
126 |
127 |
128 | );
129 | };
130 | export default BookmarkedInternships;
131 |
--------------------------------------------------------------------------------
/src/components/FreshersJob/BookmarkFresherJob.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import {
4 | Col,
5 | Row,
6 | Spinner,
7 | Alert,
8 | } from "react-bootstrap";
9 | import toast, { Toaster } from "react-hot-toast";
10 | import { UserContext } from "../../App";
11 |
12 | import "../Internships/AllInternships.css";
13 | import FresherJobCard from "../../utils/UI/FresherJobCard/FresherJobCard";
14 | // import { Alert } from "bootstrap";
15 |
16 | const BookmarkFreshersJobs = () => {
17 | const { state, dispatch } = useContext(UserContext);
18 | const [freshersJobs, setFreshersJobs] = useState([]);
19 | const [loading, setLoading] = useState(true);
20 | const deletePost = (postId) => {
21 | axios({
22 | method: "delete",
23 | url: "http://localhost:5000/employer/delete-freshersjob",
24 | data: {
25 | postId,
26 | },
27 | headers: {
28 | Authorization: "Bearer " + localStorage.getItem("jwt"),
29 | "Content-Type": "application/json",
30 | },
31 | })
32 | .then((res) => {
33 | console.log(res);
34 | if (res.data.error) {
35 | console.log(res.data.error);
36 | // alert(res.data.error);
37 | const notify = () => toast(res.data.error);
38 | notify();
39 | } else {
40 | // console.log(res.data.jobs);
41 | // setJobs(res.data.jobs);
42 | // console.log(jobs);
43 | const notify = () => toast(res.data.message);
44 | notify();
45 | }
46 | })
47 | .catch((err) => {
48 | console.log("Error: ", err);
49 | });
50 | };
51 |
52 |
53 |
54 |
55 | useEffect(() => {
56 | axios({
57 | method: "post",
58 | url: "http://localhost:5000/student/getBookmarkedFresherJobs",
59 | headers: {
60 | Authorization: "Bearer " + localStorage.getItem("jwt"),
61 | },
62 | })
63 | .then((res) => {
64 | console.log(res);
65 | setLoading(false);
66 | if (res.data.error) {
67 | // console.log(res.data.error);
68 | // alert(res.data.error);
69 | const notify = () => toast(res.data.error);
70 | notify();
71 | } else {
72 | // console.log(res.data.freshersjobs);
73 | setFreshersJobs(res.data.fresherjobs);
74 | // console.log(freshersJobs);
75 | }
76 | })
77 | .catch((err) => {
78 | setLoading(false);
79 | console.log("Error: ", err);
80 | });
81 | }, [freshersJobs]);
82 |
83 | if (freshersJobs && freshersJobs[4]) {
84 | console.log(freshersJobs[4]);
85 | const t = new Date(freshersJobs[4].startDate).toString("YYYY-MM-DD");
86 | console.log(t);
87 | }
88 |
89 |
90 |
91 | return (
92 |
93 |
94 |
95 | {loading ? (
96 |
97 |
105 |
106 | ) : freshersJobs && !freshersJobs.length > 0 ? (
107 |
116 | No Fresher Jobs available right now
117 |
118 | ) : (
119 | freshersJobs &&
120 | freshersJobs.map((fresher) => {
121 | return (
122 |
126 |
131 |
132 | );
133 | })
134 | )}
135 |
136 |
137 | );
138 | };
139 | export default BookmarkFreshersJobs;
140 |
--------------------------------------------------------------------------------
/src/components/Internships/InternshipByStream.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Link, useParams } from "react-router-dom";
4 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
5 |
6 | import toast, { Toaster } from "react-hot-toast";
7 |
8 | import "./AllInternships.css";
9 | import { UserContext } from "../../App";
10 | import InternshipCard from "../../utils/UI/InternshipCard/InternshipCard";
11 |
12 | const InternshipsByStream = () => {
13 | const { state, dispatch } = useContext(UserContext);
14 | const [internships, setInternships] = useState([]);
15 | const [loading, setLoading] = useState(true);
16 | const { stream } = useParams();
17 |
18 | console.log(internships);
19 | console.log(state);
20 | useEffect(() => {
21 | axios({
22 | method: "get",
23 | url: `http://localhost:5000/user/stream-internship/${stream}`,
24 | headers: {
25 | Authorization: "Bearer " + localStorage.getItem("jwt"),
26 | },
27 | })
28 | .then((res) => {
29 | console.log(res);
30 | setLoading(false);
31 | if (res.data.error) {
32 | console.log(res.data.error);
33 | // alert(res.data.error);
34 | const notify = () => toast(res.data.error);
35 | notify();
36 | } else {
37 | console.log(res.data.internships);
38 | setInternships(res.data.internships);
39 | console.log(internships);
40 | }
41 | })
42 | .catch((err) => {
43 | setLoading(false);
44 | console.log("Error: ", err);
45 | });
46 | }, []);
47 |
48 | if (internships && internships[4]) {
49 | console.log(internships[4]);
50 | const t = new Date(internships[4].startDate).toString("YYYY-MM-DD");
51 | console.log(t);
52 | }
53 |
54 | const deletePost = (postId) => {
55 | axios({
56 | method: "delete",
57 | url: "http://localhost:5000/employer/delete-internship",
58 | data: {
59 | postId,
60 | },
61 | headers: {
62 | Authorization: "Bearer " + localStorage.getItem("jwt"),
63 | "Content-Type": "application/json",
64 | },
65 | })
66 | .then((res) => {
67 | console.log(res);
68 | if (res.data.error) {
69 | console.log(res.data.error);
70 | // alert(res.data.error);
71 | const notify = () => toast(res.data.error);
72 | notify();
73 | } else {
74 | console.log(res.data.internships);
75 | setInternships(res.data.internships);
76 | console.log(internships);
77 | const notify = () => toast(res.data.message);
78 | notify();
79 | }
80 | })
81 | .catch((err) => {
82 | console.log("Error: ", err);
83 | });
84 | };
85 |
86 | return (
87 |
88 |
89 |
90 | {loading ? (
91 |
92 |
100 |
101 | ) : internships && !internships.length > 0 ? (
102 |
111 | No internships available right now
112 |
113 | ) : (
114 | internships &&
115 | internships.map((internship) => {
116 | // console.log(internship.createdBy._id, state.user._id);
117 | return (
118 |
122 |
127 |
128 | );
129 | })
130 | )}
131 |
132 |
133 | );
134 | };
135 | export default InternshipsByStream;
136 |
--------------------------------------------------------------------------------
/src/components/terms-condition/terms-condition.js:
--------------------------------------------------------------------------------
1 | import React,{useState} from 'react'
2 | import "bootstrap/dist/css/bootstrap.min.css";
3 | import {Container, Row, Col} from "react-bootstrap";
4 |
5 |
6 | export default function TermsAndConditions() {
7 |
8 | return (
9 | <>
10 |
11 |
12 |
13 |
TERMS AND CONDITIONS
14 |
15 |
16 |
17 |
18 | The Company may terminate the Services in case the Subscriber:
19 |
20 |
21 | Commits any breach of these terms and condition, representation & warranties and Subscribers obligations as contemplated in this agreement.
22 | Fails to make payments as per the terms & condition herein.
23 | Uses the Services provided by the Company for any illegal, unlawful or immoral purposes or in any fraudulent manner or for purposes not authorized by the Company.
24 | Commits violation of any IPR, rights of privacy, rights of publicity and/or any other rights of third party and shall not be violative of any provision of Law in force.
25 |
26 |
27 |
28 | Subscribers Obligation
29 |
30 | All the creative for the package will be designed by Company; however, all the content (logo, pictures, text, etc.) shall be provided by the Subscriber.
31 | The Subscriber shall by action of signing this agreement issue an implicit & binding warranty to not use/circulate/forward any candidate(s) resume hosted on the Company's website to the candidate (s) current employer as mentioned by the person in his/her resume.
32 | The data provided by the Subscriber shall be deemed to have been voluntarily supplied, non-confidential and the Subscriber hereby discharges the Company of all obligations of confidentiality.
33 | In case by misrepresentation or false postings the Subscriber takes away the data which is the intellectual property of the Company, then in addition to the rights available to the Company herein, the Company shall have the right to initiate appropriate legal action against the Subscriber.
34 |
35 |
36 |
37 |
38 |
39 |
40 | General Conditions
41 | These job postings may not be substituted with other job postings during this term without incurring additional charges. Any jobs posted by Subscriber on the website and in excess of the number of jobs provided for in this Agreement will be billed to the Subscriber and shall be payable by the Subscriber in accordance with the terms hereof, at the Company's then prevailing rate for such job postings on the Website.
42 | The Company may, in its sole discretion, impose a interest equal to 18% per month on all overdue accounts.
43 | Any re activation of a deleted or expired job posting and any refreshing of any job posting constitutes use of an additional job posting hereunder.
44 | Website's resume database (each a "Resume Database") is a private database for use by Subscriber's only. A Subscriber is defined as one unique user with one unique password provided by the Company. If the Subscriber (including its employees or consultants) is found to share passwords with any third party, the Company may revoke all passwords forthwith and no refund will be given.
45 |
46 |
47 |
48 |
49 |
50 | >
51 | )
52 | }
53 |
--------------------------------------------------------------------------------
/src/components/Internships/InternshipByIndustry.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Link, useParams } from "react-router-dom";
4 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
5 |
6 | import toast, { Toaster } from "react-hot-toast";
7 |
8 | import "./AllInternships.css";
9 | import { UserContext } from "../../App";
10 | import InternshipCard from "../../utils/UI/InternshipCard/InternshipCard";
11 |
12 | const InternshipsByIndustry = () => {
13 | const { state, dispatch } = useContext(UserContext);
14 | const [internships, setInternships] = useState([]);
15 | const [loading, setLoading] = useState(true);
16 | const { industry } = useParams();
17 |
18 | console.log(internships);
19 | console.log(state);
20 | useEffect(() => {
21 | axios({
22 | method: "get",
23 | url: `http://localhost:5000/user/industry-internship/${industry}`,
24 | headers: {
25 | Authorization: "Bearer " + localStorage.getItem("jwt"),
26 | },
27 | })
28 | .then((res) => {
29 | console.log(res);
30 | setLoading(false);
31 | if (res.data.error) {
32 | console.log(res.data.error);
33 | // alert(res.data.error);
34 | const notify = () => toast(res.data.error);
35 | notify();
36 | } else {
37 | console.log(res.data.internships);
38 | setInternships(res.data.internships);
39 | console.log(internships);
40 | }
41 | })
42 | .catch((err) => {
43 | setLoading(false);
44 | console.log("Error: ", err);
45 | });
46 | }, []);
47 |
48 | if (internships && internships[4]) {
49 | console.log(internships[4]);
50 | const t = new Date(internships[4].startDate).toString("YYYY-MM-DD");
51 | console.log(t);
52 | }
53 |
54 | const deletePost = (postId) => {
55 | axios({
56 | method: "delete",
57 | url: "http://localhost:5000/employer/delete-internship",
58 | data: {
59 | postId,
60 | },
61 | headers: {
62 | Authorization: "Bearer " + localStorage.getItem("jwt"),
63 | "Content-Type": "application/json",
64 | },
65 | })
66 | .then((res) => {
67 | console.log(res);
68 | if (res.data.error) {
69 | console.log(res.data.error);
70 | // alert(res.data.error);
71 | const notify = () => toast(res.data.error);
72 | notify();
73 | } else {
74 | console.log(res.data.internships);
75 | setInternships(res.data.internships);
76 | console.log(internships);
77 | const notify = () => toast(res.data.message);
78 | notify();
79 | }
80 | })
81 | .catch((err) => {
82 | console.log("Error: ", err);
83 | });
84 | };
85 |
86 | return (
87 |
88 |
89 |
90 | {loading ? (
91 |
92 |
100 |
101 | ) : internships && !internships.length > 0 ? (
102 |
111 | No internships available right now
112 |
113 | ) : (
114 | internships &&
115 | internships.map((internship) => {
116 | // console.log(internship.createdBy._id, state.user._id);
117 | return (
118 |
122 |
127 |
128 | );
129 | })
130 | )}
131 |
132 |
133 | );
134 | };
135 | export default InternshipsByIndustry;
136 |
--------------------------------------------------------------------------------
/src/components/Internships/InternshipByLocation.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Link, useParams } from "react-router-dom";
4 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
5 |
6 | import toast, { Toaster } from "react-hot-toast";
7 |
8 | import "./AllInternships.css";
9 | import { UserContext } from "../../App";
10 | import InternshipCard from "../../utils/UI/InternshipCard/InternshipCard";
11 |
12 | const InternshipsByLocation = () => {
13 | const { state, dispatch } = useContext(UserContext);
14 | const [internships, setInternships] = useState([]);
15 | const [loading, setLoading] = useState(true);
16 | const { location } = useParams();
17 |
18 | console.log(internships);
19 | console.log(state);
20 | useEffect(() => {
21 | axios({
22 | method: "get",
23 | url: `http://localhost:5000/user/location-internship/${location}`,
24 | headers: {
25 | Authorization: "Bearer " + localStorage.getItem("jwt"),
26 | },
27 | })
28 | .then((res) => {
29 | console.log(res);
30 | setLoading(false);
31 | if (res.data.error) {
32 | console.log(res.data.error);
33 | // alert(res.data.error);
34 | const notify = () => toast(res.data.error);
35 | notify();
36 | } else {
37 | console.log(res.data.internships);
38 | setInternships(res.data.internships);
39 | console.log(internships);
40 | }
41 | })
42 | .catch((err) => {
43 | setLoading(false);
44 | console.log("Error: ", err);
45 | });
46 | }, []);
47 |
48 | if (internships && internships[4]) {
49 | console.log(internships[4]);
50 | const t = new Date(internships[4].startDate).toString("YYYY-MM-DD");
51 | console.log(t);
52 | }
53 |
54 | const deletePost = (postId) => {
55 | axios({
56 | method: "delete",
57 | url: "http://localhost:5000/employer/delete-internship",
58 | data: {
59 | postId,
60 | },
61 | headers: {
62 | Authorization: "Bearer " + localStorage.getItem("jwt"),
63 | "Content-Type": "application/json",
64 | },
65 | })
66 | .then((res) => {
67 | console.log(res);
68 | if (res.data.error) {
69 | console.log(res.data.error);
70 | // alert(res.data.error);
71 | const notify = () => toast(res.data.error);
72 | notify();
73 | } else {
74 | console.log(res.data.internships);
75 | setInternships(res.data.internships);
76 | console.log(internships);
77 | const notify = () => toast(res.data.message);
78 | notify();
79 | }
80 | })
81 | .catch((err) => {
82 | console.log("Error: ", err);
83 | });
84 | };
85 |
86 | return (
87 |
88 |
89 |
90 | {loading ? (
91 |
92 |
100 |
101 | ) : internships && !internships.length > 0 ? (
102 |
111 | No internships available right now
112 |
113 | ) : (
114 | internships &&
115 | internships.map((internship) => {
116 | // console.log(internship.createdBy._id, state.user._id);
117 | return (
118 |
122 |
127 |
128 | );
129 | })
130 | )}
131 |
132 |
133 | );
134 | };
135 | export default InternshipsByLocation;
136 |
--------------------------------------------------------------------------------
/src/components/Internships/InternshipByCompany.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Link, useParams } from "react-router-dom";
4 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
5 |
6 | import toast, { Toaster } from "react-hot-toast";
7 |
8 | import "./AllInternships.css";
9 | import { UserContext } from "../../App";
10 | import InternshipCard from "../../utils/UI/InternshipCard/InternshipCard";
11 |
12 | const InternshipsByCompany = () => {
13 | const { state, dispatch } = useContext(UserContext);
14 | const [internships, setInternships] = useState([]);
15 | const [loading, setLoading] = useState(true);
16 | const { companyName } = useParams();
17 |
18 | console.log(internships);
19 | console.log(state);
20 | useEffect(() => {
21 | axios({
22 | method: "get",
23 | url: `http://localhost:5000/user/companyName-internship/${companyName}`,
24 | headers: {
25 | Authorization: "Bearer " + localStorage.getItem("jwt"),
26 | },
27 | })
28 | .then((res) => {
29 | console.log(res);
30 | setLoading(false);
31 | if (res.data.error) {
32 | console.log(res.data.error);
33 | // alert(res.data.error);
34 | const notify = () => toast(res.data.error);
35 | notify();
36 | } else {
37 | console.log(res.data.internships);
38 | setInternships(res.data.internships);
39 | console.log(internships);
40 | }
41 | })
42 | .catch((err) => {
43 | setLoading(false);
44 | console.log("Error: ", err);
45 | });
46 | }, []);
47 |
48 | if (internships && internships[4]) {
49 | console.log(internships[4]);
50 | const t = new Date(internships[4].startDate).toString("YYYY-MM-DD");
51 | console.log(t);
52 | }
53 |
54 | const deletePost = (postId) => {
55 | axios({
56 | method: "delete",
57 | url: "http://localhost:5000/employer/delete-internship",
58 | data: {
59 | postId,
60 | },
61 | headers: {
62 | Authorization: "Bearer " + localStorage.getItem("jwt"),
63 | "Content-Type": "application/json",
64 | },
65 | })
66 | .then((res) => {
67 | console.log(res);
68 | if (res.data.error) {
69 | console.log(res.data.error);
70 | // alert(res.data.error);
71 | const notify = () => toast(res.data.error);
72 | notify();
73 | } else {
74 | console.log(res.data.internships);
75 | setInternships(res.data.internships);
76 | console.log(internships);
77 | const notify = () => toast(res.data.message);
78 | notify();
79 | }
80 | })
81 | .catch((err) => {
82 | console.log("Error: ", err);
83 | });
84 | };
85 |
86 | return (
87 |
88 |
89 |
90 | {loading ? (
91 |
92 |
100 |
101 | ) : internships && !internships.length > 0 ? (
102 |
111 | No internships available right now
112 |
113 | ) : (
114 | internships &&
115 | internships.map((internship) => {
116 | // console.log(internship.createdBy._id, state.user._id);
117 | return (
118 |
122 |
127 |
128 | );
129 | })
130 | )}
131 |
132 |
133 | );
134 | };
135 | export default InternshipsByCompany;
136 |
--------------------------------------------------------------------------------
/src/components/Internships/InternshipsGroupedByIndustry.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 |
5 | import toast, { Toaster } from "react-hot-toast";
6 |
7 | import "./AllInternships.css";
8 | import { UserContext } from "../../App";
9 | import InternshipCard from "../../utils/UI/InternshipCard/InternshipCard";
10 |
11 | const InternshipsGroupedByIndustry = () => {
12 | const { state, dispatch } = useContext(UserContext);
13 | const [internships, setInternships] = useState([]);
14 | const [loading, setLoading] = useState(true);
15 | // const { location } = useParams();
16 |
17 | // console.log(internships);
18 | // console.log(state);
19 | useEffect(() => {
20 | axios({
21 | method: "get",
22 | url: `http://localhost:5000/user/internship/industry`,
23 | headers: {
24 | Authorization: "Bearer " + localStorage.getItem("jwt"),
25 | },
26 | })
27 | .then((res) => {
28 | // console.log(res);
29 | setLoading(false);
30 | if (res.data.error) {
31 | // console.log(res.data.error);
32 | // alert(res.data.error);
33 | const notify = () => toast(res.data.error);
34 | notify();
35 | } else {
36 | // console.log(res.data.internships);
37 | setInternships(res.data.internships);
38 | console.log(internships);
39 | }
40 | })
41 | .catch((err) => {
42 | setLoading(false);
43 | console.log("Error: ", err);
44 | });
45 | }, []);
46 |
47 | if (internships && internships[4]) {
48 | // console.log(internships[4]);
49 | const t = new Date(internships[4].startDate).toString("YYYY-MM-DD");
50 | // console.log(t);
51 | }
52 |
53 | const deletePost = (postId) => {
54 | axios({
55 | method: "delete",
56 | url: "http://localhost:5000/employer/delete-internship",
57 | data: {
58 | postId,
59 | },
60 | headers: {
61 | Authorization: "Bearer " + localStorage.getItem("jwt"),
62 | "Content-Type": "application/json",
63 | },
64 | })
65 | .then((res) => {
66 | // console.log(res);
67 | if (res.data.error) {
68 | console.log(res.data.error);
69 | // alert(res.data.error);
70 | const notify = () => toast(res.data.error);
71 | notify();
72 | } else {
73 | // console.log(res.data.internships);
74 | // setInternships(res.data.internships);
75 | // console.log(internships);
76 | const notify = () => toast(res.data.message);
77 | notify();
78 | window.location.reload(false);
79 | }
80 | })
81 | .catch((err) => {
82 | console.log("Error: ", err);
83 | });
84 | };
85 |
86 | return (
87 |
88 |
89 |
90 | {loading ? (
91 |
92 |
100 |
101 | ) : internships && !internships.length > 0 ? (
102 |
111 | No internships available right now
112 |
113 | ) : (
114 | internships &&
115 | internships.map((intern) => (
116 |
117 |
{intern._id}
118 |
119 | {intern.internships &&
120 | intern.internships.map((internship) => {
121 | // console.log(internship.createdBy._id, state.user._id);
122 | return (
123 |
127 |
132 |
133 | );
134 | })}
135 | {/* )} */}
136 |
137 |
138 | ))
139 | )}
140 |
141 | );
142 | };
143 | export default InternshipsGroupedByIndustry;
144 |
--------------------------------------------------------------------------------
/src/components/Internships/InternshipGroupedByStream.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 |
5 | import toast, { Toaster } from "react-hot-toast";
6 |
7 | import "./AllInternships.css";
8 | import { UserContext } from "../../App";
9 | import InternshipCard from "../../utils/UI/InternshipCard/InternshipCard";
10 |
11 | const InternshipsGroupedByStream = () => {
12 | const { state, dispatch } = useContext(UserContext);
13 | const [internships, setInternships] = useState([]);
14 | const [loading, setLoading] = useState(true);
15 | // const { location } = useParams();
16 |
17 | // console.log(internships);
18 | // console.log(state);
19 | useEffect(() => {
20 | axios({
21 | method: "get",
22 | url: `http://localhost:5000/user/internship/stream`,
23 | headers: {
24 | Authorization: "Bearer " + localStorage.getItem("jwt"),
25 | },
26 | })
27 | .then((res) => {
28 | // console.log(res);
29 | setLoading(false);
30 | if (res.data.error) {
31 | // console.log(res.data.error);
32 | // alert(res.data.error);
33 | const notify = () => toast(res.data.error);
34 | notify();
35 | } else {
36 | // console.log(res.data.internships);
37 | setInternships(res.data.internships);
38 | console.log(internships);
39 | }
40 | })
41 | .catch((err) => {
42 | setLoading(false);
43 | console.log("Error: ", err);
44 | });
45 | }, []);
46 |
47 | // console.log(internships);
48 | console.log(internships[0]);
49 |
50 | if (internships && internships[4]) {
51 | // console.log(internships[4]);
52 | const t = new Date(internships[4].startDate).toString("YYYY-MM-DD");
53 | // console.log(t);
54 | }
55 |
56 | const deletePost = (postId) => {
57 | axios({
58 | method: "delete",
59 | url: "http://localhost:5000/employer/delete-internship",
60 | data: {
61 | postId,
62 | },
63 | headers: {
64 | Authorization: "Bearer " + localStorage.getItem("jwt"),
65 | "Content-Type": "application/json",
66 | },
67 | })
68 | .then((res) => {
69 | // console.log(res);
70 | if (res.data.error) {
71 | console.log(res.data.error);
72 | // alert(res.data.error);
73 | const notify = () => toast(res.data.error);
74 | notify();
75 | } else {
76 | console.log(res.data.internships);
77 | setInternships(res.data.internships);
78 | console.log(internships);
79 | const notify = () => toast(res.data.message);
80 | notify();
81 | }
82 | })
83 | .catch((err) => {
84 | console.log("Error: ", err);
85 | });
86 | };
87 |
88 | return (
89 |
90 |
91 |
92 | {loading ? (
93 |
94 |
102 |
103 | ) : internships && !internships.length > 0 ? (
104 |
113 | No internships available right now
114 |
115 | ) : (
116 | internships &&
117 | internships.map((intern) => (
118 |
119 |
{intern._id}
120 |
121 | {intern.internships &&
122 | intern.internships.map((internship) => {
123 | // console.log(internship.createdBy._id, state.user._id);
124 | return (
125 |
129 | {/* {internship.companyName} */}
130 |
135 |
136 | );
137 | })}
138 | {/* )} */}
139 |
140 |
141 | ))
142 | )}
143 |
144 | );
145 | };
146 | export default InternshipsGroupedByStream;
147 |
--------------------------------------------------------------------------------
/src/components/Internships/InternshipsGroupedByLoction.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 |
5 | import toast, { Toaster } from "react-hot-toast";
6 |
7 | import "./AllInternships.css";
8 | import { UserContext } from "../../App";
9 | import InternshipCard from "../../utils/UI/InternshipCard/InternshipCard";
10 |
11 | const InternshipsGroupedByLocation = () => {
12 | const { state, dispatch } = useContext(UserContext);
13 | const [internships, setInternships] = useState([]);
14 | const [loading, setLoading] = useState(true);
15 | // const { location } = useParams();
16 |
17 | // console.log(internships);
18 | // console.log(state);
19 | useEffect(() => {
20 | axios({
21 | method: "get",
22 | url: `http://localhost:5000/user/internship/location`,
23 | headers: {
24 | Authorization: "Bearer " + localStorage.getItem("jwt"),
25 | },
26 | })
27 | .then((res) => {
28 | // console.log(res);
29 | setLoading(false);
30 | if (res.data.error) {
31 | // console.log(res.data.error);
32 | // alert(res.data.error);
33 | const notify = () => toast(res.data.error);
34 | notify();
35 | } else {
36 | // console.log(res.data.internships);
37 | setInternships(res.data.internships);
38 | console.log(internships);
39 | }
40 | })
41 | .catch((err) => {
42 | setLoading(false);
43 | console.log("Error: ", err);
44 | });
45 | }, []);
46 |
47 | // console.log(internships);
48 | console.log(internships[0]);
49 |
50 | if (internships && internships[4]) {
51 | // console.log(internships[4]);
52 | const t = new Date(internships[4].startDate).toString("YYYY-MM-DD");
53 | // console.log(t);
54 | }
55 |
56 | const deletePost = (postId) => {
57 | axios({
58 | method: "delete",
59 | url: "http://localhost:5000/employer/delete-internship",
60 | data: {
61 | postId,
62 | },
63 | headers: {
64 | Authorization: "Bearer " + localStorage.getItem("jwt"),
65 | "Content-Type": "application/json",
66 | },
67 | })
68 | .then((res) => {
69 | // console.log(res);
70 | if (res.data.error) {
71 | console.log(res.data.error);
72 | // alert(res.data.error);
73 | const notify = () => toast(res.data.error);
74 | notify();
75 | } else {
76 | console.log(res.data.internships);
77 | setInternships(res.data.internships);
78 | console.log(internships);
79 | const notify = () => toast(res.data.message);
80 | notify();
81 | }
82 | })
83 | .catch((err) => {
84 | console.log("Error: ", err);
85 | });
86 | };
87 |
88 | return (
89 |
90 |
91 |
92 | {loading ? (
93 |
94 |
102 |
103 | ) : internships && !internships.length > 0 ? (
104 |
113 | No internships available right now
114 |
115 | ) : (
116 | internships &&
117 | internships.map((intern) => (
118 |
119 |
{intern._id}
120 |
121 | {intern.internships &&
122 | intern.internships.map((internship) => {
123 | // console.log(internship.createdBy._id, state.user._id);
124 | return (
125 |
129 | {/* {internship.companyName} */}
130 |
135 |
136 | );
137 | })}
138 | {/* )} */}
139 |
140 |
141 | ))
142 | )}
143 |
144 | );
145 | };
146 | export default InternshipsGroupedByLocation;
147 |
--------------------------------------------------------------------------------
/src/components/student-profile/Project.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from "react";
2 | import Container from "@material-ui/core/Container";
3 | import TextField from "@material-ui/core/TextField";
4 | import Button from "@material-ui/core/Button";
5 | import IconButton from "@material-ui/core/IconButton";
6 | import RemoveIcon from "@material-ui/icons/Remove";
7 | import AddIcon from "@material-ui/icons/Add";
8 | import Icon from "@material-ui/core/Icon";
9 | import { v4 as uuidv4 } from "uuid";
10 | import "./profile.css";
11 | import Label from "./Label";
12 | import { Row } from "react-bootstrap";
13 |
14 | function Project({ Project, changeValue }) {
15 | const [inputFields, setInputFields] = useState([
16 | {
17 | id: uuidv4(),
18 | ProjectTitle: "",
19 | ProjectLink: "",
20 | StartDate: "",
21 | LastDate: "",
22 | Description: "",
23 | },
24 | ]);
25 |
26 | useEffect(() => {
27 | changeValue(inputFields, "Project");
28 | }, [inputFields]);
29 |
30 | const handleSubmit = (e) => {
31 | e.preventDefault();
32 | console.log("InputFields", inputFields);
33 | };
34 |
35 | const handleChangeInput = (id, event) => {
36 | const newInputFields = inputFields.map((i) => {
37 | if (id === i.id) {
38 | i[event.target.name] = event.target.value;
39 | }
40 | return i;
41 | });
42 |
43 | setInputFields(newInputFields);
44 | };
45 |
46 | const handleAddFields = () => {
47 | setInputFields([
48 | ...inputFields,
49 | {
50 | id: uuidv4(),
51 | ProjectTitle: "",
52 | ProjectLink: "",
53 | StartDate: "",
54 | LastDate: "",
55 | Description: "",
56 | },
57 | ]);
58 | };
59 |
60 | const handleRemoveFields = (id) => {
61 | const values = [...inputFields];
62 | values.splice(
63 | values.findIndex((value) => value.id === id),
64 | 1
65 | );
66 | setInputFields(values);
67 | };
68 |
69 | return (
70 | <>
71 | Project
72 |
150 |
151 | >
152 | );
153 | }
154 |
155 | export default Project;
156 |
--------------------------------------------------------------------------------
/src/components/Jobs/JobsByCompanyName.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 | import toast, { Toaster } from "react-hot-toast";
5 | import { UserContext } from "../../App";
6 |
7 | import "../Internships/AllInternships.css";
8 | import JobsCard from "../../utils/UI/JobsCard/JobsCard";
9 | import { useParams } from "react-router";
10 |
11 | const JobsByCompanyName = () => {
12 | const { state, dispatch } = useContext(UserContext);
13 | const [jobs, setJobs] = useState([]);
14 | const [loading, setLoading] = useState(true);
15 | const { companyName } = useParams();
16 | // useEffect(() => {
17 | // axios({
18 | // method: "get",
19 | // url: "http://localhost:5000/user/all-jobs",
20 | // headers: {
21 | // Authorization: "Bearer " + localStorage.getItem("jwt"),
22 | // },
23 | // })
24 | // .then((res) => {
25 | // console.log(res);
26 | // if (res.data.error) {
27 | // console.log(res.data.error);
28 | // // alert(res.data.error);
29 | // const notify = () => toast(res.data.error);
30 | // notify();
31 | // } else {
32 | // // if (res && res.data) {
33 | // console.log(res.data.jobs);
34 | // setJobs(res.data.jobs);
35 | // console.log(jobs);
36 | // // }
37 | // }
38 | // })
39 | // .catch((err) => {
40 | // console.log("Error: ", err);
41 | // });
42 | // }, []);
43 |
44 | useEffect(() => {
45 | axios({
46 | method: "get",
47 | url: `http://localhost:5000/user/job/companyName/${companyName}`,
48 | headers: {
49 | Authorization: "Bearer " + localStorage.getItem("jwt"),
50 | },
51 | })
52 | .then((res) => {
53 | console.log(res);
54 | setLoading(false);
55 | if (res.data.error) {
56 | console.log(res.data.error);
57 | // alert(res.data.error);
58 | const notify = () => toast(res.data.error);
59 | notify();
60 | } else {
61 | console.log(res.data.Jobs);
62 |
63 | setJobs(res.data.Jobs);
64 | console.log(jobs);
65 | }
66 | })
67 | .catch((err) => {
68 | setLoading(false);
69 | console.log("Error: ", err);
70 | });
71 | }, []);
72 |
73 | if (jobs && jobs[4]) {
74 | console.log(jobs[4]);
75 | const t = new Date(jobs[4].startDate).toString("YYYY-MM-DD");
76 | console.log(t);
77 | }
78 |
79 | const deletePost = (postId) => {
80 | axios({
81 | method: "delete",
82 | url: "http://localhost:5000/employer/delete-job",
83 | data: {
84 | postId,
85 | },
86 | headers: {
87 | Authorization: "Bearer " + localStorage.getItem("jwt"),
88 | "Content-Type": "application/json",
89 | },
90 | })
91 | .then((res) => {
92 | console.log(res);
93 | if (res.data.error) {
94 | console.log(res.data.error);
95 | // alert(res.data.error);
96 | const notify = () => toast(res.data.error);
97 | notify();
98 | } else {
99 | // console.log(res.data.jobs);
100 | // setJobs(res.data.jobs);
101 | // console.log(jobs);
102 | window.location.reload(false);
103 | const notify = () => toast(res.data.message);
104 | notify();
105 | }
106 | })
107 | .catch((err) => {
108 | console.log("Error: ", err);
109 | });
110 | };
111 |
112 | return (
113 |
114 |
115 |
116 | {loading ? (
117 |
118 |
126 |
127 | ) : jobs && !jobs.length > 0 ? (
128 |
137 | No Jobs available right now
138 |
139 | ) : (
140 | jobs &&
141 | jobs.map((job) => {
142 | return (
143 |
147 |
153 |
154 | );
155 | })
156 | )}
157 |
158 |
159 | );
160 | };
161 | export default JobsByCompanyName;
162 |
--------------------------------------------------------------------------------
/src/components/Jobs/JobsGroupedByStream.js:
--------------------------------------------------------------------------------
1 | import axios from "axios";
2 | import React, { useContext, useEffect, useState } from "react";
3 | import { Col, Row, Spinner, Alert } from "react-bootstrap";
4 | import toast, { Toaster } from "react-hot-toast";
5 | import { UserContext } from "../../App";
6 |
7 | import "../Internships/AllInternships.css";
8 | import JobsCard from "../../utils/UI/JobsCard/JobsCard";
9 |
10 | const JobsGroupedByStream = () => {
11 | const { state, dispatch } = useContext(UserContext);
12 | const [jobs, setJobs] = useState([]);
13 | const [loading, setLoading] = useState(true);
14 | // useEffect(() => {
15 | // axios({
16 | // method: "get",
17 | // url: "http://localhost:5000/user/all-jobs",
18 | // headers: {
19 | // Authorization: "Bearer " + localStorage.getItem("jwt"),
20 | // },
21 | // })
22 | // .then((res) => {
23 | // console.log(res);
24 | // if (res.data.error) {
25 | // console.log(res.data.error);
26 | // // alert(res.data.error);
27 | // const notify = () => toast(res.data.error);
28 | // notify();
29 | // } else {
30 | // // if (res && res.data) {
31 | // console.log(res.data.jobs);
32 | // setJobs(res.data.jobs);
33 | // console.log(jobs);
34 | // // }
35 | // }
36 | // })
37 | // .catch((err) => {
38 | // console.log("Error: ", err);
39 | // });
40 | // }, []);
41 |
42 | useEffect(() => {
43 | axios({
44 | method: "get",
45 | url: "http://localhost:5000/user/job/stream",
46 | headers: {
47 | Authorization: "Bearer " + localStorage.getItem("jwt"),
48 | },
49 | })
50 | .then((res) => {
51 | console.log(res);
52 | setLoading(false);
53 | if (res.data.error) {
54 | console.log(res.data.error);
55 | // alert(res.data.error);
56 | const notify = () => toast(res.data.error);
57 | notify();
58 | } else {
59 | console.log(res.data.jobs);
60 |
61 | setJobs(res.data.jobs);
62 | console.log(jobs);
63 | }
64 | })
65 | .catch((err) => {
66 | setLoading(false);
67 | console.log("Error: ", err);
68 | });
69 | }, []);
70 |
71 | if (jobs && jobs[4]) {
72 | console.log(jobs[4]);
73 | const t = new Date(jobs[4].startDate).toString("YYYY-MM-DD");
74 | console.log(t);
75 | }
76 |
77 | const deletePost = (postId) => {
78 | axios({
79 | method: "delete",
80 | url: "http://localhost:5000/employer/delete-job",
81 | data: {
82 | postId,
83 | },
84 | headers: {
85 | Authorization: "Bearer " + localStorage.getItem("jwt"),
86 | "Content-Type": "application/json",
87 | },
88 | })
89 | .then((res) => {
90 | console.log(res);
91 | if (res.data.error) {
92 | console.log(res.data.error);
93 | // alert(res.data.error);
94 | const notify = () => toast(res.data.error);
95 | notify();
96 | } else {
97 | // console.log(res.data.jobs);
98 | // setJobs(res.data.jobs);
99 | // console.log(jobs);
100 | const notify = () => toast(res.data.message);
101 | notify();
102 | }
103 | })
104 | .catch((err) => {
105 | console.log("Error: ", err);
106 | });
107 | };
108 |
109 | return (
110 |
111 |
112 | {loading ? (
113 |
114 |
122 |
123 | ) : jobs && !jobs.length > 0 ? (
124 |
133 | No Jobs available right now
134 |
135 | ) : (
136 | jobs &&
137 | jobs.map((intern) => (
138 |
139 |
{intern._id}
140 |
141 | {intern.jobs &&
142 | intern.jobs.map((job) => {
143 | // console.log(job.createdBy._id, state.user._id);
144 | return (
145 |
149 | {/* {job.companyName} */}
150 |
156 |
157 | );
158 | })}
159 |
160 |
161 | ))
162 | )}
163 |
164 | );
165 | };
166 | export default JobsGroupedByStream;
167 |
--------------------------------------------------------------------------------