๐Ÿ‘ฉโ€๐Ÿš’ Firefighters API written in Gleam!
lustre gleam

:construction: handle duplicated email and phone fields

kacaii.dev a7d8a600 dd807fac

verified
+42 -8
+5 -5
client/src/client/page/signup.gleam
··· 119 119 #(Model(..model, loading: True), effect) 120 120 } 121 121 122 - ServerSentResponse(Ok(user)) -> { 123 - let text_message = user.full_name <> " registrado(a)" 124 - #(Model(..empty, loading: False, text_message:), effect.none()) 125 - } 122 + ServerSentResponse(Ok(_)) -> #( 123 + Model(..empty, loading: False, text_message: ""), 124 + effect.none(), 125 + ) 126 126 127 127 ServerSentResponse(Error(reason)) -> { 128 128 let text_message = case reason { 129 129 rsvp.HttpError(resp) -> resp.body 130 130 rsvp.NetworkError -> "Connection not available" 131 - _ -> "An error occurred" 131 + _ -> "Failed to register user" 132 132 } 133 133 134 134 #(Model(..model, loading: False, text_message:), effect.none())
+37 -3
server/src/server/user.gleam
··· 12 12 pub type UserError { 13 13 Database(pog.QueryError) 14 14 NotFound 15 + PhoneAlreadytaken 16 + EmailAlreadyTaken 15 17 } 16 18 17 19 /// Query an user by Uuid ··· 48 50 let role_enum = role_to_enum(role) 49 51 50 52 use returned <- result.try( 51 - sql.register(ctx.db, full_name, role_enum, hashed, email, phone, is_active) 52 - |> result.map_error(Database), 53 + case 54 + sql.register( 55 + ctx.db, 56 + full_name, 57 + role_enum, 58 + hashed, 59 + email, 60 + phone, 61 + is_active, 62 + ) 63 + { 64 + Error(pog.ConstraintViolated(constraint: "user_account_phone_key", ..)) -> 65 + Error(PhoneAlreadytaken) 66 + 67 + Error(pog.ConstraintViolated(constraint: "user_account_email_key", ..)) -> 68 + Error(EmailAlreadyTaken) 69 + 70 + Ok(value) -> Ok(value) 71 + Error(err) -> Error(Database(err)) 72 + }, 53 73 ) 54 74 55 75 use row <- result.map( ··· 68 88 69 89 pub fn handle_error(err: UserError) -> wisp.Response { 70 90 case err { 91 + Database(pog.QueryTimeout) | Database(pog.ConnectionUnavailable) -> 92 + wisp.response(403) 93 + 71 94 Database(_) -> wisp.internal_server_error() 95 + 72 96 NotFound -> 73 - "User not found" 97 + "User not found in the system" 74 98 |> wisp.Text 75 99 |> wisp.set_body(wisp.response(404), _) 100 + 101 + PhoneAlreadytaken -> 102 + "Phone number is already taken" 103 + |> wisp.Text 104 + |> wisp.set_body(wisp.response(409), _) 105 + 106 + EmailAlreadyTaken -> 107 + "Email is already taken" 108 + |> wisp.Text 109 + |> wisp.set_body(wisp.response(409), _) 76 110 } 77 111 } 78 112