mirror of
https://github.com/GCMatters/hermes.git
synced 2026-02-04 05:30:13 +01:00
feat: enable adding relevant skills to events
This commit is contained in:
@@ -133,7 +133,7 @@ namespace WebApp.Endpoints
|
||||
Token? token = await guh.GetTokenFromHTTPContext(httpContext);
|
||||
User? user = await guh.GetUserFromToken(token);
|
||||
|
||||
// Tylko wolontariusze powinno móc dodawać swoje skille
|
||||
// Tylko wolontariusze powinni móc dodawać swoje skille
|
||||
if (user == null || user.IsOrganisation) {
|
||||
return Results.Json(new { message = "Unauthorized" }, statusCode: 401);
|
||||
}
|
||||
@@ -170,7 +170,7 @@ namespace WebApp.Endpoints
|
||||
Token? token = await guh.GetTokenFromHTTPContext(httpContext);
|
||||
User? user = await guh.GetUserFromToken(token);
|
||||
|
||||
// Tylko wolontariusze powinien móc usuwac swoje skille
|
||||
// Tylko wolontariusze powinni móc usuwać swoje skille
|
||||
if (user == null || user.IsOrganisation)
|
||||
{
|
||||
return Results.Json(new { message = "Unauthorized" }, statusCode: 401);
|
||||
@@ -183,13 +183,12 @@ namespace WebApp.Endpoints
|
||||
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.
|
||||
// Sprawdzamy, czy ten użytkownik ma już taki skill. Jeżeli nie ma, to nie ma sensu usuwać czegoś, czego nie ma.
|
||||
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
|
||||
// Ma - zatem musimy usunąć otrzymany VolunteerSkill z bazy
|
||||
VolunteerSkill newVs = dto.ToVolunteerSkillEntity(user.UserId);
|
||||
|
||||
|
||||
await context.VolunteerSkills.Where(v => v.SkillId == dto.Skill)
|
||||
.ExecuteDeleteAsync();
|
||||
@@ -197,7 +196,7 @@ namespace WebApp.Endpoints
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ma - (ta para UserId <-> SkillId już istnieje w bazie) użytkownik już ma ten skill
|
||||
// Nie ma - (ta para UserId <-> SkillId nie istnieje w bazie). Zwracamy błąd.
|
||||
return Results.Json(new { message = "You don't have this skill" }, statusCode: 400);
|
||||
}
|
||||
|
||||
|
||||
@@ -222,6 +222,91 @@ namespace WebApp.Endpoints
|
||||
return Results.Ok(SearchResults);
|
||||
});
|
||||
|
||||
// POST /events/1/add_skill
|
||||
group.MapPost("/{id}/add_skill/",
|
||||
async (int id, SingleSkillDto dto, ApplicationDbContext dbContext, HttpContext httpContext, GeneralUseHelpers guhf) =>
|
||||
{
|
||||
Event? Eve = await dbContext.Events.FindAsync(id);
|
||||
|
||||
if (Eve is null) return Results.Json(new { message = "Event not found" }, statusCode: 404);
|
||||
|
||||
// Sprawdź, czy token należy do organizacji, a jeżeli tak, to do której.
|
||||
Token? token = await guhf.GetTokenFromHTTPContext(httpContext);
|
||||
Organisation? org = await guhf.GetOrganisationFromToken(token);
|
||||
|
||||
// Jeśli token należy do organizacji, która utworzyła to wydarzenie,
|
||||
// to zwróć także EventRegistrations. W przeciwnym razie usuń to pole
|
||||
// przed jego wysłaniem!
|
||||
if (org is null || org.OrganisationId != Eve.OrganisationId) return Results.Unauthorized();
|
||||
|
||||
// Szukamy skilla w bazie o ID takim, jak w otrzymanym DTO
|
||||
Skill? skill = await dbContext.Skills.FindAsync(dto.Skill);
|
||||
if (skill is null)
|
||||
{
|
||||
return Results.Json(new { message = "Skill not found" }, statusCode: 404);
|
||||
}
|
||||
|
||||
// Sprawdzamy, czy to wydarzenie nie ma już takiego skilla. Jeżeli ma, nie ma sensu dodawać go kilkukrotnie.
|
||||
EventSkill? es = await dbContext.EventSkills.FirstOrDefaultAsync(e => e.EventId == id && e.SkillId == dto.Skill);
|
||||
if (es is null)
|
||||
{
|
||||
// Nie ma - zatem musimy dodać nowy EventSkill do bazy
|
||||
EventSkill newEs = dto.ToEventSkillEntity(Eve.EventId);
|
||||
dbContext.EventSkills.Add(newEs);
|
||||
await dbContext.SaveChangesAsync();
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ma - (ta para EventId <-> SkillId już istnieje w bazie); ten Event posiada już ten skill
|
||||
return Results.Json(new { message = "Skill already assinged to this event!" }, statusCode: 400);
|
||||
}
|
||||
|
||||
return Results.Json(new { message = "Skill added to event successfully!" }, statusCode: 201);
|
||||
|
||||
});
|
||||
|
||||
// POST /events/1/renive_skill
|
||||
group.MapPost("/{id}/remove_skill/",
|
||||
async (int id, SingleSkillDto dto, ApplicationDbContext dbContext, HttpContext httpContext, GeneralUseHelpers guhf) =>
|
||||
{
|
||||
Event? Eve = await dbContext.Events.FindAsync(id);
|
||||
|
||||
if (Eve is null) return Results.Json(new { message = "Event not found" }, statusCode: 404);
|
||||
|
||||
// Sprawdź, czy token należy do organizacji, a jeżeli tak, to do której.
|
||||
Token? token = await guhf.GetTokenFromHTTPContext(httpContext);
|
||||
Organisation? org = await guhf.GetOrganisationFromToken(token);
|
||||
|
||||
// Jeśli token należy do organizacji, która utworzyła to wydarzenie,
|
||||
// to zwróć także EventRegistrations. W przeciwnym razie usuń to pole
|
||||
// przed jego wysłaniem!
|
||||
if (org is null || org.OrganisationId != Eve.OrganisationId) return Results.Unauthorized();
|
||||
|
||||
// Szukamy skilla w bazie o ID takim, jak w otrzymanym DTO
|
||||
Skill? skill = await dbContext.Skills.FindAsync(dto.Skill);
|
||||
if (skill is null)
|
||||
{
|
||||
return Results.Json(new { message = "Skill not found" }, statusCode: 404);
|
||||
}
|
||||
|
||||
// Sprawdzamy, czy to wydarzenie nie ma już takiego skilla. Jeżeli nie ma, to nie ma sensu kasować czegoś, czego nie ma.
|
||||
EventSkill? es = await dbContext.EventSkills.FirstOrDefaultAsync(e => e.EventId == id && e.SkillId == dto.Skill);
|
||||
if (es is not null)
|
||||
{
|
||||
// Ma - zatem musimy usunąć ten EventSkill z bazy
|
||||
await dbContext.EventSkills.Where(e => e.SkillId == dto.Skill)
|
||||
.ExecuteDeleteAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Nie ma - (ta para EventId <-> SkillId nie istnieje w bazie); ten Event nie posiada tego skill'a
|
||||
return Results.Json(new { message = "This skill isn't assinged to this event!" }, statusCode: 400);
|
||||
}
|
||||
|
||||
return Results.Json(new { message = "Skill removed from event successfully!" }, statusCode: 201);
|
||||
});
|
||||
|
||||
return group;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user