-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathSignUpResource.java
More file actions
56 lines (45 loc) · 1.98 KB
/
SignUpResource.java
File metadata and controls
56 lines (45 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package dev.matheuscruz.presentation;
import dev.matheuscruz.domain.User;
import dev.matheuscruz.domain.UserRepository;
import dev.matheuscruz.infra.security.AESAdapter;
import dev.matheuscruz.infra.security.BCryptAdapter;
import dev.matheuscruz.presentation.data.ProblemResponse;
import io.quarkus.logging.Log;
import io.quarkus.narayana.jta.QuarkusTransaction;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.core.Response;
@Path("/api/sign-up")
public class SignUpResource {
UserRepository userRepository;
AESAdapter aesAdapter;
public SignUpResource(UserRepository userRepository, AESAdapter aesAdapter) {
this.userRepository = userRepository;
this.aesAdapter = aesAdapter;
}
@POST
public Response signUp(@Valid SignUpRequest req) {
Log.info("congratulations! we are creating a new user");
boolean exists = this.userRepository.existsByEmail(req.email());
if (exists) {
return Response.status(Response.Status.CONFLICT)
.entity(new ProblemResponse("Este nome de usuário já foi usado. Tente outro.")).build();
}
User user = User.create(req.email(), BCryptAdapter.encrypt(req.password()), req.firstName(), req.lastName(),
req.phoneNumber());
QuarkusTransaction.requiringNew().run(() -> {
this.userRepository.persist(user);
});
return Response.status(Response.Status.CREATED).entity(new SignUpResponse(user.getId(), user.getEmail()))
.build();
}
public record SignUpRequest(@NotBlank @Email String email, @NotBlank @Size(min = 8, max = 32) String password,
@NotBlank String firstName, @NotBlank String lastName, @NotBlank String phoneNumber) {
}
public record SignUpResponse(String id, String email) {
}
}