Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

Β 

History

1 Commit

Folders and files

Repository files navigation

πŸŽ“ Smart Placement Management System

A full-featured placement management backend built with Spring Boot, Hibernate, and MySQL.


✨ Features

Feature Details
Student Profile Management CRUD, skills, branch, CGPA, backlogs, 10th/12th
Company Eligibility Checking Auto-checks CGPA, backlogs, branch, skills, percentages
Resume Verification PDF upload + admin verify/reject flow
Placement Statistics Placed %, avg/max/min CTC, branch breakdown, industry breakdown
Interview Scheduling Multi-round, online/offline, auto-reminders
Email Notifications Application, status updates, interview, placement congrats
JWT Auth Roles: STUDENT, TPO, ADMIN
Bonus Feature Students see exactly which companies they're eligible for and WHY

πŸ—οΈ Project Structure

src/main/java/com/placement/
β”œβ”€β”€ PlacementApplication.java
β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ SecurityConfig.java        # Spring Security + JWT
β”‚   β”œβ”€β”€ JwtUtils.java
β”‚   └── JwtAuthFilter.java
β”œβ”€β”€ controller/
β”‚   β”œβ”€β”€ AuthController.java        # /api/v1/auth
β”‚   β”œβ”€β”€ StudentController.java     # /api/v1/students
β”‚   β”œβ”€β”€ CompanyController.java     # /api/v1/companies
β”‚   β”œβ”€β”€ ApplicationController.java # /api/v1/applications
β”‚   β”œβ”€β”€ InterviewController.java   # /api/v1/interviews
β”‚   └── StatsController.java       # /api/v1/stats
β”œβ”€β”€ service/
β”‚   β”œβ”€β”€ EligibilityService.java    # ⭐ Core bonus feature logic
β”‚   β”œβ”€β”€ StudentService.java
β”‚   β”œβ”€β”€ CompanyService.java
β”‚   β”œβ”€β”€ ApplicationService.java
β”‚   β”œβ”€β”€ InterviewService.java
β”‚   β”œβ”€β”€ EmailService.java
β”‚   └── StatsService.java
β”œβ”€β”€ model/
β”‚   β”œβ”€β”€ User.java
β”‚   β”œβ”€β”€ Student.java
β”‚   β”œβ”€β”€ Company.java
β”‚   β”œβ”€β”€ Application.java
β”‚   └── Interview.java
β”œβ”€β”€ repository/
β”‚   β”œβ”€β”€ UserRepository.java
β”‚   β”œβ”€β”€ StudentRepository.java
β”‚   β”œβ”€β”€ CompanyRepository.java
β”‚   β”œβ”€β”€ ApplicationRepository.java
β”‚   └── InterviewRepository.java
β”œβ”€β”€ dto/
β”‚   β”œβ”€β”€ AuthDTO.java
β”‚   β”œβ”€β”€ StudentDTO.java            # Includes EligibilityResult
β”‚   β”œβ”€β”€ CompanyDTO.java
β”‚   └── PlacementStatsDTO.java
β”œβ”€β”€ exception/
β”‚   β”œβ”€β”€ ResourceNotFoundException.java
β”‚   β”œβ”€β”€ DuplicateResourceException.java
β”‚   └── GlobalExceptionHandler.java
└── util/
    └── DataSeeder.java            # Seeds sample data on first run

πŸš€ Quick Start

Prerequisites

  • Java 17+
  • Maven 3.8+
  • MySQL 8+

1. Create Database

CREATE DATABASE placement_db;

2. Configure application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/placement_db
spring.datasource.username=YOUR_MYSQL_USER
spring.datasource.password=YOUR_MYSQL_PASSWORD

spring.mail.username=YOUR_GMAIL
spring.mail.password=YOUR_APP_PASSWORD   # Gmail App Password (not your login password)

3. Run

mvn spring-boot:run

The app starts at http://localhost:8080 Swagger UI: http://localhost:8080/swagger-ui.html

4. First Login (seeded by DataSeeder)

username: admin
password: Admin@123

πŸ“‘ API Reference

πŸ” Auth

Method Endpoint Description
POST /api/v1/auth/register Register user
POST /api/v1/auth/login Login β†’ get JWT

πŸ‘©β€πŸŽ“ Students

Method Endpoint Access Description
POST /api/v1/students ADMIN/TPO Create student profile
GET /api/v1/students ADMIN/TPO List all students
GET /api/v1/students/{id} All Get student by ID
GET /api/v1/students/roll/{rollNo} All Get by roll number
GET /api/v1/students/branch/{branch} All Get by branch
PUT /api/v1/students/{id} All Update profile
DELETE /api/v1/students/{id} ADMIN/TPO Delete student
POST /api/v1/students/{id}/resume All Upload PDF resume
PATCH /api/v1/students/{id}/resume/verify ADMIN/TPO Verify resume
GET /api/v1/students/unverified-resumes ADMIN/TPO Unverified resumes
PATCH /api/v1/students/{id}/place ADMIN/TPO Mark as placed
GET /api/v1/students/{id}/eligible-companies All ⭐ All companies with eligibility
GET /api/v1/students/{id}/eligible-companies/only All ⭐ Only eligible companies

🏒 Companies

Method Endpoint Access Description
POST /api/v1/companies ADMIN/TPO Add company drive
GET /api/v1/companies All List all companies
GET /api/v1/companies/{id} All Get company details
GET /api/v1/companies/status/{status} All Filter by status
PUT /api/v1/companies/{id} ADMIN/TPO Update company
DELETE /api/v1/companies/{id} ADMIN Delete company
GET /api/v1/companies/{id}/eligible-students ADMIN/TPO Students eligible for this drive

πŸ“‹ Applications

Method Endpoint Description
POST /api/v1/applications Apply to a company
GET /api/v1/applications/student/{id} Student's applications
GET /api/v1/applications/company/{id} Applications for a company
PATCH /api/v1/applications/{id}/status Update status
PATCH /api/v1/applications/{id}/withdraw Withdraw application

Application status flow:

APPLIED β†’ SHORTLISTED β†’ APTITUDE_TEST β†’ GROUP_DISCUSSION
       β†’ TECHNICAL_ROUND β†’ HR_ROUND β†’ OFFER_RECEIVED / REJECTED

πŸ“… Interviews

Method Endpoint Description
POST /api/v1/interviews Schedule interview
PUT /api/v1/interviews/{id} Update / add feedback
GET /api/v1/interviews/student/{id} Student's interviews
GET /api/v1/interviews/company/{id} Company's interviews
GET /api/v1/interviews/today Today's interviews

πŸ“Š Statistics

Method Endpoint Description
GET /api/v1/stats Full placement dashboard stats

⭐ Bonus Feature – Eligibility Engine

The eligibility engine at EligibilityService checks 7 criteria per student-company pair:

1. CGPA          β†’ Must meet minCgpa
2. Active Backlogs β†’ Must be ≀ maxBacklogs
3. Historical Backlogs β†’ If company disallows, totalBacklogs must be 0
4. Branch        β†’ Must be in eligibleBranches list
5. Skills        β†’ Missing skills flagged (advisory, doesn't block eligibility)
6. 10th %        β†’ Must meet minTenthPercentage
7. 12th %        β†’ Must meet minTwelfthPercentage
8. Placement Status β†’ Already placed students are excluded

Sample Response

[
  {
    "companyId": 1,
    "companyName": "TechCorp Solutions",
    "jobRole": "Software Development Engineer",
    "ctcOffered": 12.0,
    "eligible": true,
    "reasons": [
      "βœ“ CGPA 8.50 meets requirement of 7.50",
      "βœ“ Active backlogs (0) within limit (0)",
      "βœ“ Branch 'CSE' is eligible",
      "βœ“ All required skills present",
      "βœ“ 10th 90% meets requirement",
      "βœ“ 12th 85% meets requirement"
    ],
    "missingSkills": []
  },
  {
    "companyId": 2,
    "companyName": "DataAI Inc",
    "jobRole": "Data Science Analyst",
    "ctcOffered": 15.0,
    "eligible": false,
    "reasons": [
      "CGPA 8.50 is below required 9.00"
    ],
    "missingSkills": ["Statistics"]
  }
]

πŸ“§ Email Notifications

Emails are sent asynchronously for:

  • βœ… Application submitted
  • πŸ”„ Application status changed
  • πŸ“… Interview scheduled / rescheduled
  • ⏰ Interview reminder (24h before – auto-scheduled)
  • βœ“ Resume verified
  • πŸŽ‰ Placement congratulations

Configure Gmail: generate an App Password at https://myaccount.google.com/apppasswords


πŸ—„οΈ Database Schema (Auto-created by Hibernate)

users              β†’ id, username, email, password, enabled
user_roles         β†’ user_id, role

students           β†’ id, roll_number, first_name, last_name, email, branch,
                     cgpa, backlog_count, total_backlogs, resume_url,
                     resume_verified, placement_status, placed_company, ctc_offered ...
student_skills     β†’ student_id, skill

companies          β†’ id, name, industry, job_role, ctc_offered, min_cgpa,
                     max_backlogs, drive_status, drive_date ...
company_required_skills  β†’ company_id, skill
company_eligible_branches β†’ company_id, branch

applications       β†’ id, student_id, company_id, status, remarks, applied_at
interviews         β†’ id, student_id, company_id, interview_type, round_number,
                     scheduled_at, mode, status, feedback, score, email_sent

πŸ§ͺ Running Tests

mvn test

Tests use H2 in-memory database β€” no MySQL required.


πŸ”’ Security

  • JWT-based stateless auth
  • Role-based access: ROLE_STUDENT, ROLE_TPO, ROLE_ADMIN
  • Passwords BCrypt-hashed
  • Swagger UI open (disable in production)

πŸ› οΈ Tech Stack

Layer Technology
Framework Spring Boot 3.2
ORM Hibernate / Spring Data JPA
Database MySQL 8
Security Spring Security + JWT
Email Spring Mail (SMTP)
Docs SpringDoc OpenAPI (Swagger UI)
Build Maven
Java 17

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages