feat: licence state filter membreList

This commit is contained in:
2025-08-12 18:56:04 +02:00
parent 41a88ea914
commit 1cd4a1ff97
5 changed files with 107 additions and 42 deletions

View File

@@ -30,7 +30,7 @@ public class LicenceModel {
@Schema(description = "La saison de la licence.", example = "2025")
int saison;
@Schema(description = "Nom du médecin sur certificat médical.", example = "M. Jean")
@Schema(description = "Nom du médecin sur certificat médical.", example = "M. Jean") // TODO Update for date
String certificate;
@Schema(description = "Licence validée", example = "true")

View File

@@ -78,46 +78,93 @@ public class MembreService {
final static String FIND_NAME_REQUEST = "unaccent(fname) ILIKE unaccent(?1) OR unaccent(lname) ILIKE unaccent(?1) " +
"OR unaccent(fname || ' ' || lname) ILIKE unaccent(?1) OR unaccent(lname || ' ' || fname) ILIKE unaccent(?1)";
public Uni<PageResult<SimpleMembre>> searchAdmin(int limit, int page, String search, String club) {
if (search == null)
search = "";
search = "%" + search.replaceAll(" ", "% %") + "%";
PanacheQuery<MembreModel> query;
if (club == null || club.isBlank()) {
query = repository.find(FIND_NAME_REQUEST, Sort.ascending("fname", "lname"), search)
.page(Page.ofSize(limit));
} else {
if (club.equals("null")) {
query = repository.find(
"club IS NULL AND (" + FIND_NAME_REQUEST + ")",
Sort.ascending("fname", "lname"), search).page(Page.ofSize(limit));
} else {
query = repository.find(
"LOWER(club.name) LIKE LOWER(?2) AND (" + FIND_NAME_REQUEST + ")",
Sort.ascending("fname", "lname"), search, club + "%").page(Page.ofSize(limit));
}
}
return getPageResult(query, limit, page);
}
public Uni<PageResult<SimpleMembre>> search(int limit, int page, String search, String subject) {
public Uni<PageResult<SimpleMembre>> searchAdmin(int limit, int page, String search, String club, int licenceRequest) {
if (search == null)
search = "";
search = "%" + search.replaceAll(" ", "% %") + "%";
String finalSearch = search;
return repository.find("userId = ?1", subject).firstResult()
.chain(membreModel -> {
PanacheQuery<MembreModel> query = repository.find(
"club = ?2 AND (" + FIND_NAME_REQUEST + ")",
Sort.ascending("fname", "lname"), finalSearch, membreModel.getClub())
.page(Page.ofSize(limit));
Uni<List<LicenceModel>> baseUni;
if (licenceRequest == 0 || licenceRequest == 1)
baseUni = licenceRepository.list("saison = ?1", Utils.getSaison());
else if (licenceRequest == 2)
baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE", Utils.getSaison());
else if (licenceRequest == 5)
baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) >= 3", Utils.getSaison());
else if (licenceRequest == 6)
baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) <= 2", Utils.getSaison());
else if (licenceRequest == 3)
baseUni = licenceRepository.list("saison = ?1 AND validate = TRUE", Utils.getSaison());
else
baseUni = Uni.createFrom().item(new ArrayList<>());
return baseUni
.map(l -> l.stream().map(l2 -> l2.getMembre().getId()).toList())
.chain(ids -> {
PanacheQuery<MembreModel> query;
String idf = ((licenceRequest == 0 || licenceRequest == 4) ? "NOT IN" : "IN");
if (club == null || club.isBlank()) {
LOGGER.info(ids);
query = repository.find(
"id " + idf + " ?2 AND (" + FIND_NAME_REQUEST + ")",
Sort.ascending("fname", "lname"), finalSearch, ids)
.page(Page.ofSize(limit));
} else {
if (club.equals("null")) {
query = repository.find(
"id " + idf + " ?2 AND club IS NULL AND (" + FIND_NAME_REQUEST + ")",
Sort.ascending("fname", "lname"), finalSearch, ids).page(Page.ofSize(limit));
} else {
query = repository.find(
"id " + idf + " ?3 AND LOWER(club.name) LIKE LOWER(?2) AND (" + FIND_NAME_REQUEST + ")",
Sort.ascending("fname", "lname"), finalSearch, club + "%", ids)
.page(Page.ofSize(limit));
}
}
return getPageResult(query, limit, page);
});
}
public Uni<PageResult<SimpleMembre>> search(int limit, int page, String search, int licenceRequest, String subject) {
if (search == null)
search = "";
search = "%" + search.replaceAll(" ", "% %") + "%";
String finalSearch = search;
Uni<List<LicenceModel>> baseUni;
if (licenceRequest == 0 || licenceRequest == 1)
baseUni = licenceRepository.list("saison = ?1", Utils.getSaison());
else if (licenceRequest == 2)
baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE", Utils.getSaison());
else if (licenceRequest == 5)
baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) >= 3", Utils.getSaison());
else if (licenceRequest == 6)
baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) <= 2", Utils.getSaison());
else if (licenceRequest == 3)
baseUni = licenceRepository.list("saison = ?1 AND validate = TRUE", Utils.getSaison());
else
baseUni = Uni.createFrom().item(new ArrayList<>());
return baseUni
.map(l -> l.stream().map(l2 -> l2.getMembre().getId()).toList())
.chain(ids -> {
String idf = ((licenceRequest == 0 || licenceRequest == 4) ? "NOT IN" : "IN");
return repository.find("userId = ?1", subject).firstResult()
.chain(membreModel -> {
PanacheQuery<MembreModel> query = repository.find(
"id " + idf + " ?3 AND club = ?2 AND (" + FIND_NAME_REQUEST + ")",
Sort.ascending("fname", "lname"), finalSearch, membreModel.getClub(), ids)
.page(Page.ofSize(limit));
return getPageResult(query, limit, page);
});
});
}
private Uni<PageResult<SimpleMembre>> getPageResult(PanacheQuery<MembreModel> query, int limit, int page) {
return Uni.createFrom().item(new PageResult<SimpleMembre>())
.invoke(result -> result.setPage(page))

View File

@@ -57,12 +57,13 @@ public class MembreAdminEndpoints {
@Parameter(description = "Nombre max de résulta (max 50)") @QueryParam("limit") Integer limit,
@Parameter(description = "Page à consulter") @QueryParam("page") Integer page,
@Parameter(description = "Text à rechercher") @QueryParam("search") String search,
@Parameter(description = "Club à filter") @QueryParam("club") String club) {
@Parameter(description = "Club à filter") @QueryParam("club") String club,
@Parameter(description = "Etat de la demande de licence: 0 -> sans demande, 1 -> avec demande ou validée, 2 -> toute les demande non validée, 3 -> validée, 4 -> tout, 5 -> demande complete, 6 -> demande incomplete") @QueryParam("licenceRequest") int licenceRequest) {
if (limit == null)
limit = 50;
if (page == null || page < 1)
page = 1;
return membreService.searchAdmin(limit, page - 1, search, club);
return membreService.searchAdmin(limit, page - 1, search, club, licenceRequest);
}
@GET

View File

@@ -49,12 +49,13 @@ public class MembreClubEndpoints {
public Uni<PageResult<SimpleMembre>> getFindClub(
@Parameter(description = "Nombre max de résulta (max 50)") @QueryParam("limit") Integer limit,
@Parameter(description = "Page à consulter") @QueryParam("page") Integer page,
@Parameter(description = "Text à rechercher") @QueryParam("search") String search) {
@Parameter(description = "Text à rechercher") @QueryParam("search") String search,
@Parameter(description = "Etat de la demande de licence: 0 -> sans demande, 1 -> avec demande ou validée, 2 -> toute les demande non validée, 3 -> validée, 4 -> tout, 5 -> demande complete, 6 -> demande incomplete") @QueryParam("licenceRequest") int licenceRequest) {
if (limit == null)
limit = 50;
if (page == null || page < 1)
page = 1;
return membreService.search(limit, page - 1, search, securityCtx.getSubject());
return membreService.search(limit, page - 1, search, licenceRequest, securityCtx.getSubject());
}
@GET