Skip to content

Commit

Permalink
Update types (#58)
Browse files Browse the repository at this point in the history
* update prisma

* fix TS errors

* Fix API call for dossiers
  • Loading branch information
alexfauquette authored Oct 24, 2024
1 parent eea450a commit a69c4df
Show file tree
Hide file tree
Showing 15 changed files with 536 additions and 160 deletions.
4 changes: 2 additions & 2 deletions app/[legislature]/dossier/[id]/amendement/AmendementList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ export default function AmendementsList(props: {
!selectedDocument || texteLegislatifRefUid === selectedDocument
)
.sort((a, b) =>
Number.parseInt(a.numeroOrdreDepot ?? "0") <
Number.parseInt(b.numeroOrdreDepot ?? "0")
(a.numeroOrdreDepot ?? Number.POSITIVE_INFINITY) <
(b.numeroOrdreDepot ?? Number.POSITIVE_INFINITY)
? -1
: 1
);
Expand Down
4 changes: 2 additions & 2 deletions app/depute/[slug]/amendements/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,8 @@ export default async function Amendements({
{amendements &&
amendements
.sort((a, b) =>
Number.parseInt(a.numeroOrdreDepot || "") <
Number.parseInt(b.numeroOrdreDepot || "")
(a.numeroOrdreDepot ?? Number.POSITIVE_INFINITY) <
(b.numeroOrdreDepot ?? Number.POSITIVE_INFINITY)
? -1
: 1
)
Expand Down
8 changes: 4 additions & 4 deletions app/depute/[slug]/travaux/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ async function getDeputeActiviteUnCached(slug: string) {
// },
documents: true,
// initiateurActeLegislatif: true,
dossiers: { include: { dossierRef: true } },
dossiers: true,
// rapporteurs: true,
},
});
Expand Down Expand Up @@ -150,7 +150,7 @@ export default async function Amendements({
<ul>
{dossiers.map((dossier) => (
<li
key={dossier.id}
key={dossier.uid}
style={{
display: "flex",
width: "100%",
Expand All @@ -161,9 +161,9 @@ export default async function Amendements({
<Typography
variant="body2"
component={Link}
href={`/${dossier.dossierRef?.legislature}/dossier/${dossier.dossierRef?.uid}/`}
href={`/${dossier.legislature}/dossier/${dossier.uid}/`}
>
{dossier.dossierRef?.titre}
{dossier.titre}
</Typography>
{/* TODO: Ajouter le status du dossier legislatif ou la date de derniere modification */}
</li>
Expand Down
14 changes: 12 additions & 2 deletions components/folderHomePage/DossierList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,16 @@ async function getDossiersUnCached(legislature: string) {
}
const getDossiers = React.cache(getDossiersUnCached);

// The API return string for Dates
function formatDossier(dossier: Dossier): Dossier {
return {
...dossier,
dateDernierActe: dossier.dateDernierActe
? new Date(dossier.dateDernierActe)
: null,
dateDepot: dossier.dateDepot ? new Date(dossier.dateDepot) : null,
};
}
type DossierListProps = {
theme: string;
search: string;
Expand Down Expand Up @@ -46,7 +56,7 @@ export default function DossierList(props: DossierListProps) {
const { data } = await res.json();

setIsLoading(false);
setDossiers((prev) => [...prev, ...data]);
setDossiers((prev) => [...prev, ...data.map(formatDossier)]);
setCurrentPage((prev) => prev + 1);
};

Expand All @@ -70,7 +80,7 @@ export default function DossierList(props: DossierListProps) {
const { data } = await res.json();
if (isValid) {
setIsLoading(false);
setDossiers(data);
setDossiers(data.map(formatDossier));
setCurrentPage((prev) => prev + 1);
}
}
Expand Down
106 changes: 57 additions & 49 deletions prisma/models/acteur.prisma
Original file line number Diff line number Diff line change
@@ -1,72 +1,79 @@
/// Personne physique ayant été élue ou nommée dans un organe.
model Acteur {
/// Identifiant unique.
uid String @id
uid String @id
/// Jeu de données de provenance (numéro de législature)
dataset Int
dataset Int
/// Prénom.
prenom String
prenom String
/// Nom.
nom String
nom String
/// Civilité.
civ String
civ String
/// Date de naissance.
dateNais DateTime?
dateNais DateTime?
/// Date de décès.
dateDeces DateTime?
dateDeces DateTime?
/// Ville de naissance.
villeNais String?
villeNais String?
/// Département de naissance.
depNais String?
depNais String?
/// Pays de naissance.
paysNais String?
paysNais String?
/// Profession.
profession String?
profession String?
/// Catégorie socio professionelle de l'INSEE.
catSocPro String?
catSocPro String?
/// Famille socio professionelle de l'INSEE.
famSocPro String?
slug String
famSocPro String?
slug String
/// URL de la déclaration d'intérêt de l'acteur sur le site de la Haute Autorité pour la Transparence dans la Vie Publique.
uriHatvp String?
uriHatvp String?
/// Deputé en poste actuellement.
actif Boolean? @default(false)
actif Boolean? @default(false)
/// Groupe parlementaire du député.
groupeParlementaireUid String?
groupeParlementaireUid String?
/// Mandat principal du député, c'est à dire s'il est actif ou non.
mandatPrincipalUid String? @unique
mandatPrincipalUid String? @unique
/// Organe de circonscription
circonscriptionUid String?
circonscriptionUid String?
/// Identifiant unique de la commission permanente et active de cet acteur.
commissionPermanenteRefUid String?
/// Chambre du parlementaire (assemblée ou sénat)
chambre String?
compteTwitter String?
groupeParlementaire Organe? @relation("Acteur_GroupeParlementaire", fields: [groupeParlementaireUid], references: [uid])
mandatPrincipal Mandat? @relation("Acteur_MandatPrincipal", fields: [mandatPrincipalUid], references: [uid])
circonscription Organe? @relation("Acteur_Circonscription", fields: [circonscriptionUid], references: [uid])
auteurActeLegislatif ActeLegislatif[] @relation("ActeLegislatif_auteurMotion")
reunionsDemandees ActeurDemandeur[]
adressesElectroniques AdresseElectronique[]
adressesPostales AdressePostale[]
amendements Amendement[]
coSignataireAmendement CoSignataireAmendement[]
auteurs Auteur[]
auteursMotion AuteurMotion[]
coSignataireDocument CoSignataireDocument[]
documents Document[]
dysfonctionnements Dysfonctionnement[]
initiateurActeLegislatif InitiateurActeLegislatif[]
dossiers InitiateurDossier[]
mandats Mandat[] @relation("Mandat_Acteur")
votes Vote[]
misesAuPoint MiseAuPoint[]
reunions ParticipantReunion[]
auditionsReunions PersonneAuditionneeReunion[]
questions Question[]
rapporteurs Rapporteur[]
suppletions Suppleant[]
interventions Paragraphe[]
vecteurRecherche Unsupported("tsvector")? @default(dbgenerated("to_tsvector('french'::regconfig, ((immutable_unaccent((COALESCE(prenom, ''::text))::character varying) || ' '::text) || immutable_unaccent((COALESCE(nom, ''::text))::character varying)))"))
chambre String?
compteTwitter String?
groupeParlementaire Organe? @relation("Acteur_GroupeParlementaire", fields: [groupeParlementaireUid], references: [uid])
mandatPrincipal Mandat? @relation("Acteur_MandatPrincipal", fields: [mandatPrincipalUid], references: [uid])
circonscription Organe? @relation("Acteur_Circonscription", fields: [circonscriptionUid], references: [uid])
/// Commission permanente et active de cet acteur.
commissionPermanente Organe? @relation(fields: [commissionPermanenteRefUid], references: [uid])
/// Fonction de cet acteur au sein de sa commission permanente.
fonctionCommissionPermanente String?
auteurActeLegislatif ActeLegislatif[] @relation("ActeLegislatif_auteurMotion")
reunionsDemandees ActeurDemandeur[]
adressesElectroniques AdresseElectronique[]
adressesPostales AdressePostale[]
amendements Amendement[]
coSignataireAmendement CoSignataireAmendement[]
auteurs Auteur[]
auteursMotion AuteurMotion[]
coSignataireDocument CoSignataireDocument[]
documents Document[]
dysfonctionnements Dysfonctionnement[]
initiateurActeLegislatif InitiateurActeLegislatif[]
initiateurDossiers InitiateurDossier[]
mandats Mandat[] @relation("Mandat_Acteur")
votes Vote[]
misesAuPoint MiseAuPoint[]
reunions ParticipantReunion[]
auditionsReunions PersonneAuditionneeReunion[]
questions Question[]
rapporteurs Rapporteur[]
suppletions Suppleant[]
interventions Paragraphe[]
/// Les dossiers de cet acteur.
dossiers Dossier[]
vecteurRecherche Unsupported("tsvector")? @default(dbgenerated("to_tsvector('french'::regconfig, ((immutable_unaccent((COALESCE(prenom, ''::text))::character varying) || ' '::text) || immutable_unaccent((COALESCE(nom, ''::text))::character varying)))"))
/// Lois présentées au nom de cet acteur (e.g. un premier ministre).
loisPortees TexteLoi[] @relation("loisPortees")
Expand All @@ -82,13 +89,14 @@ model Acteur {
@@index([mandatPrincipalUid])
@@index([circonscriptionUid])
@@index([slug])
@@index([commissionPermanenteRefUid])
}

model AdresseElectronique {
/// Identifiant unique.
uid String @id
/// Jeu de données de provenance (numéro de législature)
dataset Int
dataset Int
type String
typeLibelle String
poids String?
Expand Down
16 changes: 10 additions & 6 deletions prisma/models/agenda.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ model Agenda {
dataset Int
/// Type de la réunion
xsiType String?
/// Chambre de la réunion (Assemblée ou Sénat)
chambre String?
/// Date et heure du début de la réunion.
timestampDebut DateTime?
/// Date et heure de la fin de la réunion.
Expand Down Expand Up @@ -82,8 +84,6 @@ model PointOdj {
uid String @id
/// Jeu de données de provenance (numéro de législature)
dataset Int
/// Identifiant unique de la réunion associée.
agendaRefUid String?
/// Le contenu de ce champ n'est pas défini.
comiteSecret Boolean?
/// Date de fin.
Expand All @@ -105,21 +105,25 @@ model PointOdj {
/// Type de point de l'ordre du jour (par exemple: Discussion, Examen, Suite de la discussion, Amendements (Art. 88), etc.)
typePointOdj String?
dossierLegislatifUid String?
/// Pour les réunions dont xsiType est 'seance_type', c'est à dire une séance publique, chaque point de l'ordre du jour est fixé par la `conférence des présidents <https://fr.wikipedia.org/wiki/Conf%C3%A9rence_des_pr%C3%A9sidents_de_l%27Assembl%C3%A9e_nationale>`__ et a donc la valeur 'podjSeanceConfPres_type' pour le champ xsiType. Dans tout les autres cas la valeur est 'podjReunion_type'
/// Identifiant unique de la réunion associée.
agendaRefUid String?
/// Pour les réunions dont xsiType est 'seance_type', c'est à dire une séance publique, chaque point de l'ordre du jour est fixé par la `conférence des présidents <https://fr.wikipedia.org/wiki/Conf%C3%A9rence_des_pr%C3%A9sidents_de_l%27Assembl%C3%A9e_nationale>`__ et a donc la valeur 'podjSeanceConfPres_type' pour le champ xsiType. Dans tout les autres cas la valeur est 'podjReunion_type'.
xsiType String
actesLegislatifs ActeLegislatif[]
dossierLegislatif Dossier? @relation(fields: [dossierLegislatifUid], references: [uid])
agendaRef Agenda? @relation(fields: [agendaRefUid], references: [uid], onDelete: Cascade)
interventions Paragraphe[]
@@index([dataset])
@@index([agendaRefUid])
@@index([dossierLegislatifUid])
}

model ActeurDemandeur {
/// Clé primaire.
id Int @id @default(autoincrement())
/// Jeu de données de provenance (numéro de législature)
dataset Int
dataset Int
/// Acteur référent.
acteurRefUid String
/// Agenda référent.
Expand All @@ -136,7 +140,7 @@ model ParticipantReunion {
/// Clé primaire.
id Int @id @default(autoincrement())
/// Jeu de données de provenance (numéro de législature)
dataset Int
dataset Int
/// La valeur est 'absent' ou 'excusé' si la personne n'a pas participé à la réunion, 'présent' sinon.
presence String?
/// Acteur référent.
Expand All @@ -155,7 +159,7 @@ model PersonneAuditionneeReunion {
/// Clé primaire.
id Int @id @default(autoincrement())
/// Jeu de données de provenance (numéro de législature)
dataset Int
dataset Int
/// Identifiant unique de l'acteur ou bien, dans le cas ou il ne s'agit pas d'un acteur, un identifiant unique de personne externe débutant par PE qui est utilisé uniquement dans ce contexte.
uid String
/// Acteur référent.
Expand Down
12 changes: 7 additions & 5 deletions prisma/models/amendement.prisma
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ model Amendement {
legislature String?
/// Libelle désignant l'amendement et incluant son numéro (correspondant au champ numero), une indication du nombre de rectifications qui lui ont été apportés (correspondant au champ identifiant.numRect et d'autres informations dérivées du champ identifiant.
numeroLong String?
numeroOrdreDepot String?
numeroOrdreDepot Int?
prefixeOrganeExamen String?
numeroRect String?
numeroRect Int?
examenRef String?
/// Lorsque tous les amendements visant un texte de loi sont triés sur cette clé, cela détermine leur ordre d'appel.
triAmendement String?
/// Le contenu de ce champ n'est pas défini.
cardinaliteAmdtMultiples String?
cardinaliteAmdtMultiples Int?
/// L'identifiant unique (uid) de l'amendement modifié par un sous amendement. Les amendements peuvent faire l’objet de sous-amendements qui doivent respecter les mêmes règles formelles que les amendements.
amendementParentRefUid String?
/// 'Depute' si l'auteur dépose l'amendement en sa qualité de député, 'Gouvernement' s'il le fait au nom du gouvernement, 'Rapporteur' s'il est le rapporteur de la commission désignée par organeRef.
Expand Down Expand Up @@ -97,8 +97,10 @@ model Amendement {
article99 String?
codeLoi String?
divisionCodeLoi String?
idDiscussion String?
typePosition String?
idDiscussionCommune Int?
typePositionCommune String?
idDiscussionIdentique Int?
typePositionIdentique String?
accordGouvernementDepotHorsDelai String?
/// Exposé sommaire des motifs justifiant l'amendement, au format HTML.
exposeSommaireHtml String?
Expand Down
52 changes: 26 additions & 26 deletions prisma/models/commune.prisma
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
/// L'ensemble des communes de France et leur circonscription associée
model Commune {
/// Identifiant unique.
id Int @id @default(autoincrement())
/// Hachage de l'objet
hash String @unique
/// Nom de la commune
libelle String
/// Numéro de la région où se trouve la commune
codeRegion Int
/// Nom de la région où se trouve la commune
libelleRegion String
/// Numéro du département où se trouve la commune
codeDepartement Int
/// Nom du département où se trouve la commune
libelleDepartement String
/// Code INSEE
codeInsee String?
/// Code postal
codePostal String
/// Vrai si la commune est sur plusieurs circonscriptions
circoPartielle Boolean @default(false)
/// Numéro de la cirsconscription
numCirco Int?
/// Identifiant unique de la cirsconscription liée à la commune
circonscriptionUid String?
circonscription Organe? @relation(fields: [circonscriptionUid], references: [uid])
/// Identifiant unique.
id Int @id @default(autoincrement())
/// Hachage de l'objet
hash String @unique
/// Nom de la commune
libelle String
/// Numéro de la région où se trouve la commune
codeRegion Int
/// Nom de la région où se trouve la commune
libelleRegion String
/// Numéro du département où se trouve la commune
codeDepartement Int
/// Nom du département où se trouve la commune
libelleDepartement String
/// Code INSEE
codeInsee String?
/// Code postal
codePostal String
/// Vrai si la commune est sur plusieurs circonscriptions
circoPartielle Boolean @default(false)
/// Numéro de la cirsconscription
numCirco Int?
/// Identifiant unique de la cirsconscription liée à la commune
circonscriptionUid String?
circonscription Organe? @relation(fields: [circonscriptionUid], references: [uid])
@@index([circonscriptionUid])
@@index([circonscriptionUid])
}
Loading

0 comments on commit a69c4df

Please sign in to comment.