fix: check POST data for validity

feat: also introduces a template for search
This commit is contained in:
2025-05-18 15:35:50 +02:00
parent eb9fa8b9ca
commit d1117959cd
4 changed files with 62 additions and 0 deletions

View File

@@ -0,0 +1,16 @@
using System.ComponentModel.DataAnnotations;
using WebApp.Entities;
namespace WebApp.DTOs;
// Output values in JSON file
public record class EventSearchDto
(
int? OrganisationId,
string? Title,
string? Description,
string? Location,
DateTime? EventDate,
ICollection<EventSkill>? EventSkills, // obecnie nie dotyczy
ICollection<EventRegistration>? EventRegistrations // obecnie nie dotyczy
);

View File

@@ -7,6 +7,7 @@ namespace WebApp.DTOs;
public record class EventSummaryDto(
int EventId,
[Required] string Organisation,
[Required] int OrganisationId,
[Required] [StringLength(50)] string Title,
[StringLength(500)] string Description,
[Required] [StringLength(100)] string Location,

View File

@@ -63,6 +63,10 @@ namespace WebApp.Endpoints
// Wyzeruj EventRegistrations, ponieważ nie są to dane,
// które powinniśmy przyjmować bez zgody wolontariuszy!
Eve.EventRegistrations = [];
Eve.OrganisationId = org.OrganisationId;
// Na wszelki wypadek, gdyby użytkownik wciskał nam kit :D
if (newEvent.OrganisationId is not null && newEvent.OrganisationId != org.OrganisationId) return Results.StatusCode(418);
dbContext.Events.Add(Eve);
await dbContext.SaveChangesAsync();
@@ -135,6 +139,46 @@ namespace WebApp.Endpoints
return Results.NoContent();
});
// POST /events/search
group.MapPost("/search/",
async (EventSearchDto query, ApplicationDbContext dbContext, HttpContext httpContext, GeneralUseHelpers guhf) =>
{
// Uzyskaj organizację z tokenu
Token? token = await guhf.GetTokenFromHTTPContext(httpContext);
Organisation? org = await guhf.GetOrganisationFromToken(token);
List<EventSummaryDto> SearchResults = [];
List<Event> AllEvents = await dbContext.Events.ToListAsync();
foreach(Event e in AllEvents)
{
// Logika wyszukiwania
// Sprawdź wszystkie pola z EventSearchDto, np.
if (query.OrganisationId is not null)
{
// Sprawdź, czy Event należy do query.OrganisationId.
}
// ...
// Jeśli Event jest tym, czego szuka użytkownik,
// dodaj go do listy SearchResults.
//
// Uwaga! Zanim to zrobisz, sprawdź, czy użytkownik
// jest twórcą danego wydarzenia! Jeżeli nim nie jest,
// wyzeruj EventRegistrations!
if (org is null || e.Organisation != org)
{
e.EventRegistrations.Clear();
}
SearchResults.Add(e.ToEventSummaryDto());
}
return Results.Ok(SearchResults);
});
return group;
}
}

View File

@@ -39,6 +39,7 @@ public static class EventMapping
return new EventSummaryDto(
myEvent.EventId,
myEvent.Organisation!.Name,
myEvent.OrganisationId,
myEvent.Title,
myEvent.Description,
myEvent.Location,