import app import app/web/context.{type Context, Context} import argv import dummy import envoy import gleam/erlang/process import gleam/int import gleam/io import gleam/list import gleam_community/ansi import pog /// Number of generated user accounts const n_user_accounts = 450 /// Number of generated brigades const n_brigades = 30 /// Number of generated brigades const n_occurences = 200 pub fn main() -> Nil { use ctx <- setup_context() case argv.load().arguments { ["admin"] -> app.setup_admin(ctx) ["dummy"] -> dummy_data(ctx) _ -> Nil } } fn dummy_data(ctx: Context) { io.println(ansi.green(" ") <> " Inserindo usuários..") let dummy_users = list.map(list.range(1, n_user_accounts), fn(_) { dummy.random_user(ctx.db) }) // BRIGADES ------------------------------------------------------------------ io.println(ansi.green(" ") <> " Formando equipes..") let assigned_members = list.shuffle(dummy_users) |> list.sized_chunk(n_user_accounts / n_brigades) let dummy_brigades = list.map(assigned_members, fn(team) { let assert Ok(leader) = list.first(team) dummy.random_brigade(ctx.db, leader, team) }) let assigned_brigades = list.shuffle(dummy_brigades) |> list.sized_chunk(n_occurences / n_brigades) io.println(ansi.green(" ") <> "󱐁 Registrando ocorrências..") let dummy_occurrences = list.map(list.range(1, n_occurences), fn(_) { let assert Ok(applicant_id) = list.first(list.sample(dummy_users, 1)) let assert Ok(assign) = list.first(list.sample(assigned_brigades, 1)) dummy.random_occurrence(conn: ctx.db, applicant_id:, assign:) }) list.each(dummy_occurrences, fn(occ) { case int.random(2) { 0 -> dummy.update_occurrence_status(occ, ctx, False) 1 -> dummy.update_occurrence_status(occ, ctx, True) _ -> panic as "how?" } }) // ALL DONE ------------------------------------------------------------------ let n_created_brigades_str = dummy_brigades |> list.length |> int.to_string |> ansi.green let n_created_users_str = dummy_users |> list.length |> int.to_string |> ansi.green let n_created_occ_str = dummy_occurrences |> list.length |> int.to_string |> ansi.green io.println(ansi.green(" ") <> " Prontinho!") io.println("Total de " <> n_created_users_str <> " usuários criados") io.println("Total de " <> n_created_brigades_str <> " equipes criadas") io.println("Total de " <> n_created_occ_str <> " ocorrências criadas") } fn setup_context(next: fn(Context) -> a) -> a { let db_process_name = process.new_name("db_conn") let registry_name = process.new_name("registry") let env = context.Dev let assert Ok(config) = app.read_connection_url(db_process_name, env) let assert Ok(secret_key_base) = envoy.get("COOKIE_TOKEN") let db = pog.named_connection(db_process_name) let assert Ok(_) = pog.start(config) let static_directory = app.static_directory() next(Context(static_directory:, db:, registry_name:, secret_key_base:, env:)) }