Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
ddd8eb0
Merge branch 'master' into develop
oli-tolnai Apr 23, 2026
0957cd9
AI evaluation, company dashboard and routerlink service to navigate t…
AdamRevesz Apr 23, 2026
daf51d6
refactor(question): rename fill-in-the-blank to open-ended on frontend
oli-tolnai Apr 23, 2026
c8023eb
fix(question-form): normalize difficulty value in edit/update flow
oli-tolnai Apr 23, 2026
2792c23
feat(question-bank): enhance question management with tags and improv…
oli-tolnai Apr 23, 2026
2f71074
refactor(question-bank-form): update ui for create question
oli-tolnai Apr 24, 2026
fd94174
feat(question-bank): add tags to create question form
oli-tolnai Apr 24, 2026
dc219ca
feat(question-bank): implement modal for viewing question details and…
oli-tolnai Apr 24, 2026
5117b02
refactor(question-bank): update question details view with improved l…
oli-tolnai Apr 24, 2026
ffd04ba
refactor(question-bank): update question details view with creator in…
oli-tolnai Apr 24, 2026
f3ab004
feat(question-bank): enhance question editing functionality with moda…
oli-tolnai Apr 24, 2026
f1195fb
Merge pull request #70 from bprof-spec-codes/feature/rename-fill-in-t…
oli-tolnai Apr 24, 2026
6b394f1
Merge pull request #73 from bprof-spec-codes/feature/update-question-…
Marci260 Apr 24, 2026
bc2631d
Merge branch 'develop' into feature/AI-Company-Dashboard
AdamRevesz Apr 24, 2026
a4846de
Merge pull request #69 from bprof-spec-codes/feature/AI-Company-Dashb…
AdamRevesz Apr 24, 2026
e9d8e95
add filters to search and refact
KelemenOzseb Apr 24, 2026
55203b6
job model and search filter fix
KelemenOzseb Apr 24, 2026
c487fb7
feat(assessment-create): implement styling and functionality for asse…
oli-tolnai Apr 25, 2026
fe9eee0
feat(assessment-create): enhance question selection with difficulty f…
oli-tolnai Apr 25, 2026
9ff51da
feat(assessment-create): update question selection logic and enhance …
oli-tolnai Apr 25, 2026
74fcee7
feat(assessment-create): update tag references for clarity in selecti…
oli-tolnai Apr 25, 2026
d2749f2
feat(assessment-create): improve random rule management and UI intera…
oli-tolnai Apr 25, 2026
36a50d2
Merge branch 'develop' into feature/update-test-creation
oli-tolnai Apr 25, 2026
1b99e34
Merge pull request #76 from bprof-spec-codes/feature/update-test-crea…
oli-tolnai Apr 25, 2026
0e84bea
Skill string added to users and user dtos
zadoriaron Apr 25, 2026
c619834
UpdateSkill logic completed
zadoriaron Apr 25, 2026
a534cdb
update skills refactored
zadoriaron Apr 25, 2026
ff1b7e9
Get User methods mapping expanded
zadoriaron Apr 25, 2026
6cfe239
Merge remote-tracking branch 'origin/develop' into feature/68-ProfileCV
zadoriaron Apr 25, 2026
a370712
feat: clean up imports and resolve merge conflicts in app modules; up…
oli-tolnai Apr 25, 2026
621c430
Merge remote-tracking branch 'origin/develop' into feature/68-ProfileCV
zadoriaron Apr 25, 2026
e01e139
fe add skills works
zadoriaron Apr 25, 2026
055465d
add skills works
zadoriaron Apr 25, 2026
f1188b2
updateskill be refoacroted
zadoriaron Apr 26, 2026
0a1d21a
Skills add + remove works + design refactor
zadoriaron Apr 26, 2026
cd666c4
score to double + add inspected
KelemenOzseb Apr 26, 2026
d323a90
ai connection added
KelemenOzseb Apr 26, 2026
f879cb8
logic for manual feedback added
KelemenOzseb Apr 26, 2026
598d886
api endpoint added and appsettings.json fix
KelemenOzseb Apr 26, 2026
c3917f8
workflow update
KelemenOzseb Apr 26, 2026
d8092f6
fast fix
KelemenOzseb Apr 27, 2026
20da097
Merge pull request #77 from bprof-spec-codes/feature/68-ProfileCV
oli-tolnai Apr 27, 2026
39fc692
Update package lock
oli-tolnai Apr 27, 2026
488db52
Merge remote-tracking branch 'origin/develop' into feature/60-search-…
oli-tolnai Apr 27, 2026
262b431
Merge pull request #75 from bprof-spec-codes/feature/60-search-refact
oli-tolnai Apr 27, 2026
b58e494
Update package lock
oli-tolnai Apr 27, 2026
3be87c0
User created jobs and applicants listed component, review user compon…
AdamRevesz May 2, 2026
dd90963
fix feedback
KelemenOzseb May 2, 2026
269a2bb
logic, and seed data,database fixes and improvements
Marci260 May 7, 2026
ded6a44
Merge branch 'develop' into feature/15-manual-feedback
AdamRevesz May 7, 2026
05326ed
Merge pull request #78 from bprof-spec-codes/feature/15-manual-feedback
AdamRevesz May 7, 2026
44b0b03
Merge branch 'develop' into feature/61-apply-to-job
Marci260 May 11, 2026
81eb9a8
Merge pull request #79 from bprof-spec-codes/feature/61-apply-to-job
Marci260 May 11, 2026
30ed142
refact and job application status changer api added
KelemenOzseb May 11, 2026
ab6ea4a
Frontend for Accept reject. Added a property so the notifications on …
AdamRevesz May 12, 2026
129e1f6
quick fix on the jobupload navigation
AdamRevesz May 12, 2026
011c4d4
bug fixes
KelemenOzseb May 12, 2026
756e24a
routing fix
KelemenOzseb May 14, 2026
039803b
routing fix + date bug fix + job application status badge added
KelemenOzseb May 15, 2026
5dd7d68
Skill entity added
zadoriaron May 16, 2026
9abdea1
skills table configured
zadoriaron May 16, 2026
181d58f
Fix question bank seed repair
oli-tolnai May 16, 2026
8cfb85b
Update JobApplications migration to set UserId1 from UserId for exist…
oli-tolnai May 16, 2026
b755b9c
Skill add to table completed, you can add skill to user
zadoriaron May 16, 2026
e6eb342
assesment added to skill + works
zadoriaron May 16, 2026
6a96cba
controller name changed at assesments
zadoriaron May 16, 2026
b4ad81e
Merge pull request #83 from bprof-spec-codes/fix-seed-question-bank-r…
oli-tolnai May 17, 2026
03f85d7
Merge remote-tracking branch 'origin/develop' into feature/81-AddSkil…
zadoriaron May 17, 2026
691453d
Merge pull request #84 from bprof-spec-codes/feature/81-AddSkillsTable
zadoriaron May 17, 2026
8e7b964
Certificate system and a bit of Skills table refactoring
AdamRevesz May 19, 2026
09bd634
Merge pull request #82 from bprof-spec-codes/feature/64-job-applicati…
oli-tolnai May 20, 2026
15c524a
Merge branch 'develop' into feature/82-Certificate-System
AdamRevesz May 20, 2026
79fd2a4
Merge pull request #88 from bprof-spec-codes/feature/82-Certificate-S…
AdamRevesz May 20, 2026
9dc8756
fix errors
KelemenOzseb May 20, 2026
58ca515
Home , Profile view, Profile edit refact. CV additions work experienc…
AdamRevesz May 20, 2026
b02b420
Merge branch 'develop' into feature/83-UI-Refact
AdamRevesz May 20, 2026
6a08c60
Migration problem fix
AdamRevesz May 20, 2026
9fd9641
bug fixes
KelemenOzseb May 20, 2026
b9d481e
Merge pull request #89 from bprof-spec-codes/feature/83-UI-Refact
AdamRevesz May 20, 2026
65dca07
update readme
Marci260 May 20, 2026
33c9526
fixes
Marci260 May 21, 2026
611b1fc
small fixes
Marci260 May 21, 2026
bc1db68
Merge pull request #90 from bprof-spec-codes/hotfix/final-fix
Marci260 May 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/workflows/backend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
SSH_HOST: skillproof.hu
SSH_USER: root
# --- SECRET-ek ---
# SSH_KEY, SSH_PASS, DB_CONN, DESIRED_PORT
# SSH_KEY, SSH_PASS, DB_CONN, DESIRED_PORT, API_KEY

steps:
- name: Checkout
Expand Down Expand Up @@ -107,7 +107,8 @@ jobs:
--arg frontend "${{ env.FRONTEND_URL }}" \
--arg jwtkey "${{ secrets.JWT_KEY }}" \
--arg port "${{ secrets.DESIRED_PORT }}" \
'.db.conn = $conn | .settings.frontend = $frontend | .settings.port = $port | .Jwt.Key = $jwtkey' \
--arg apikey "${{ secrets.API_KEY }}" \
'.db.conn = $conn | .settings.frontend = $frontend | .settings.port = $port | .Jwt.Key = $jwtkey | .Gemini.ApiKey = $apikey' \
"$NEW_RELEASE/appsettings.json" | sudo tee "$NEW_RELEASE/appsettings.json.tmp" > /dev/null

sudo mv "$NEW_RELEASE/appsettings.json.tmp" "$NEW_RELEASE/appsettings.json"
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/testBackend.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
SSH_HOST: test.skillproof.hu
SSH_USER: root
# --- SECRET-ek (Repo Settings → Secrets and variables → Actions) ---
# SSH_KEY, SSH_PASS, DB_CONN_TEST, DESIRED_PORT_TEST
# SSH_KEY, SSH_PASS, DB_CONN_TEST, DESIRED_PORT_TEST, API_KEY

steps:
- name: Checkout
Expand Down Expand Up @@ -107,7 +107,8 @@ jobs:
--arg frontend "${{ env.FRONTEND_URL }}" \
--arg jwtkey "${{ secrets.JWT_KEY }}" \
--arg port "${{ secrets.DESIRED_PORT_TEST }}" \
'.db.conn = $conn | .settings.frontend = $frontend | .settings.port = $port | .Jwt.Key = $jwtkey' \
--arg apikey "${{ secrets.API_KEY }}" \
'.db.conn = $conn | .settings.frontend = $frontend | .settings.port = $port | .Jwt.Key = $jwtkey | .Gemini.ApiKey = $apikey' \
"$NEW_RELEASE/appsettings.json" | sudo tee "$NEW_RELEASE/appsettings.json.tmp" > /dev/null
sudo mv "$NEW_RELEASE/appsettings.json.tmp" "$NEW_RELEASE/appsettings.json"
else
Expand Down
86 changes: 77 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,81 @@
# skillproof
## Adatbázis beállítása helyi fejlesztéshez (Docker)
# Skillproof – Kompetencia-alapú toborzási platform

Mivel a projekt Linux/Mac környezetben is futtatható, az adatbázist (MSSQL) egy Docker konténerben futtatjuk. Nincs szükség bonyolult lokális telepítésekre!
A Skillproof egy modern, professzionális hálózatépítő és álláskereső webalkalmazás, amely a munkáltatókat és a munkavállalókat köti össze. A platform fókuszában a tudásalapú kiválasztás áll: a cégek az álláshirdetésekhez saját kompetenciateszteket rendelhetnek, amelyeket a jelölteknek a jelentkezés során ki kell tölteniük.

### Előfeltételek
* **Docker** és **Docker Compose** telepítve legyen a gépeden.
* **.NET EF Core Tools** telepítve legyen globálisan vagy lokálisan (`dotnet tool install dotnet-ef`).
## Célkitűzések

- Objektív, valós tudáson alapuló szűrés biztosítása a munkáltatók számára.
- A jelentkezési és kiválasztási folyamat hatékonyságának növelése.
- Átlátható felület biztosítása a pályázóknak a képességeik bizonyítására és az ideális pozíciók megtalálására.

## Technológiai Stack és Fejlesztési Környezet

- **Backend:** C# .NET 9
- **Frontend:** Angular 21
- **Adatbázis:** MSSQL

### Adatbázis indítása és futtatás

A backend elindításához és az adatbázis migrációk futtatásához nyiss egy terminált a szerver oldali gyökérmappában:

### 1. Adatbázis szerver indítása
Nyiss egy terminált a projekt gyökerében (ahol a `docker-compose.yml` van), és futtasd ezt:
```bash
docker compose up -d
dotnet tool install --global dotnet-ef
dotnet ef database update
dotnet run
```

A frontend indítása a kliens mappában:

```bash
npm install
ng serve
```

## Szerepkörök és Felhasználók

- **Munkáltató (B2B):** Álláshirdetések és az azokhoz tartozó tesztek létrehozása, jelentkezők kezelése és eredményeik kiértékelése.
- **Pályázó (B2C):** Profil menedzselése, állások böngészése, mentése, tesztek kitöltése és jelentkezés a kiválasztott pozíciókra.
- **Rendszer adminisztrátor (Admin):** A platform globális felügyelete.

## Csapat és Felelősségek

- **[@BenjaminKovacs09](https://github.com/BenjaminKovacs09)** – Project Manager
- **[@Marci260](https://github.com/Marci260)** – Architect
- **[@zadoriaron](https://github.com/zadoriaron)** – Fullstack fejlesztő
- **[@KelemenOzseb](https://github.com/KelemenOzseb)** – Fullstack fejlesztő
- **[@oli-tolnai](https://github.com/oli-tolnai)** – Fullstack fejlesztő
- **[@AdamRevesz](https://github.com/AdamRevesz)** – Fullstack fejlesztő

## Tervezett funkciók

### 1. Publikus felületek

- Értékajánlat kommunikálása (gyorsabb, tesztalapú kiválasztás).
- Regisztráció és bejelentkezés különválasztott munkáltatói és pályázói folyamattal.

### 2. Munkáltatói funkciók

- **Munkáltatói Dashboard:** Az aktív és lezárt hirdetések kártyás áttekintése.
- **Álláshirdetések kezelése:**
- Új pozíciók létrehozása (cím, leírás, elvárások).
- Meglévő hirdetések módosítása vagy törlése.
- **Teszt- és kérdésbank:**
- Kérdések és komplett kompetenciatesztek összeállítása.
- Tesztek hozzárendelése konkrét álláshirdetésekhez.
- **Jelentkezések adminisztrációja:**
- Pályázók listázása egy adott pozícióra.
- A kitöltött teszteredmények megtekintése a jelentkezők profilja mellett.
- AI asszisztált kiértékelés: A kifejtős kérdésekre adott válaszokat a rendszer mesterséges intelligencia segítségével előzetesen kiértékeli, amelyet a munkáltató felülvizsgálhat és szükség esetén manuálisan felülírhat.

### 3. Pályázói funkciók

- **Profilkezelés:**
- Szakmai tapasztalatok, készségek és személyes adatok szerkesztése.
- Skillek hozzárendelése a profilhoz, vannak olyan skillek amelyeket teszt kitöltésével érhet el a felhasználó
- **Álláskeresés:**
- Elérhető pozíciók listázása és részleteik megtekintése.
- Állások kedvencekhez adása (könyvjelzőzés későbbi megtekintésre).
- **Jelentkezési folyamat:**
- Pályázás indítása a felületen keresztül.
- Kompetenciateszt kitöltése: Amennyiben a munkáltató tesztet rendelt az álláshoz, annak integrált kitöltése a jelentkezési folyamat részeként.
- Sikeres jelentkezés véglegesítése és visszajelzés a felhasználónak.
Original file line number Diff line number Diff line change
Expand Up @@ -71,5 +71,19 @@ public async Task<IActionResult> AssignAssessmentToJob(string assessmentId, stri
await _assessmentLogic.AssignAssessmentToJob(assessmentId, jobId);
return Ok(new { message = "Assessment assigned to job successfully." });
}

[HttpPost("assign-to-skill")]
public async Task AddAssesmentToSkill([FromBody] AddAssesmentsToSkillDto dto)
{
await _assessmentLogic.AddAssessmentToSkill(dto);
}

[HttpGet("GetAssesmentBySkill")]
public async Task<ICollection<AssessmentViewDto>> GetAssessmentBySkill(string skillId)
{
var assesment = await _assessmentLogic.GetAssessmentBySkill(skillId);

return assesment;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using Microsoft.AspNetCore.Mvc;
using SkillProof.Logic.Education;
using SkillProof.Entities.Dtos.Education;

namespace SkillProof.Api.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class EducationController : ControllerBase
{
private readonly IEducationLogic _educationLogic;
public EducationController(IEducationLogic educationLogic)
{
_educationLogic = educationLogic;
}

[HttpGet("{userId}")]
public async Task<IActionResult> GetEducationsByUserId(string userId)
{
var educations = await _educationLogic.GetEducationsByUserIdAsync(userId);
return Ok(educations);
}

[HttpPost("{userId}")]
public async Task<IActionResult> CreateEducation(string userId, [FromBody] EducationCreateDto entity)
{
try
{
var createdEducation = await _educationLogic.CreateEducationAsync(entity, userId);
return Created("", createdEducation);
}
catch (Exception ex) when (ex.Message == "User not found")
{
return NotFound(new { message = "The specified user ID does not exist in the database." });
}
catch (Exception ex)
{
return StatusCode(500, new
{
message = "An error occurred while saving to the database.",
details = ex.InnerException?.Message ?? ex.Message
});
}
}

[HttpDelete("{userId}/{id}")]
public async Task<IActionResult> DeleteEducation(string userId, string id)
{
await _educationLogic.DeleteEducationAsync(id, userId);
return NoContent();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using SkillProof.Logic.Experience;
using SkillProof.Entities.Dtos.Experience;
namespace SkillProof.Api.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ExperienceController : ControllerBase
{
private readonly IExperienceLogic _experienceLogic;

public ExperienceController(IExperienceLogic experienceLogic)
{
_experienceLogic = experienceLogic;
}

[HttpGet("{userId}")]
public async Task<IActionResult> GetExperiencesByUserId(string userId)
{
var experiences = await _experienceLogic.GetExperiencesByUserIdAsync(userId);
return Ok(experiences);
}

[HttpPost("{userId}")]
public async Task<IActionResult> CreateExperience(string userId, [FromBody] ExperienceCreateDto entity)
{
var createdExperience = await _experienceLogic.CreateExperienceAsync(entity, userId);
return CreatedAtAction(nameof(GetExperiencesByUserId), new { userId }, createdExperience);
}

[HttpDelete("{userId}/{id}")]
public async Task<IActionResult> DeleteExperience(string userId, string id)
{
await _experienceLogic.DeleteExperienceAsync(id, userId);
return NoContent();
}
}
}
45 changes: 45 additions & 0 deletions backend/SkillProof/SkillProof.Api/Controllers/GeminiController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using Microsoft.AspNetCore.Mvc;
using SkillProof.Entities.Dtos.Gemini;
using SkillProof.Entities.Models.Gemini;
using SkillProof.Logic.Gemini;

namespace SkillProof.Api.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class GradingController : ControllerBase
{
private readonly IGeminiService _gradingService;

public GradingController(IGeminiService gradingService)
{
_gradingService = gradingService;
}

[HttpPost("grade")]
public async Task<IActionResult> Grade([FromBody] GradingRequest request)
{
if (string.IsNullOrWhiteSpace(request.StudentAnswer))
return BadRequest("Student answer cannot be empty.");

var result = await _gradingService.EvaluateAnswerAsync(request);
return Ok(result);
}

[HttpPost("grade-multiple")]
public async Task<IActionResult> GradeMultiple([FromBody] List<GradingRequest> requests)
{
if (requests == null || !requests.Any())
return BadRequest("Request list cannot be empty.");
var results = new List<double>();
foreach (var request in requests)
{
if (string.IsNullOrWhiteSpace(request.StudentAnswer))
return BadRequest("Student answer cannot be empty.");
var score = await _gradingService.EvaluateAnswerAsync(request);
results.Add(score);
}
return Ok(results);
}
}
}
Loading
Loading