From e9c4e70f9c7db8a2c1f006c27279681efc2f6da5 Mon Sep 17 00:00:00 2001 From: "ronan.vignard" <ronan.vignard@developpement-durable.gouv.fr> Date: Fri, 8 Nov 2024 16:25:00 +0100 Subject: [PATCH] Renommage du flat --- ...s.Rmd => flat_create_tables_sequences.Rmd} | 177 +++++++++++++++--- 1 file changed, 153 insertions(+), 24 deletions(-) rename dev/{flat_create_tables.Rmd => flat_create_tables_sequences.Rmd} (60%) diff --git a/dev/flat_create_tables.Rmd b/dev/flat_create_tables_sequences.Rmd similarity index 60% rename from dev/flat_create_tables.Rmd rename to dev/flat_create_tables_sequences.Rmd index 564b933..fbfa589 100644 --- a/dev/flat_create_tables.Rmd +++ b/dev/flat_create_tables_sequences.Rmd @@ -1,5 +1,5 @@ --- -title: "Cr\u00e9ation des tables finales" +title: "Cr\u00e9ation des tables et des s\u00e9quences" output: html_document editor_options: chunk_output_type: console @@ -7,6 +7,7 @@ editor_options: ```{r development, include=FALSE} library(testthat) +library(yaml) library(glue) library(DBI) library(datalibaba) @@ -17,11 +18,18 @@ library(datalibaba) pkgload::load_all(export_all = FALSE) ``` -# Présentation +```{r config, eval=FALSE} +# Lire le fichier de configuration +config <- yaml::read_yaml("config.yml") -> Cette page contient la logique métier concernant la création des tables de prélèvements et d'analyses concernant les nitrates. +# Accéder aux valeurs pour version et last_year +version <- config$version +last_year <- config$last_year +``` + +# Création des tables en base -# Table des prélèvements +## Création de la table des prélèvements et ajout des commentaires ```{r function-create_nitrate_prelevement_table, eval=FALSE} #' Créer une table de prélèvements de nitrates @@ -32,12 +40,13 @@ pkgload::load_all(export_all = FALSE) #' #' @param version String. Version de la table (par exemple, 'v1'). #' @param last_year Integer. L'année la plus récente incluse dans les données de la table. -#' @param connexion DBIConnection. Connexion active à la base de données PostgreSQL. #' #' @return String. Le script SQL utilisé pour créer la table. #' @export #' @importFrom datalibaba connect_to_db -create_nitrate_prelevement_table <- function(version, last_year, connexion) { +create_nitrate_prelevement_table <- function(version, last_year) { + # Établir une connexion à la base de données PostgreSQL + connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") # Génération de la date du jour date_now <- format(Sys.Date(), "%d/%m/%Y") @@ -110,16 +119,14 @@ create_nitrate_prelevement_table <- function(version, last_year, connexion) { } ``` -```{r examples-create_nitrate_prelevement_table, eval=FALSE} -# Connexion à la base de données -connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") - +Création de la table `nitrates.nitrate_prelevement_version` : +```{r create_nitrate_prelevement_table_version, eval=FALSE} # Création du script SQL avec la version choisie -version <- "v0_16" -last_year <- "2023" -sql <- create_nitrate_prelevement_table(version, last_year, connexion) +sql <- create_nitrate_prelevement_table(version, last_year) ``` +## Création de la table des analyses et ajout des commentaires + ```{r function-create_nitrate_analyse_table, eval=FALSE} #' Créer une table d'analyses de nitrates #' @@ -129,12 +136,13 @@ sql <- create_nitrate_prelevement_table(version, last_year, connexion) #' #' @param version String. Version de la table (par exemple, 'v1'). #' @param last_year Integer. L'année la plus récente incluse dans les données de la table. -#' @param connexion DBIConnection. Connexion active à la base de données PostgreSQL. #' #' @return String. Le script SQL utilisé pour créer la table. #' @export #' @importFrom datalibaba connect_to_db -create_nitrate_analyse_table <- function(version, last_year, connexion) { +create_nitrate_analyse_table <- function(version, last_year) { + # Établir une connexion à la base de données PostgreSQL + connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") # Génération de la date du jour date_now <- format(Sys.Date(), "%d/%m/%Y") @@ -213,19 +221,140 @@ create_nitrate_analyse_table <- function(version, last_year, connexion) { ``` -```{r examples-create_nitrate_analyse_table, eval=FALSE} -# Connexion à la base de données -connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") - +Création de la table `nitrates.nitrate_analyse_version` : +```{r create_nitrate_analyse_table, eval=FALSE} # Création du script SQL avec la version choisie -version <- "v0_16" -last_year <- "2023" -sql <- create_nitrate_analyse_table(version, last_year, connexion) +sql <- create_nitrate_analyse_table(version, last_year) +``` + +# Incrémentation des séquences + +## Incrémentation de la table des prélèvements + +```{r function-add_code_prelevement, eval=FALSE} +#' Ajouter une variable code_prelevement au dataframe +#' +#' @description Cette fonction ajoute une nouvelle variable `code_prelevement` +#' au dataframe en utilisant une séquence PostgreSQL dynamique. La séquence est +#' construite en fonction du paramètre `version` fourni. +#' +#' @param dataframe Un dataframe contenant les données sur lesquelles ajouter +#' la variable `code_prelevement`. +#' @param version Une chaîne de caractères représentant la version de la +#' séquence à utiliser. +#' +#' @return Un dataframe avec une nouvelle colonne `code_prelevement` contenant +#' les valeurs de la séquence PostgreSQL. +#' +#' @importFrom DBI dbGetQuery dbDisconnect +#' @importFrom dplyr mutate +#' @importFrom glue glue +#' @importFrom datalibaba connect_to_db +#' @export +add_code_prelevement <- function(dataframe, version) { + # Établir une connexion à la base de données PostgreSQL + connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") + + # Construire le nom de la séquence + sequence_name <- glue::glue("nitrates.nitrate_prelevement_{version}_code_prelevement_seq") + + # Initialiser une liste pour stocker les valeurs de la séquence + code_prelevements <- c() + + # Pour chaque ligne du dataframe, obtenir une valeur de la séquence + for (i in 1:nrow(dataframe)) { + query <- glue::glue("SELECT nextval(\'{sequence_name}\') AS code_prelevement") + result <- DBI::dbGetQuery(connexion, query) + code_prelevements <- c(code_prelevements, result$code_prelevement) + } + + # Ajouter la nouvelle variable au dataframe + dataframe <- dataframe |> + dplyr::mutate(code_prelevement = code_prelevements) + + # Fermer la connexion à la base de données + DBI::dbDisconnect(connexion) + + return(dataframe) +} + +``` + +## Incrémentation de la table des analyses + +```{r function-add_code_analyse, eval=FALSE} +#' Ajouter une variable code_analyse au dataframe +#' +#' @description Cette fonction ajoute une nouvelle variable `code_analyse` +#' au dataframe en utilisant une séquence PostgreSQL dynamique. La séquence est +#' construite en fonction du paramètre `version` fourni. +#' +#' @param dataframe Un dataframe contenant les données sur lesquelles ajouter +#' la variable `code_analyse`. +#' @param version Une chaîne de caractères représentant la version de la +#' séquence à utiliser. +#' +#' @return Un dataframe avec une nouvelle colonne `code_analyse` contenant +#' les valeurs de la séquence PostgreSQL. +#' +#' @importFrom DBI dbGetQuery dbDisconnect +#' @importFrom dplyr mutate +#' @importFrom glue glue +#' @importFrom datalibaba connect_to_db +#' @export +add_code_analyse <- function(dataframe, version) { + # Établir une connexion à la base de données PostgreSQL + connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") + + # Construire le nom de la séquence + sequence_name <- glue::glue("nitrates.nitrate_analyse_{version}_code_analyse_seq") + + # Initialiser une liste pour stocker les valeurs de la séquence + code_analyses <- c() + + # Pour chaque ligne du dataframe, obtenir une valeur de la séquence + for (i in 1:nrow(dataframe)) { + query <- glue::glue("SELECT nextval(\'{sequence_name}\') AS code_analyse") + result <- DBI::dbGetQuery(connexion, query) + code_analyses <- c(code_analyses, result$code_analyse) + } + + # Ajouter la nouvelle variable au dataframe + dataframe <- dataframe |> + dplyr::mutate(code_analyse = code_analyses) + + # Fermer la connexion à la base de données + DBI::dbDisconnect(connexion) + + return(dataframe) +} + +``` + +```{r development-skeleton-dir, eval=FALSE} +# Créer de l'arborescence et des fichiers du template +usethis::use_rmarkdown_template( + template_name = "Cr\u00e9ation des tables et des s\u00e9quences", + template_dir = "creation-des-tables-et-des-sequences", + template_description = "Cr\u00e9ation des tables et des s\u00e9quences", + template_create_dir = TRUE +) +``` + +```{r development-skeleton-copy, eval=FALSE} +# Définir les chemins source et destination +source_file <- "dev/flat_create_tables_sequences.Rmd" +destination_dir <- "inst/rmarkdown/templates/creation-des-tables-et-des-sequences/skeleton" +destination_file <- file.path(destination_dir, "skeleton.Rmd") + +# Copier et renommer le fichier +file.copy(from = source_file, to = destination_file, overwrite = TRUE) +message("File copied and renamed successfully.") + ``` ```{r development-inflate, eval=FALSE} # Run but keep eval=FALSE to avoid infinite loop # Execute in the console directly -fusen::inflate(flat_file = "dev/flat_create_tables.Rmd", vignette_name = "Cr\u00e9ation des tables finales") +fusen::inflate(flat_file = "dev/flat_create_tables_sequences.Rmd", vignette_name = "Cr\u00e9ation des tables et des s\u00e9quences") ``` - -- GitLab