A 3-role job portal (Admin, Employer, Job Seeker) built with ASP.NET Core Web API, following Clean Architecture principles for clear separation of concerns.
-> Role-based access for Admin, Employer, and Job Seeker, with JWT-based stateless authentication and BCrypt password hashing -> Employer job posting with full CRUD support -> Advanced search & filtering by category, location, and salary, powered by SQL Server stored procedures -> Admin moderation — approve or reject job listings before they go live -> Automated email notifications via SendGrid when an application status changes -> Resume/file uploads for job applications -> Pagination & in-memory caching on high-traffic list endpoints -> Swagger UI for interactive API documentation -> Unit tests with xUnit and Moq covering core service logic
ASP.NET Core 8 | Web API | Entity Framework Core | SQL Server JWT | SendGrid | xUnit | Moq | Swagger
JobPortal.sln src/ JobPortal.Domain/ Entities and enums — no external dependencies JobPortal.Application/ DTOs, interfaces, and business logic (AuthService, JobService, ApplicationService) JobPortal.Infrastructure/ EF Core, stored-procedure calls, SendGrid, caching, file storage, JWT generation JobPortal.API/ Controllers, Program.cs, Swagger, appsettings.json JobPortal.Tests/ xUnit + Moq tests sql/ StoredProcedures.sql sp_SearchJobs, called from JobRepository
Prerequisites: .NET 8 SDK, SQL Server (Express or LocalDB works fine), and a free SendGrid API key for email notifications.
- Clone and restore
bashgit clone https://github.com/meJoydev/Job-Portal.git cd Job-Portal dotnet restore dotnet build
- Configure settings
In src/JobPortal.API/appsettings.json, set:
ConnectionStrings:DefaultConnection — your SQL Server connection string Jwt:Key — any random 32+ character secret SendGrid:ApiKey — your SendGrid API key
- Set up the database
bashdotnet tool install --global dotnet-ef # one-time, if not already installed cd src/JobPortal.API dotnet ef migrations add InitialCreate --project ../JobPortal.Infrastructure --startup-project . dotnet ef database update --project ../JobPortal.Infrastructure --startup-project .
Then run sql/StoredProcedures.sql against the new database in SQL Server Management Studio or Azure Data Studio.
- Run it
bashdotnet run --project src/JobPortal.API
Open the Swagger UI at the URL shown in the console. Register a user, log in, authorize with the returned JWT, then try posting, searching, and applying to jobs.
- Run tests
bashdotnet test
- Razor Pages / React frontend on top of the existing API
- Refresh token support
- Docker Compose setup for one-command local startup