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
119
#(Model(..model, loading: True), effect)
120
120
}
121
121
122
122
-
ServerSentResponse(Ok(user)) -> {
123
123
-
let text_message = user.full_name <> " registrado(a)"
124
124
-
#(Model(..empty, loading: False, text_message:), effect.none())
125
125
-
}
122
122
+
ServerSentResponse(Ok(_)) -> #(
123
123
+
Model(..empty, loading: False, text_message: ""),
124
124
+
effect.none(),
125
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
131
-
_ -> "An error occurred"
131
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
15
+
PhoneAlreadytaken
16
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
51
-
sql.register(ctx.db, full_name, role_enum, hashed, email, phone, is_active)
52
52
-
|> result.map_error(Database),
53
53
+
case
54
54
+
sql.register(
55
55
+
ctx.db,
56
56
+
full_name,
57
57
+
role_enum,
58
58
+
hashed,
59
59
+
email,
60
60
+
phone,
61
61
+
is_active,
62
62
+
)
63
63
+
{
64
64
+
Error(pog.ConstraintViolated(constraint: "user_account_phone_key", ..)) ->
65
65
+
Error(PhoneAlreadytaken)
66
66
+
67
67
+
Error(pog.ConstraintViolated(constraint: "user_account_email_key", ..)) ->
68
68
+
Error(EmailAlreadyTaken)
69
69
+
70
70
+
Ok(value) -> Ok(value)
71
71
+
Error(err) -> Error(Database(err))
72
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
91
+
Database(pog.QueryTimeout) | Database(pog.ConnectionUnavailable) ->
92
92
+
wisp.response(403)
93
93
+
71
94
Database(_) -> wisp.internal_server_error()
95
95
+
72
96
NotFound ->
73
73
-
"User not found"
97
97
+
"User not found in the system"
74
98
|> wisp.Text
75
99
|> wisp.set_body(wisp.response(404), _)
100
100
+
101
101
+
PhoneAlreadytaken ->
102
102
+
"Phone number is already taken"
103
103
+
|> wisp.Text
104
104
+
|> wisp.set_body(wisp.response(409), _)
105
105
+
106
106
+
EmailAlreadyTaken ->
107
107
+
"Email is already taken"
108
108
+
|> wisp.Text
109
109
+
|> wisp.set_body(wisp.response(409), _)
76
110
}
77
111
}
78
112