feat: препроверка схемы перед загрузкой
This commit is contained in:
72
app.R
72
app.R
@@ -10,29 +10,30 @@ suppressPackageStartupMessages({
|
||||
})
|
||||
|
||||
source("helpers/functions.R")
|
||||
source("helpers/scheme_generator.R")
|
||||
|
||||
|
||||
# box::purge_cache()
|
||||
# box::use(./helpers/db)
|
||||
|
||||
# SOURCE FILES ============================
|
||||
FILE_SCHEME <- fs::path("configs/schemas", "schema.xlsx")
|
||||
HEADER_TEXT <- sprintf("%s (%s)", Sys.getenv("FORM_TITLE", "NA"), Sys.getenv("FORM_VERSION", "NA"))
|
||||
|
||||
box::purge_cache()
|
||||
box::use(
|
||||
modules/utils,
|
||||
modules/global_options,
|
||||
modules/db,
|
||||
modules/data_validation
|
||||
modules/data_validation,
|
||||
helpers/scheme_generator[scheme_R6]
|
||||
)
|
||||
|
||||
# SETTINGS ================================
|
||||
FILE_SCHEME <- fs::path("configs/schemas", "schema.xlsx")
|
||||
AUTH_ENABLED <- Sys.getenv("FORM_AUTH_ENABLED", FALSE)
|
||||
HEADER_TEXT <- sprintf("%s (%s)", Sys.getenv("FORM_TITLE", "NA"), Sys.getenv("FORM_VERSION", "NA"))
|
||||
|
||||
global_options$set_global_options(
|
||||
shiny.host = "0.0.0.0"
|
||||
)
|
||||
|
||||
# SETTINGS ================================
|
||||
AUTH_ENABLED <- Sys.getenv("FORM_AUTH_ENABLED", FALSE)
|
||||
global_options$check_and_init_scheme()
|
||||
|
||||
# CHECK FOR PANDOC
|
||||
# TEMP ! NEED TO HANDLE
|
||||
@@ -42,50 +43,20 @@ rmarkdown::find_pandoc(dir = "/opt/homebrew/bin/")
|
||||
if (!rmarkdown::pandoc_available()) warning("Can't find pandoc!")
|
||||
|
||||
# SCHEME_MAIN UNPACK ==========================
|
||||
schm <- scheme_R6$new(FILE_SCHEME)
|
||||
object.size(schm)
|
||||
schm$get_key_id("main")
|
||||
schm$get_forms_ids("main")
|
||||
schm$get_all_ids("main")
|
||||
schm <- readRDS("scheme.rds")
|
||||
nav_panels_list <- schm$get_main_form_ui
|
||||
|
||||
schm$get_schema("main")
|
||||
# two_obj <- purrr::map(
|
||||
# c(one = "configs/schemas/schema.xlsx", two = "configs/schemas/schema_example.xlsx"),
|
||||
# scheme_R6$new
|
||||
# )
|
||||
# two_obj[["a"]]$get_schema("main")
|
||||
# object.size(two_obj)
|
||||
# saveRDS(schm, "test.rds")
|
||||
# readRDS("test.rds")
|
||||
|
||||
schm$get_id_type_list("allergo_anamnesis")
|
||||
# check tables
|
||||
|
||||
# active
|
||||
schm$get_main_key_id
|
||||
schm$all_tables_names
|
||||
# ----------------------------
|
||||
|
||||
# establish connection
|
||||
con <- db$make_db_connection()
|
||||
|
||||
# init DB (write dummy data to "main" table)
|
||||
# db$check_if_table_is_exist_and_init_if_not("main", main_id_and_types_list)
|
||||
db$check_if_table_is_exist_and_init_if_not(schm, con)
|
||||
|
||||
# close connection to prevent data loss
|
||||
db$close_db_connection(con)
|
||||
|
||||
# generate nav panels for each page
|
||||
nav_panels_list <- purrr::map(
|
||||
.x = unique(schm$get_schema("main")$part),
|
||||
.f = \(page_name) {
|
||||
|
||||
# отделить схему для каждой страницы
|
||||
this_page_panels_scheme <- schm$get_schema("main") |>
|
||||
dplyr::filter(!form_id %in% schm$get_main_key_id) |>
|
||||
dplyr::filter(part == {{page_name}})
|
||||
|
||||
this_page_panels <- utils$make_panels(this_page_panels_scheme)
|
||||
|
||||
# add panel wrap to nav_panel
|
||||
bslib::nav_panel(
|
||||
title = page_name,
|
||||
this_page_panels
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
# UI =======================
|
||||
ui <- page_sidebar(
|
||||
@@ -153,10 +124,13 @@ server <- function(input, output, session) {
|
||||
NULL
|
||||
}
|
||||
|
||||
# важные кнопки управления
|
||||
output$admin_buttons_panel <- renderUI({
|
||||
|
||||
# показывать важные кнопки управления по умолчанию
|
||||
showing_buttons <- TRUE
|
||||
|
||||
# если включена авторизация, то демонстрация только для админов
|
||||
if (AUTH_ENABLED) {
|
||||
reactiveValuesToList(res_auth)
|
||||
if (res_auth$admin) {
|
||||
|
||||
Reference in New Issue
Block a user