···2233import app/routes/role
44import app/routes/user/sql
55+import app/web
56import app/web/context.{type Context}
67import gleam/http
78import gleam/json
···4546) -> wisp.Response {
4647 use <- wisp.require_method(req, http.Get)
47484848- let query_result = query_crew_members(ctx:, user_id:)
4949-5050- case query_result {
5151- Ok(fellow_members_list) ->
5252- wisp.json_response(json.to_string(fellow_members_list), 200)
5353-4949+ case try_query_database(ctx:, user_id:) {
5050+ Ok(body) -> wisp.json_response(body, 200)
5451 Error(err) -> handle_err(err)
5552 }
5653}
57545858-fn query_crew_members(ctx ctx: Context, user_id user_id: String) {
5555+fn try_query_database(
5656+ ctx ctx: Context,
5757+ user_id user_id: String,
5858+) -> Result(String, GetCrewMembersError) {
5959 use user_uuid <- result.try(
6060 uuid.from_string(user_id)
6161 |> result.replace_error(InvalidUUID(user_id)),
6262 )
6363+6364 use returned <- result.try(
6465 sql.query_crew_members(ctx.db, user_uuid)
6565- |> result.map_error(DataBaseError),
6666+ |> result.map_error(DataBase),
6667 )
6868+6769 let fellow_members_list = {
6870 use fellow_brigade_member <- list.map(returned.rows)
6971 get_crew_members_row_to_json(fellow_brigade_member)
7072 }
71737272- Ok(json.preprocessed_array(fellow_members_list))
7474+ json.preprocessed_array(fellow_members_list)
7575+ |> json.to_string
7676+ |> Ok
7377}
74787579fn get_crew_members_row_to_json(row: sql.QueryCrewMembersRow) -> json.Json {
7680 let role_name =
7777- row.user_role
7878- |> enum_to_role()
7979- |> role.to_string_pt_br()
8181+ role.to_string_pt_br(case row.user_role {
8282+ sql.Admin -> role.Admin
8383+ sql.Analyst -> role.Analyst
8484+ sql.Captain -> role.Captain
8585+ sql.Developer -> role.Developer
8686+ sql.Firefighter -> role.Firefighter
8787+ sql.Sargeant -> role.Sargeant
8888+ })
80898190 json.object([
8291 #("id", json.string(uuid.to_string(row.id))),
···8695 ])
8796}
88978989-fn enum_to_role(user_role: sql.UserRoleEnum) -> role.Role {
9090- case user_role {
9191- sql.Admin -> role.Admin
9292- sql.Analyst -> role.Analyst
9393- sql.Captain -> role.Captain
9494- sql.Developer -> role.Developer
9595- sql.Firefighter -> role.Firefighter
9696- sql.Sargeant -> role.Sargeant
9797- }
9898-}
9999-100100-fn handle_err(err: GetFellowBrigadeMembersError) {
101101- let error_message = case err {
102102- InvalidUUID(user_id) -> "ID de usuário inválido: " <> user_id
103103- DataBaseError(db_err) -> {
104104- case db_err {
105105- pog.ConnectionUnavailable ->
106106- "Conexão com o Banco de Dados não disponível"
107107- pog.QueryTimeout -> "O Banco de Dados demorou muito para responder"
108108- _ -> "Ocorreu um erro ao realizar a consulta no Banco de Dados"
109109- }
110110- }
9898+fn handle_err(err: GetCrewMembersError) {
9999+ case err {
100100+ InvalidUUID(id) -> wisp.bad_request("ID de usuário inválido: " <> id)
101101+ DataBase(err) -> web.handle_database_error(err)
111102 }
112112-113113- wisp.internal_server_error()
114114- |> wisp.set_body(wisp.Text(error_message))
115103}
116104117117-type GetFellowBrigadeMembersError {
118118- DataBaseError(pog.QueryError)
105105+/// Finding the user's crew can fail
106106+type GetCrewMembersError {
107107+ /// User has invalid Uuid fornmat
119108 InvalidUUID(String)
109109+ /// An error occurred while accessing the DataBase
110110+ DataBase(pog.QueryError)
120111}
+4
src/app/routes/user/update_user_profile.gleam
···119119 }
120120}
121121122122+/// Updating an user profile can fail
122123type UpdateProfileError {
124124+ /// Authentication failed
123125 AccessError(user.AuthenticationError)
126126+ /// An error occurred when accessing the DataBase
124127 DatabaseError(pog.QueryError)
128128+ /// User was not found in the DataBase
125129 UserNotFound(uuid.Uuid)
126130}
127131