tangled
alpha
login
or
join now
kacaii.dev
/
sigo
0
fork
atom
๐ฉโ๐ Firefighters API written in Gleam!
lustre
gleam
0
fork
atom
overview
issues
pulls
pipelines
:construction: handle duplicated email and phone fields
kacaii.dev
1 week ago
a7d8a600
dd807fac
verified
This commit was signed with the committer's
known signature
.
kacaii.dev
SSH Key Fingerprint:
SHA256:n9v7QGNWHCUv1x/483hCtPUvTsVabU5PzC5CSJMUNtI=
+42
-8
2 changed files
expand all
collapse all
unified
split
client
src
client
page
signup.gleam
server
src
server
user.gleam
+5
-5
client/src/client/page/signup.gleam
···
119
#(Model(..model, loading: True), effect)
120
}
121
122
-
ServerSentResponse(Ok(user)) -> {
123
-
let text_message = user.full_name <> " registrado(a)"
124
-
#(Model(..empty, loading: False, text_message:), effect.none())
125
-
}
126
127
ServerSentResponse(Error(reason)) -> {
128
let text_message = case reason {
129
rsvp.HttpError(resp) -> resp.body
130
rsvp.NetworkError -> "Connection not available"
131
-
_ -> "An error occurred"
132
}
133
134
#(Model(..model, loading: False, text_message:), effect.none())
···
119
#(Model(..model, loading: True), effect)
120
}
121
122
+
ServerSentResponse(Ok(_)) -> #(
123
+
Model(..empty, loading: False, text_message: ""),
124
+
effect.none(),
125
+
)
126
127
ServerSentResponse(Error(reason)) -> {
128
let text_message = case reason {
129
rsvp.HttpError(resp) -> resp.body
130
rsvp.NetworkError -> "Connection not available"
131
+
_ -> "Failed to register user"
132
}
133
134
#(Model(..model, loading: False, text_message:), effect.none())
+37
-3
server/src/server/user.gleam
···
12
pub type UserError {
13
Database(pog.QueryError)
14
NotFound
0
0
15
}
16
17
/// Query an user by Uuid
···
48
let role_enum = role_to_enum(role)
49
50
use returned <- result.try(
51
-
sql.register(ctx.db, full_name, role_enum, hashed, email, phone, is_active)
52
-
|> result.map_error(Database),
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
53
)
54
55
use row <- result.map(
···
68
69
pub fn handle_error(err: UserError) -> wisp.Response {
70
case err {
0
0
0
71
Database(_) -> wisp.internal_server_error()
0
72
NotFound ->
73
-
"User not found"
74
|> wisp.Text
75
|> wisp.set_body(wisp.response(404), _)
0
0
0
0
0
0
0
0
0
0
76
}
77
}
78
···
12
pub type UserError {
13
Database(pog.QueryError)
14
NotFound
15
+
PhoneAlreadytaken
16
+
EmailAlreadyTaken
17
}
18
19
/// Query an user by Uuid
···
50
let role_enum = role_to_enum(role)
51
52
use returned <- result.try(
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
+
},
73
)
74
75
use row <- result.map(
···
88
89
pub fn handle_error(err: UserError) -> wisp.Response {
90
case err {
91
+
Database(pog.QueryTimeout) | Database(pog.ConnectionUnavailable) ->
92
+
wisp.response(403)
93
+
94
Database(_) -> wisp.internal_server_error()
95
+
96
NotFound ->
97
+
"User not found in the system"
98
|> wisp.Text
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), _)
110
}
111
}
112