feat: swagger

This commit is contained in:
Thibaut Valentin 2024-07-20 09:12:50 +02:00
parent b3bfb7e267
commit cc00da4e5e
17 changed files with 151 additions and 4 deletions

View File

@ -3,6 +3,7 @@ package fr.titionfire.ffsaf.data.model;
import io.quarkus.runtime.annotations.RegisterForReflection;
import jakarta.persistence.*;
import lombok.*;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@Getter
@Setter
@ -16,15 +17,20 @@ import lombok.*;
public class LicenceModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Schema(description = "L'identifiant de la licence.")
Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "membre", referencedColumnName = "id")
@Schema(description = "Le membre de la licence. (optionnel)")
MembreModel membre;
@Schema(description = "La saison de la licence.", example = "2025")
int saison;
@Schema(description = "Nom du médecin sur certificat médical.", example = "M. Jean")
String certificate;
@Schema(description = "Licence validée", example = "true")
boolean validate;
}

View File

@ -7,6 +7,7 @@ import fr.titionfire.ffsaf.utils.RoleAsso;
import io.quarkus.runtime.annotations.RegisterForReflection;
import jakarta.persistence.*;
import lombok.*;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import java.util.Date;
import java.util.List;
@ -24,35 +25,50 @@ public class MembreModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Schema(description = "L'identifiant du membre.", example = "1")
Long id;
@Schema(description = "L'identifiant long du membre (userID).", example = "e81d1d35-d897-421e-8086-6c5e74d13c6e")
String userId;
@Schema(description = "Le nom du membre.", example = "Dupont")
String lname;
@Schema(description = "Le prénom du membre.", example = "Jean")
String fname;
@Schema(description = "La catégorie du membre.", example = "SENIOR")
Categorie categorie;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "club", referencedColumnName = "id")
@Schema(description = "Le club du membre.")
ClubModel club;
@Schema(description = "Le genre du membre.", example = "H")
Genre genre;
@Schema(description = "Le numéro de licence du membre.", example = "12345")
int licence;
@Schema(description = "Le pays du membre.", example = "FR")
String country;
@Schema(description = "La date de naissance du membre.")
Date birth_date;
@Schema(description = "L'adresse e-mail du membre.", example = "jean.dupont@example.com")
String email;
@Schema(description = "Le rôle du membre dans l'association.", example = "MEMBRE")
RoleAsso role;
@Schema(description = "Le grade d'arbitrage du membre.", example = "NA")
GradeArbitrage grade_arbitrage;
@Schema(hidden = true)
String url_photo;
@OneToMany(mappedBy = "membre", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@Schema(description = "Les licences du membre. (optionnel)")
List<LicenceModel> licences;
}

View File

@ -8,12 +8,14 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@RegisterForReflection
@Schema(hidden = true)
public class SimpleCombModel {
Long id;
String lname = "";

View File

@ -5,6 +5,7 @@ import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import java.util.Date;
import java.util.List;
@ -14,18 +15,31 @@ import java.util.List;
@NoArgsConstructor
@RegisterForReflection
public class MeData {
@Schema(description = "L'identifiant du membre.", example = "1")
private long id;
@Schema(description = "Le nom du membre.", example = "Dupont")
private String lname = "";
@Schema(description = "Le prénom du membre.", example = "Jean")
private String fname = "";
@Schema(description = "La catégorie du membre.", example = "SENIOR")
private String categorie;
@Schema(description = "Le nom du club du membre.", example = "Association sportive")
private String club;
@Schema(description = "Le genre du membre.", example = "Homme")
private String genre;
@Schema(description = "Le numéro de licence du membre.", example = "12345")
private int licence;
@Schema(description = "Le pays du membre.", example = "FR")
private String country;
@Schema(description = "La date de naissance du membre.")
private Date birth_date;
@Schema(description = "L'adresse e-mail du membre.", example = "jean.dupont@example.com")
private String email;
@Schema(description = "Le rôle du membre dans l'association.", example = "MEMBRE")
private String role;
@Schema(description = "Le grade d'arbitrage du membre.", example = "N/A")
private String grade_arbitrage;
@Schema(description = "La liste des licences du membre.")
private List<SimpleLicence> licences;
public void setMembre(MembreModel membreModel) {

View File

@ -5,16 +5,21 @@ import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@Data
@Builder
@AllArgsConstructor
@RegisterForReflection
public class SimpleAffiliation {
Long id;
Long club;
int saison;
boolean validate;
@Schema(description = "L'identifiant de l'affiliation.", example = "1")
private Long id;
@Schema(description = "L'identifiant du club associé à l'affiliation.", example = "123")
private Long club;
@Schema(description = "La saison de l'affiliation.", example = "2022")
private int saison;
@Schema(description = "Indique si l'affiliation est validée ou non.", example = "true")
private boolean validate;
public static SimpleAffiliation fromModel(AffiliationModel model) {
if (model == null)

View File

@ -7,6 +7,7 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.ToString;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import java.util.HashMap;
import java.util.Map;
@ -17,19 +18,33 @@ import java.util.Map;
@AllArgsConstructor
@RegisterForReflection
public class SimpleClub {
@Schema(description = "L'identifiant unique du club.", example = "1")
private Long id;
@Schema(description = "Identifiant long du club (UUID)", example = "b94f3167-3f6a-449c-a73b-ec84202bf07e")
private String clubId;
@Schema(description = "Le nom du club.", example = "Association sportive")
private String name;
@Schema(description = "Le pays du club.", example = "FR")
private String country;
@Schema(description = "Les contacts du club", example = "{\"SITE\": \"www.test.com\", \"COURRIEL\": \"test@test.com\"}")
private Map<Contact, String> contact;
@Schema(description = "Liste des lieux d'entraînement", example = "[{\"text\":\"addr 1\",\"lng\":2.24654,\"lat\":52.4868658},{\"text\":\"addr 2\",\"lng\":2.88654,\"lat\":52.7865456}]")
private String training_location;
@Schema(description = "Liste des jours et horaires d'entraînement (jours 0-6, 0=>lundi) (temps en minute depuis 00:00, 122=>2h02)", example = "[{\"day\":0,\"time_start\":164,\"time_end\":240},{\"day\":3,\"time_start\":124,\"time_end\":250}]")
private String training_day_time;
@Schema(description = "Contact interne du club", example = "john.doe@test.com")
private String contact_intern;
@Schema(description = "Adresse postale du club", example = "1 rue de l'exemple, 75000 Paris")
private String address;
@Schema(description = "RNA du club", example = "W123456789")
private String RNA;
@Schema(description = "Numéro SIRET du club", example = "12345678901234")
private Long SIRET;
@Schema(description = "Numéro d'affiliation du club", example = "12345")
private Long no_affiliation;
@Schema(description = "Club international", example = "false")
private boolean international;
@Schema(description = "Une map contenant les contacts possible pout un club.")
private HashMap<String, String> contactMap = null;
public static SimpleClub fromModel(ClubModel model) {

View File

@ -6,6 +6,7 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@Getter
@Setter
@ -13,10 +14,15 @@ import lombok.Setter;
@NoArgsConstructor
@RegisterForReflection
public class SimpleClubList {
@Schema(description = "Identifiant du club", example = "1")
Long id;
@Schema(description = "Nom du club", example = "Club de test")
String name;
@Schema(description = "Pays du club", example = "FR")
String country;
@Schema(description = "Numéro SIRET du club", example = "12345678901234")
Long siret;
@Schema(description = "Numéro d'affiliation du club", example = "12345")
Long no_affiliation;
public static SimpleClubList fromModel(ClubModel model) {

View File

@ -5,16 +5,22 @@ import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@Data
@Builder
@AllArgsConstructor
@RegisterForReflection
public class SimpleLicence {
@Schema(description = "ID de la licence", example = "1")
Long id;
@Schema(description = "ID du membre", example = "1")
Long membre;
@Schema(description = "Saison de la licence", example = "2024")
int saison;
@Schema(description = "Nom du médecin sur certificat médical.", example = "M. Jean")
String certificate;
@Schema(description = "Validation de la licence", example = "true")
boolean validate;
public static SimpleLicence fromModel(LicenceModel model) {

View File

@ -10,6 +10,7 @@ import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import java.util.Date;
@ -18,19 +19,33 @@ import java.util.Date;
@AllArgsConstructor
@RegisterForReflection
public class SimpleMembre {
@Schema(description = "L'identifiant du membre.", example = "1")
private long id;
@Schema(description = "L'identifiant long du membre (userID).", example = "e81d1d35-d897-421e-8086-6c5e74d13c6e")
private String userId;
@Schema(description = "Le nom du membre.", example = "Dupont")
private String lname = "";
@Schema(description = "Le prénom du membre.", example = "Jean")
private String fname = "";
@Schema(description = "La catégorie du membre.", example = "SENIOR")
private Categorie categorie;
@Schema(description = "Le club du membre.")
private SimpleClubModel club;
@Schema(description = "Le genre du membre.", example = "H")
private Genre genre;
@Schema(description = "Le numéro de licence du membre.", example = "12345")
private int licence;
@Schema(description = "Le pays du membre.", example = "FR")
private String country;
@Schema(description = "La date de naissance du membre.")
private Date birth_date;
@Schema(description = "L'adresse e-mail du membre.", example = "jean.dupont@example.com")
private String email;
@Schema(description = "Le rôle du membre dans l'association.", example = "MEMBRE")
private RoleAsso role;
@Schema(description = "Le grade d'arbitrage du membre.", example = "N/A")
private GradeArbitrage grade_arbitrage;
@Schema(hidden = true)
private String url_photo;
public static SimpleMembre fromModel(MembreModel model) {

View File

@ -15,15 +15,25 @@ import java.util.List;
@AllArgsConstructor
@RegisterForReflection
public class SimpleReqAffiliation {
@Schema(description = "Identifiant de la demande d'affiliation", example = "1")
Long id;
@Schema(description = "Identifiant du club", example = "1")
Long club;
@Schema(description = "Nom du club si club similar trouver (même siret)", example = "Association sportive")
String club_name;
@Schema(description = "Identifiant du club affilié", example = "1")
Long club_no_aff;
@Schema(description = "Nom du club demander", example = "Association sportive")
String name;
@Schema(description = "Numéro SIRET de l'association", example = "12345678901234")
long siret;
@Schema(description = "Numéro RNA de l'association", example = "W123456789")
String RNA;
@Schema(description = "Adresse de l'association", example = "1 rue de l'exemple, 75000 Paris")
String address;
@Schema(description = "Liste des membres pour la demande d'affiliation")
List<AffiliationMember> members;
@Schema(description = "Saison de l'affiliation", example = "2025")
int saison;
public static SimpleReqAffiliation fromModel(AffiliationRequestModel model) {

View File

@ -5,15 +5,20 @@ import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@Data
@Builder
@AllArgsConstructor
@RegisterForReflection
public class SimpleReqAffiliationResume {
@Schema(description = "L'identifiant de la demande d'affiliation.", example = "1")
Long id;
@Schema(description = "Le nom de l'association.", example = "Association sportive")
String name;
@Schema(description = "Le numéro SIRET de l'association.", example = "12345678901234")
long siret;
@Schema(description = "La saison de l'affiliation.", example = "2025")
int saison;
public static SimpleReqAffiliationResume fromModel(AffiliationRequestModel model) {

View File

@ -5,6 +5,7 @@ import io.quarkus.security.identity.SecurityIdentity;
import lombok.Builder;
import lombok.Data;
import org.eclipse.microprofile.jwt.JsonWebToken;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import java.util.ArrayList;
import java.util.List;
@ -14,14 +15,23 @@ import java.util.Set;
@Builder
@RegisterForReflection
public class UserInfo {
@Schema(description = "L'identifiant de l'utilisateur.", example = "1234567890")
String id;
@Schema(description = "Le nom complet de l'utilisateur.", example = "John Doe")
String name;
@Schema(description = "Le prénom de l'utilisateur.", example = "John")
String givenName;
@Schema(description = "Le nom de famille de l'utilisateur.", example = "Doe")
String familyName;
@Schema(description = "L'adresse e-mail de l'utilisateur.", example = "jihn.doe@test.fr")
String email;
@Schema(description = "L'adresse e-mail de l'utilisateur a été vérifiée.", example = "true")
boolean emailVerified;
@Schema(description = "La date d'expiration du token d'accès.")
long expiration;
@Schema(description = "La liste des groupes de l'utilisateur.")
List<String> groups;
@Schema(description = "La liste des rôles de l'utilisateur.")
Set<String> roles;
public static UserInfo makeUserInfo(JsonWebToken accessToken, SecurityIdentity securityIdentity) {

View File

@ -7,48 +7,62 @@ import fr.titionfire.ffsaf.utils.RoleAsso;
import jakarta.ws.rs.FormParam;
import jakarta.ws.rs.core.MediaType;
import lombok.Getter;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import org.jboss.resteasy.reactive.PartType;
import java.util.Date;
@Getter
public class FullMemberForm {
@Schema(description = "L'identifiant du membre.", example = "1")
@FormParam("id")
private String id = null;
@Schema(description = "Le nom du membre.", example = "Dupont")
@FormParam("lname")
private String lname = null;
@Schema(description = "Le prénom du membre.", example = "Jean")
@FormParam("fname")
private String fname = null;
@Schema(description = "La catégorie du membre.", example = "SENIOR")
@FormParam("categorie")
private Categorie categorie = null;
@Schema(description = "L'identifiant du club du membre.", example = "1")
@FormParam("club")
private Long club = null;
@Schema(description = "Le genre du membre.", example = "H")
@FormParam("genre")
private Genre genre;
@Schema(description = "Le numéro de licence du membre.", example = "12345")
@FormParam("licence")
private int licence;
@Schema(description = "Le pays du membre.", example = "FR")
@FormParam("country")
private String country;
@Schema(description = "La date de naissance du membre.")
@FormParam("birth_date")
private Date birth_date = null;
@Schema(description = "L'adresse e-mail du membre.", example = "jean.dupont@example.com")
@FormParam("email")
private String email;
@Schema(description = "Le rôle du membre dans l'association.", example = "MEMBRE")
@FormParam("role")
private RoleAsso role;
@Schema(description = "Le grade d'arbitrage du membre.", example = "ASSESSEUR")
@FormParam("grade_arbitrage")
private GradeArbitrage grade_arbitrage;
@Schema(description = "La photo du membre.")
@FormParam("photo_data")
@PartType(MediaType.APPLICATION_OCTET_STREAM)
private byte[] photo_data = new byte[0];

View File

@ -3,22 +3,28 @@ package fr.titionfire.ffsaf.rest.from;
import jakarta.ws.rs.FormParam;
import lombok.Getter;
import lombok.ToString;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@Getter
@ToString
public class LicenceForm {
@FormParam("id")
@Schema(description = "L'identifiant de la licence. (-1 si nouvelle demande de licence)", required = true)
private long id;
@FormParam("membre")
@Schema(description = "L'identifiant du membre.", example = "1", required = true)
private long membre;
@FormParam("saison")
@Schema(description = "La saison de la licence.", example = "2025", required = true)
private int saison;
@FormParam("certificate")
@Schema(description = "Nom du médecin sur certificat médical.", example = "M. Jean", required = true)
private String certificate = null;
@FormParam("validate")
@Schema(description = "Licence validée (seuls les admin pourrons enregistrer cette valeur)", example = "true", required = true)
private boolean validate;
}

View File

@ -3,19 +3,24 @@ package fr.titionfire.ffsaf.rest.from;
import jakarta.ws.rs.FormParam;
import lombok.Getter;
import lombok.ToString;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@Getter
@ToString
public class MemberPermForm {
@Schema(description = "Indique si le membre est un administrateur de la fédération.", example = "false", required = true)
@FormParam("federation_admin")
private boolean federation_admin;
@Schema(description = "Indique si le membre est un utilisateur SAFCA.", example = "false", required = true)
@FormParam("safca_user")
private boolean safca_user;
@Schema(description = "Indique si le membre peut créer des compétitions sur SAFCA.", example = "false", required = true)
@FormParam("safca_create_compet")
private boolean safca_create_compet;
@Schema(description = "Indique si le membre est un super administrateur SAFCA.", example = "false", required = true)
@FormParam("safca_super_admin")
private boolean safca_super_admin;
}

View File

@ -3,25 +3,32 @@ package fr.titionfire.ffsaf.rest.from;
import jakarta.ws.rs.FormParam;
import lombok.Getter;
import lombok.ToString;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
@ToString
@Getter
public class PartClubForm {
@FormParam("id")
@Schema(description = "Identifiant du club", example = "1", required = true)
private String id = null;
@FormParam("contact")
@Schema(description = "Les contacts du club", example = "{\"SITE\": \"www.test.com\", \"COURRIEL\": \"test@test.com\"}", required = true)
private String contact = null;
@FormParam("training_location")
@Schema(description = "Liste des lieux d'entraînement", example = "[{\"text\":\"addr 1\",\"lng\":2.24654,\"lat\":52.4868658},{\"text\":\"addr 2\",\"lng\":2.88654,\"lat\":52.7865456}]", required = true)
private String training_location = null;
@FormParam("training_day_time")
@Schema(description = "Liste des jours et horaires d'entraînement (jours 0-6, 0=>lundi) (temps en minute depuis 00:00, 122=>2h02)", example = "[{\"day\":0,\"time_start\":164,\"time_end\":240},{\"day\":3,\"time_start\":124,\"time_end\":250}]", required = true)
private String training_day_time = null;
@FormParam("contact_intern")
@Schema(description = "Contact interne du club", example = "john.doe@test.com")
private String contact_intern = null;
@FormParam("address")
@Schema(description = "Adresse postale du club", example = "1 rue de l'exemple, 75000 Paris", required = true)
private String address = null;
}

View File

@ -2,6 +2,7 @@ package fr.titionfire.ffsaf.utils;
import io.quarkus.runtime.annotations.RegisterForReflection;
import lombok.Data;
import org.eclipse.microprofile.openapi.annotations.media.Schema;
import java.util.ArrayList;
import java.util.List;
@ -9,9 +10,13 @@ import java.util.List;
@Data
@RegisterForReflection
public class PageResult<T> {
@Schema(description = "Le numéro de la page courante.", example = "1")
private int page;
@Schema(description = "Le nombre d'éléments par page.", example = "10")
private int page_size;
@Schema(description = "Le nombre total de pages.", example = "5")
private int page_count;
@Schema(description = "Le nombre total d'éléments.", example = "47")
private long result_count;
private List<T> result = new ArrayList<>();
}