PROD: Application de gestion de résolutions d'instances démocratiques
  • Go 60.3%
  • HTML 19.5%
  • CSS 9.9%
  • JavaScript 6.6%
  • PLpgSQL 2.4%
  • Other 1.3%
Find a file
2026-08-20 17:32:26 -04:00
.forgejo/workflows fix: squelette -> resolutions 2026-05-04 11:19:32 -04:00
build fix: donner le bon package a build.go 2026-06-02 16:07:46 -04:00
cmd/resolutions refactor: changement des noms num_point_odj et num_resolution dans api 2026-07-30 15:52:59 -04:00
k8s fix(k8s): ajuster container ports avec proper defaults 2026-07-07 16:02:05 -04:00
queries feature: search filtre pour list resolutions prend en compte les commentaires 2026-08-20 17:25:53 -04:00
scripts build(make): ajouter targets tag, push, et release 2026-07-07 12:44:07 -04:00
ui feature: garde les filtres params sur les actions CRUD de resolutions sur ui 2026-08-20 17:05:21 -04:00
.gitignore feature: k8s secrets dans gitignore 2026-06-09 17:46:57 -04:00
api.secret.yaml feature: unarchive resolutions endpoint 2026-06-30 13:35:06 -04:00
client.go feature: pagination et filtre archive sur reunions 2026-07-10 14:20:23 -04:00
client_test.go refactor: changement des noms num_point_odj et num_resolution dans api 2026-07-30 15:52:59 -04:00
compose.yaml fix: retirer variables d'env manuelles non nécessaires de compose.yaml 2026-06-02 11:53:58 -04:00
config.go fix: package squelette -> resolutions 2026-05-01 16:32:50 -04:00
db.go refactor: changement des noms num_point_odj et num_resolution dans api 2026-07-30 15:52:59 -04:00
Dockerfile fix: donner un valeur defaut a build.version et retourner le bon version dans readHealthHandler 2026-06-02 16:08:43 -04:00
entity.go refactor: changement des noms num_point_odj et num_resolution dans api 2026-07-30 15:52:59 -04:00
flag.go fix: changer les flags et envs pour celle de resolutions 2026-05-01 16:41:16 -04:00
go.mod feature: ajout de package uuid 2026-06-09 16:11:14 -04:00
go.sum feature: ajout de package uuid 2026-06-09 16:11:14 -04:00
handler.go feature: import resolutions avec csv 2026-07-24 19:53:59 -04:00
handler_ui.go Merge branch 'main' into search-avec-commentaire 2026-08-20 17:27:26 -04:00
LICENSE Initial commit 2026-05-01 13:41:14 -04:00
Makefile Merge pull request 'build(make): ajouter targets tag, push, et release' (#98) from vlbeaudoin/build/make/tag-push-release into main 2026-07-07 12:47:02 -04:00
middleware.go fix: enleve trailing slash de /public pour css et js 2026-05-05 14:40:01 -04:00
opts.go feature: options pour readResolutions pour private comments 2026-06-22 10:43:42 -04:00
README.md feature: update readme avec l'ajout des commentaire dans search filtre pour list resolutions 2026-08-20 17:26:33 -04:00
response.go feature: unarchive resolutions endpoint 2026-06-30 13:35:06 -04:00
response_ui.go feature: ui handler et route pour unarchive resolutions 2026-08-20 16:28:06 -04:00
route.go feature: ui handler et route pour unarchive resolutions 2026-08-20 16:28:06 -04:00
server.go fix: package squelette -> resolutions 2026-05-01 16:32:50 -04:00
src.Dockerfile fix: donner un valeur defaut a build.version et retourner le bon version dans readHealthHandler 2026-06-02 16:08:43 -04:00
test.compose.yaml fix: changer les flags et envs pour celle de resolutions 2026-05-01 16:41:16 -04:00
ui.secret.yaml feature: unarchive resolutions endpoint 2026-06-30 13:35:06 -04:00
validate.go fix: package squelette -> resolutions 2026-05-01 16:32:50 -04:00

Resolutions

Resolutions!!!!

Requirements

  • docker
  • docker compose
  • make

Deployment

Deployment Local

  1. Copier et configurer le fichier d'environnement :
# .env

RESOLUTIONS_SERVER_API_POSTGRES_DATABASE='resolutions'
RESOLUTIONS_SERVER_API_POSTGRES_HOST='db'
RESOLUTIONS_SERVER_API_POSTGRES_PASSWORD='resolutions'
RESOLUTIONS_SERVER_API_POSTGRES_USER='resolutions'

RESOLUTIONS_CLIENT_API_HOST=localhost
RESOLUTIONS_CLIENT_API_PORT=8080
  1. Démarrer les conteneurs :
make deploy
  1. Insérer les données de seed (requiert les conteneurs en marche) :
make seed
  1. Accéder à l'interface :
Service URL
UI http://localhost:2312
API http://localhost:8080

Tests

# test.env

RESOLUTIONS_SERVER_API_POSTGRES_DATABASE='resolutions'
RESOLUTIONS_SERVER_API_POSTGRES_HOST='db'
RESOLUTIONS_SERVER_API_POSTGRES_PASSWORD='resolutions'
RESOLUTIONS_SERVER_API_POSTGRES_USER='resolutions'

UI Guide et features

Page Instances

Une instance c'est le groupe qui a une rencontre, par exemple un bureau exécutif (BE). Les instances possèdent deux champs : le nom et l'acronyme.

Liste et lecture

Pour voir la liste des instances, aller sur la page des instances en cliquant sur « Instances » en haut au centre du header.

Créer

  1. Aller sur la page de celle-ci et cliquer sur le bouton jaune « Nouveau » en haut à droite.
  2. Vous allez maintenant voir une fenêtre avec les deux champs du nom et de l'acronyme.
  3. Complétez le formulaire en inscrivant le nom et l'acronyme, puis cliquez sur « Créer » pour terminer la création de l'instance. Pour annuler ou sortir de la fenêtre sans créer l'instance, cliquez sur « Annuler » en bas à droite ou sur le « x » en haut à droite de la fenêtre.

Vous devriez maintenant voir votre instance dans la liste.

Modifier

  1. Cliquer directement sur le nom ou sur l'acronyme pour modifier le texte.
  2. Modifier le texte a ce que vous voulez.
  3. Une fois le changement effectué, appuyer sur « Enter » ou « Entrée » sur votre clavier, ou simplement cliquer à l'extérieur du champ pour finaliser le changement.

Supprimer

  1. Cliquer sur l'icône de poubelle sur la même ligne que votre instance. Cela va ouvrir une fenêtre pour confirmer la suppression de l'instance.
  2. Cliquer sur « Supprimer » pour supprimer votre instance, sinon cliquer sur « Annuler » ou sur le « x » pour sortir de la fenêtre sans suppression.

Filtre

En haut de la page, juste en dessous du header, il y a une barre de recherche pour rechercher une instance par son nom ou son acronyme. Simplement écrire le nom ou l'acronyme de l'instance que vous cherchez et elle va apparaître dans la liste automatiquement.

Page Types d'instance

Le type d'instance c'est le type associé à la rencontre. Les types d'instance possèdent aussi deux champs : le nom et l'acronyme.

Les instructions pour les types d'instance sont exactement les mêmes que celles des instances, car les pages sont presque identiques. La seule différence entre elles, c'est qu'il y a des types d'instance au lieu des instances.

Page Résolutions

Une résolution c'est la décision prises pendant une rencontre par une instance. Les résolutions possedent plusieurs champs : le nom, le nombre, la date, le type instance, l'instance, les points d'ajustements, le numero de resoultions, le type d'adoption, l'index, le contenu, les commentaires publiques, les commentaires privees, les resolutions en references, la date d'archivage et le reunion.

Explications des champs

  • Nom (name) : nom de la résolution, calculé automatiquement à partir des valeurs des autres champs.

    • format : yyyy-mm-dd_InstType[_index]_R-adj-numres
  • Nombre (number) : Nombre de la résolution, calculé automatiquement à partir des valeurs de numéro point d'ordre de jour et du numéro de la résolution.

    • format : num_point_odj-num_resolution ou xx-xx
    • example : "04-03" c'est la 3e résolutions prise dans le 4e point à l'ordre du jour.
  • Date (date) : la date de création de la résolution.

  • Type instance (type_id) : le type d'instance associé à la résolution.

  • Instance (instance_id) : l'instance associée à la résolution.

  • Numéro point d'ordre du jour (num_point_odj) : représente le numéro dans l'ordre du jour, ça regroupe les résolutions par thématique.

    • nombre entre 0 et 99
  • Numéro de la résolution (num_resolution) : représente le nombre de résolutions prises dans cet ordre du jour/thématique

    • nombre entre 0 et 99
  • Type d'adoption (adoption_type) : indique si la résolution a été adoptée ou non, et selon quel type.

    • Types possibles : unanime, majorité ou aucun. Aucun signifie que le type n'a pas été précisé.
  • Index (index) : on ajoute un index de 2 si une instance se répète la même journée, donc 2 fois une rencontre du même type avec le même groupe de personnes à la même date.

    • on pourrait dire que par défaut, chaque résolution a un index de 1 qu'on n'affiche pas
    • pour un cas très rare
  • Contenu (content) : le contenu de la résolution, ce qu'elle adopte ou non.

  • Commentaires publics (public_comments) : les commentaires disponibles publiquement sur le site d'AGECEM.

  • Commentaires privés (private_comments) : les commentaires visibles seulement dans cette application.

  • Résolutions en référence (reference_resolutions) : les résolutions référencées par celle-ci.

  • Date d'archivage (archived_at) : l'archivage est une sorte de soft delete. Si ce champ possède une valeur, la résolution est archivée.

  • Réunion (reunion_id) : la réunion à laquelle la résolution appartient. Une façon de regrouper les résolutions.

    • format : yyyy-mm-dd_InstType[_index]

Liste et lecture

Pour voir la liste des résolutions, aller sur la page des résolutions en cliquant sur « Résolutions » en haut au centre du header.

Pour lire les details d'une résolution, cliquer directement sur la résolution dans la liste. Vous allez voir une fenêtre s'ouvrir à droite avec toutes les infos de la résolution.

Créer

  1. Aller sur la page de celle-ci et cliquer sur le bouton jaune « Créer une résolution » en haut à droite.
  2. Vous allez maintenant voir une fenêtre avec tous les champs. Numéro point d'ordre du jour, numéro de la résolution, date et contenu sont obligatoires.
  3. Complétez le formulaire en remplissant au minimum les champs obligatoires, puis cliquez sur « Créer » pour terminer la création de la résolution. Pour annuler ou sortir de la fenêtre sans créer la résolution, cliquez sur « Annuler » en bas à droite ou sur le « x » en haut à droite de la fenêtre.

Créer plus

En bas à gauche de la fenêtre de création de résolution, vous allez voir le checkbox pour l'option « Créer plus ». Lorsqu'elle est activée, lorsqu'on crée une résolution, la fenêtre ne se ferme pas et les champs ne s'effacent pas. Cette option est utile si vous voulez créer plusieurs résolutions.

Modifier

  1. Cliquer directement sur la résolution dans la liste. Vous allez voir une fenêtre s'ouvrir à droite avec toutes les infos de la résolution.
  2. Modifier les champs aux valeurs que vous voulez. Le nom et le numéro seront calculés automatiquement.
  3. Une fois que vous avez terminé de modifier les valeurs, cliquez en bas à droite sur « Enregistrer ». Dans la même fenêtre, vous allez voir les valeurs modifiées, que vous pouvez consulter pour vérifier que tout est correct.
  4. Après avoir vérifié les changements, cliquez en bas à droite sur « Confirmer » pour effectuer les changements.

Archiver

Archiver est une sorte de soft delete qui nous permet de garder l'élément dans la base de données, mais on ne l'affiche plus dans la liste. Il n'y a pas de façon définitive de supprimer depuis l'UI.

  1. Cliquer sur l'icône de poubelle sur la même ligne que votre résolution, à droite. Cela va ouvrir une fenêtre pour confirmer l'archivage de la résolution.
  2. Cliquer sur « Archiver » pour archiver votre résolution, sinon cliquer sur « Annuler » ou sur le « x » pour sortir de la fenêtre sans archivage.

Ajouter des références

  1. Aller soit sur la fenêtre de création, soit sur la fenêtre de détails et modification d'une résolution. Vous allez voir un bouton « Ajouter des références », cliquer dessus.
  2. Vous allez voir une fenêtre avec une liste de résolutions et des filtres comme sur la page des résolutions ; en cliquant sur une résolution, vous l'ajoutez à la sélection. Pour l'enlever de la sélection, cliquez sur le « x » au-dessus de la résolution ajoutée.
  3. Une fois que vous avez terminé d'ajouter à la sélection, cliquez sur « Confirmer » pour ajouter la sélection de résolutions comme références à la résolution actuelle.

Filtres

  • Barre de recherche : en haut de la page, juste en dessous du header, il y a une barre de recherche pour rechercher une résolution par son nom, son contenu et ses commentaires. Simplement écrire le nom, le contenu ou une partie du texte, et appuyer sur la touche Entrée. Vous allez voir votre résolution apparaître dans la liste.

  • Réunion : à gauche des autres filtres, juste en dessous du titre, vous allez voir le filtre par réunion. Sélectionner une réunion dans la liste déroulante pour voir apparaître toutes les résolutions de cette réunion. Utilisez les flèches pour naviguer entre les différentes pages.

  • Dates : à droite du filtre par réunion, il y a un filtre par plage de dates, choisissez une date minimale et une date maximale, et vous verrez apparaître dans la liste les résolutions comprises entre ces deux dates.

  • Archive : à droite de la plage de dates, il y a un checkbox pour afficher les archives. En cochant, seules les archives vont apparaître dans la liste.

Cliquer sur « Effacer les filtres » pour revenir à la liste par défaut.

Import des résolutions

Informations générales

Si les résolutions à importer contiennent des acronymes d'instances ou de types d'instance qui n'existent pas encore dans le système, ils vont être créés, mais le nom sera le même que l'acronyme et devra être changé.

Tout import de résolutions se termine par une fenêtre de résultats, qui montre combien de résolutions ont été importées et combien ont été refusées, ainsi que pour quelle raison.

Il est impossible d'importer la même résolution plusieurs fois, les noms des résolutions sont uniques.

JSON

En convertissant le fichier CSV des résolutions en JSON, on peut importer toutes les résolutions dans l'application.

  1. Sur la page des résolutions, sur la même ligne que le titre, à gauche, cliquer sur « Importer JSON ». Une fenêtre s'ouvrira.
  2. Dans le champ de texte, copier-coller le JSON et cliquer sur « Importer » pour ajouter toutes les résolutions.

CSV

On peut aussi importer des résolutions en téléversant le fichier CSV directement.

  1. Sur la page des résolutions, sur la même ligne que le titre, à gauche, cliquer sur « Importer CSV ». Une fenêtre s'ouvrira.
  2. Cliquer sur « Télécharger le modèle CSV » et ouvrir le fichier avec Excel pour voir un exemple d'un fichier CSV bien formaté. Il est important que les en-têtes soient identiques à celles du modèle, incluant la casse (majuscules/minuscules).
  3. Ouvrir votre fichier CSV avec Excel et changer les en-têtes de votre fichier CSV pour celles du modèle.
  4. Revenir sur l'application, sur la fenêtre d'import par CSV, cliquer sur « Choisir un fichier » et sélectionner votre fichier CSV. Ensuite, cliquer sur « Importer » pour ajouter toutes les résolutions.

IMPORTANT: Assurez-vous d'utiliser les mêmes en-têtes que celles du modèle. L'ordre n'est pas important, mais la casse l'est.

  • Pour le type d'adoption (adoption_type), choisissez soit « unanimité », « majorité » ou « aucune ». Si vous laissez le champ vide, la résolution sera considérée comme non adoptée, et s'il y a un « x » ou n'importe quel texte qui n'est pas l'un des trois types d'adoption, la résolution sera considérée comme adoptée avec le type « aucune ».
  • num_point_odj correspond à la numéro point d'ordre du jour.
  • num_resolution correspond à la numéro de la résolution.