wip: currently rewriting the project as a full stack application
tangled.org/kacaii.dev/sigo
gleam
1import app
2import app/web/context.{type Context, Context}
3import argv
4import dummy
5import envoy
6import gleam/erlang/process
7import gleam/int
8import gleam/io
9import gleam/list
10import gleam_community/ansi
11import pog
12
13/// Number of generated user accounts
14const n_user_accounts = 450
15
16/// Number of generated brigades
17const n_brigades = 30
18
19/// Number of generated brigades
20const n_occurences = 200
21
22pub fn main() -> Nil {
23 use ctx <- setup_context()
24
25 case argv.load().arguments {
26 ["admin"] -> app.setup_admin(ctx)
27 ["dummy"] -> dummy_data(ctx)
28 _ -> Nil
29 }
30}
31
32fn dummy_data(ctx: Context) {
33 io.println(ansi.green(" ") <> " Inserindo usuários..")
34
35 let dummy_users =
36 list.map(list.range(1, n_user_accounts), fn(_) { dummy.random_user(ctx.db) })
37
38 // BRIGADES ------------------------------------------------------------------
39 io.println(ansi.green(" ") <> " Formando equipes..")
40
41 let assigned_members =
42 list.shuffle(dummy_users)
43 |> list.sized_chunk(n_user_accounts / n_brigades)
44
45 let dummy_brigades =
46 list.map(assigned_members, fn(team) {
47 let assert Ok(leader) = list.first(team)
48 dummy.random_brigade(ctx.db, leader, team)
49 })
50
51 let assigned_brigades =
52 list.shuffle(dummy_brigades)
53 |> list.sized_chunk(n_occurences / n_brigades)
54
55 io.println(ansi.green(" ") <> " Registrando ocorrências..")
56
57 let dummy_occurrences =
58 list.map(list.range(1, n_occurences), fn(_) {
59 let assert Ok(applicant_id) = list.first(list.sample(dummy_users, 1))
60 let assert Ok(assign) = list.first(list.sample(assigned_brigades, 1))
61 dummy.random_occurrence(conn: ctx.db, applicant_id:, assign:)
62 })
63
64 list.each(dummy_occurrences, fn(occ) {
65 case int.random(2) {
66 0 -> dummy.update_occurrence_status(occ, ctx, False)
67 1 -> dummy.update_occurrence_status(occ, ctx, True)
68 _ -> panic as "how?"
69 }
70 })
71
72 // ALL DONE ------------------------------------------------------------------
73 let n_created_brigades_str =
74 dummy_brigades
75 |> list.length
76 |> int.to_string
77 |> ansi.green
78
79 let n_created_users_str =
80 dummy_users
81 |> list.length
82 |> int.to_string
83 |> ansi.green
84
85 let n_created_occ_str =
86 dummy_occurrences
87 |> list.length
88 |> int.to_string
89 |> ansi.green
90
91 io.println(ansi.green(" ") <> " Prontinho!")
92 io.println("Total de " <> n_created_users_str <> " usuários criados")
93 io.println("Total de " <> n_created_brigades_str <> " equipes criadas")
94 io.println("Total de " <> n_created_occ_str <> " ocorrências criadas")
95}
96
97fn setup_context(next: fn(Context) -> a) -> a {
98 let db_process_name = process.new_name("db_conn")
99 let registry_name = process.new_name("registry")
100 let env = context.Dev
101
102 let assert Ok(config) = app.read_connection_url(db_process_name, env)
103 let assert Ok(secret_key_base) = envoy.get("COOKIE_TOKEN")
104
105 let db = pog.named_connection(db_process_name)
106 let assert Ok(_) = pog.start(config)
107
108 let static_directory = app.static_directory()
109 next(Context(static_directory:, db:, registry_name:, secret_key_base:, env:))
110}