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.

:safety_vest: pattern match on dashboard database errors

Kacaii b02d7960 df120862

+25 -17
+6 -5
justfile
··· 38 38 [group(' postgres')] 39 39 [group(' ship')] 40 40 @rebuild_empty: 41 - @psql senac_brigade -f priv/sql/drop.sql 42 - @psql senac_brigade -f priv/sql/create/tables.sql 43 - @psql senac_brigade -f priv/sql/create/triggers.sql 44 - @psql senac_brigade -f priv/sql/create/functions.sql 45 - @psql senac_brigade -f priv/sql/create/views.sql 41 + just clear_log_file 42 + psql senac_brigade -f priv/sql/drop.sql 43 + psql senac_brigade -f priv/sql/create/tables.sql 44 + psql senac_brigade -f priv/sql/create/triggers.sql 45 + psql senac_brigade -f priv/sql/create/functions.sql 46 + psql senac_brigade -f priv/sql/create/views.sql 46 47 47 48 # 󰜉 Rebuild the database with values in it 48 49 [group(' postgres')]
+2 -2
src/app/routes/brigade/get_brigade_members.gleam
··· 16 16 /// Retrieves all members of a specific fire brigade from the database 17 17 /// and returns them as formatted JSON data. 18 18 pub fn handle_request( 19 - request req: wisp.Request, 19 + request request: wisp.Request, 20 20 ctx ctx: Context, 21 21 id brigade_id: String, 22 22 ) -> wisp.Response { 23 - use <- wisp.require_method(req, http.Get) 23 + use <- wisp.require_method(request, http.Get) 24 24 25 25 let members_list_result = { 26 26 use brigade_id <- result.try(
+16 -8
src/app/routes/dashboard.gleam
··· 4 4 import gleam/json 5 5 import gleam/list 6 6 import gleam/result 7 + import pog 7 8 import wisp 8 9 9 10 // TODO: Docs ··· 16 17 let query_result = { 17 18 use returned <- result.try( 18 19 sql.get_dashboard_stats(ctx.conn) 19 - |> result.replace_error(DatabaseError), 20 + |> result.map_error(DatabaseError), 20 21 ) 21 22 use row <- result.try( 22 23 list.first(returned.rows) ··· 30 31 Ok(value) -> wisp.json_response(json.to_string(value), 200) 31 32 Error(err) -> { 32 33 case err { 33 - DatabaseError -> 34 - wisp.internal_server_error() 35 - |> wisp.set_body(wisp.Text( 36 - "Ocorreu um erro ao acessar o Banco de Dados", 37 - )) 38 - DatabaseReturnedEmptyRow -> 34 + DatabaseReturnedEmptyRow -> { 39 35 wisp.internal_server_error() 40 36 |> wisp.set_body(wisp.Text("O Banco de dados não retornou resultados")) 37 + } 38 + DatabaseError(err) -> { 39 + let err_message = case err { 40 + pog.ConnectionUnavailable -> 41 + "Conexão com o Banco de Dados não disponível" 42 + pog.QueryTimeout -> "O Banco de Dados demorou muito para responder" 43 + _ -> "Ocorreu um erro ao acessar o Banco de Dados" 44 + } 45 + 46 + wisp.internal_server_error() 47 + |> wisp.set_body(wisp.Text(err_message)) 48 + } 41 49 } 42 50 } 43 51 } ··· 62 70 63 71 pub type GetDashboardStatsError { 64 72 DatabaseReturnedEmptyRow 65 - DatabaseError 73 + DatabaseError(pog.QueryError) 66 74 }
+1 -2
src/app/routes/user/login.gleam
··· 68 68 //  401 Not Authorized 69 69 wisp.response(401) |> wisp.set_body(wisp.Text("Senha incorreta")) 70 70 DataBaseReturnedEmptyRow -> 71 - //  403 Forbitten 72 - wisp.response(403) 71 + wisp.response(401) 73 72 |> wisp.set_body(wisp.Text("Usuário não cadastrado")) 74 73 75 74 //  Server errors ------------------------------------------------