wip: currently rewriting the project as a full stack application tangled.org/kacaii.dev/sigo
gleam
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

:sparkles: implement route to list members of a brigade

Kacaii 4c9fc169 57c80dd3

+58 -3
+4 -3
README.md
··· 6 6 7 7 ## Routes 8 8 9 - | Route | Description | Expected | 10 - | ---------- | --------------------------- | -------- | 11 - | /cadastrar | Register a new user account | Form | 9 + | Route | Description | Expected | 10 + | ------------------- | --------------------------- | ----------- | 11 + | /cadastrar | Register a new user account | POST (Form) | 12 + | /listar_membros/:id | List brigade members | GET | 12 13 13 14 ## Entity RelationShip Diagram 14 15
+1
gleam.toml
··· 24 24 formal = ">= 3.0.0 and < 4.0.0" 25 25 envoy = ">= 1.0.2 and < 2.0.0" 26 26 gleam_http = ">= 4.1.1 and < 5.0.0" 27 + youid = ">= 1.5.1 and < 2.0.0" 27 28 28 29 [dev-dependencies] 29 30 gleeunit = ">= 1.0.0 and < 2.0.0"
+1
manifest.toml
··· 63 63 pog = { version = ">= 4.1.0 and < 5.0.0" } 64 64 squirrel = { version = ">= 4.4.1 and < 5.0.0" } 65 65 wisp = { version = ">= 2.0.0 and < 3.0.0" } 66 + youid = { version = ">= 1.5.1 and < 2.0.0" }
+48
src/app/handler/brigade.gleam
··· 1 + import app/sql 2 + import app/web.{type Context} 3 + import gleam/http 4 + import gleam/json 5 + import gleam/list 6 + import wisp 7 + import youid/uuid 8 + 9 + pub fn get_brigade_members( 10 + req: wisp.Request, 11 + ctx: Context, 12 + brigade_id: String, 13 + ) -> wisp.Response { 14 + use <- wisp.require_method(req, http.Get) 15 + let brigade_id_result = uuid.from_string(brigade_id) 16 + 17 + case brigade_id_result { 18 + Error(_) -> wisp.bad_request("ID de brigada inválido") 19 + Ok(brigade_id) -> { 20 + let brigade_members_result = sql.get_brigade_members(ctx.conn, brigade_id) 21 + 22 + case brigade_members_result { 23 + Ok(returned) -> { 24 + let brigade_members_rows = returned.rows 25 + let json_list = { 26 + use row <- list.map(brigade_members_rows) 27 + get_brigade_members_row_to_json(row) 28 + } 29 + 30 + let response = json.preprocessed_array(json_list) |> json.to_string() 31 + wisp.json_response(response, 200) 32 + } 33 + Error(_) -> wisp.no_content() 34 + } 35 + } 36 + } 37 + } 38 + 39 + fn get_brigade_members_row_to_json( 40 + get_brigade_members_row: sql.GetBrigadeMembersRow, 41 + ) -> json.Json { 42 + let sql.GetBrigadeMembersRow(full_name:, registration:) = 43 + get_brigade_members_row 44 + json.object([ 45 + #("full_name", json.string(full_name)), 46 + #("registration", json.string(registration)), 47 + ]) 48 + }
+3
src/app/router.gleam
··· 1 + import app/handler/brigade 1 2 import app/handler/signup 2 3 import app/web.{type Context} 3 4 import wisp ··· 9 10 case wisp.path_segments(req) { 10 11 [] -> wisp.ok() 11 12 ["cadastrar"] -> signup.handle_form_submission(req, ctx) 13 + ["listar_membros", brigade_id] -> 14 + brigade.get_brigade_members(req, ctx, brigade_id) 12 15 _ -> wisp.not_found() 13 16 } 14 17 }
+1
src/app/sql.gleam
··· 5 5 //// 6 6 7 7 import gleam/dynamic/decode 8 + import gleam/json 8 9 import pog 9 10 import youid/uuid.{type Uuid} 10 11