Added "add/delete/get skill"

This commit is contained in:
Pc
2025-05-31 19:31:07 +02:00
parent 239b588175
commit 9306c90ad6

View File

@@ -1,8 +1,9 @@
using Microsoft.AspNetCore.Http.HttpResults; using System.Runtime.Intrinsics.Arm;
using Microsoft.EntityFrameworkCore;
using System.Runtime.Intrinsics.Arm;
using System.Security.Cryptography; using System.Security.Cryptography;
using System.Text; using System.Text;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.EntityFrameworkCore;
using WebApp.Data; using WebApp.Data;
using WebApp.DTOs; using WebApp.DTOs;
using WebApp.Entities; using WebApp.Entities;
@@ -160,6 +161,73 @@ namespace WebApp.Endpoints
return Results.Json(new { message = "Skill added successfully!" }, statusCode: 201); return Results.Json(new { message = "Skill added successfully!" }, statusCode: 201);
}); });
group.MapDelete("/delete_skill", async (SingleSkillDto dto, HttpContext httpContext, ApplicationDbContext context, GeneralUseHelpers guh) =>
{
// Uzyskaj użytkownika z tokenu
Token? token = await guh.GetTokenFromHTTPContext(httpContext);
User? user = await guh.GetUserFromToken(token);
// Tylko wolontariusze powinien móc usuwac swoje skille
if (user == null || user.IsOrganisation)
{
return Results.Json(new { message = "Unauthorized" }, statusCode: 401);
}
// Szukamy skilla w bazie o ID takim, jak w otrzymanym DTO
Skill? skill = await context.Skills.FindAsync(dto.Skill);
if (skill is null)
{
return Results.Json(new { message = "Skill not found" }, statusCode: 404);
}
// Sprawdzamy, czy ten użytkownik ma już taki skill. Jeżeli nie ma, nie ma sensu usuwac go kilkukrotnie.
VolunteerSkill? vs = await context.VolunteerSkills.FirstOrDefaultAsync(v => v.UserId == user.UserId && v.SkillId == dto.Skill);
if (vs is not null)
{
// Nie ma - zatem musimy dodać nowy VolunteerSkill do bazy
VolunteerSkill newVs = dto.ToVolunteerSkillEntity(user.UserId);
await context.VolunteerSkills.Where(v => v.SkillId == dto.Skill)
.ExecuteDeleteAsync();
}
else
{
// Ma - (ta para UserId <-> SkillId już istnieje w bazie) użytkownik już ma ten skill
return Results.Json(new { message = "User already has deleted this skill" }, statusCode: 400);
}
return Results.Json(new { message = "Skill deleted successfully!" }, statusCode: 201);
});
group.MapGet("/get_skills", async (SingleSkillDto dto, HttpContext httpContext, ApplicationDbContext context, GeneralUseHelpers guh) =>
{
// Uzyskaj użytkownika z tokenu
Token? token = await guh.GetTokenFromHTTPContext(httpContext);
User? user = await guh.GetUserFromToken(token);
// Sprawdź, czy użytkownik istnieje i nie jest organizacją
if (user == null || user.IsOrganisation)
{
return Results.Json(new { message = "Unauthorized" }, statusCode: 401);
}
// Pobierz skille wolontariusza
var skills = await context.VolunteerSkills
.Where(vs => vs.UserId == user.UserId)
.Include(vs => vs.Skill)
.Select(vs => new
{
skillId = vs.Skill.SkillId,
skillName = vs.Skill.Name
})
.ToListAsync();
return Results.Json(skills);
});
return group; return group;
} }