From ddaad2f2ded2be56831599cb84f1d13abb4808a9 Mon Sep 17 00:00:00 2001 From: Jonas Weissengruber Date: Mon, 18 Dec 2023 08:50:32 +0100 Subject: [PATCH] signup bast --- http-requests/http-client.env.json | 5 +++++ http-requests/requests.http | 12 ++++++++++ .../aeticket/controller/UserController.java | 7 +++--- .../dto/request/SignupRequestDto.java | 4 ++++ .../aeticket/dto/request/UserRequestDto.java | 4 ---- .../java/me/jweissen/aeticket/model/User.java | 7 +++--- .../jweissen/aeticket/service/JwtService.java | 2 +- .../aeticket/service/UserService.java | 22 +++++++++++++++++++ src/main/resources/application.yml | 10 +++++++++ 9 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 http-requests/http-client.env.json create mode 100644 http-requests/requests.http create mode 100644 src/main/java/me/jweissen/aeticket/dto/request/SignupRequestDto.java delete mode 100644 src/main/java/me/jweissen/aeticket/dto/request/UserRequestDto.java diff --git a/http-requests/http-client.env.json b/http-requests/http-client.env.json new file mode 100644 index 0000000..9dd49de --- /dev/null +++ b/http-requests/http-client.env.json @@ -0,0 +1,5 @@ +{ + "dev": { + "url": "http://localhost:8080/api/v1" + } +} \ No newline at end of file diff --git a/http-requests/requests.http b/http-requests/requests.http new file mode 100644 index 0000000..7def0d1 --- /dev/null +++ b/http-requests/requests.http @@ -0,0 +1,12 @@ +### signup +POST {{url}}/user/signup +Content-Type: application/json + +{ + "email": "ratp@htl-steyr.ac.at", + "password": "test", + "firstname": "Peter", + "lastname": "Rathgeb" +} + +### \ No newline at end of file diff --git a/src/main/java/me/jweissen/aeticket/controller/UserController.java b/src/main/java/me/jweissen/aeticket/controller/UserController.java index 39d08cb..0eab28b 100644 --- a/src/main/java/me/jweissen/aeticket/controller/UserController.java +++ b/src/main/java/me/jweissen/aeticket/controller/UserController.java @@ -1,7 +1,7 @@ package me.jweissen.aeticket.controller; import me.jweissen.aeticket.dto.request.LoginRequestDto; -import me.jweissen.aeticket.dto.request.UserRequestDto; +import me.jweissen.aeticket.dto.request.SignupRequestDto; import me.jweissen.aeticket.dto.request.UserUpdateRequestDto; import me.jweissen.aeticket.dto.response.SignupResponseDto; import me.jweissen.aeticket.dto.response.UserResponseDto; @@ -22,9 +22,8 @@ public class UserController { } @PostMapping("/signup") - public ResponseEntity signUp(@RequestBody UserRequestDto user) { - // TODO - return new ResponseEntity<>(null, HttpStatus.OK); + public ResponseEntity signUp(@RequestBody SignupRequestDto user) { + return new ResponseEntity<>(userService.create(user), HttpStatus.CREATED); } @PostMapping("/signin") diff --git a/src/main/java/me/jweissen/aeticket/dto/request/SignupRequestDto.java b/src/main/java/me/jweissen/aeticket/dto/request/SignupRequestDto.java new file mode 100644 index 0000000..3991a1e --- /dev/null +++ b/src/main/java/me/jweissen/aeticket/dto/request/SignupRequestDto.java @@ -0,0 +1,4 @@ +package me.jweissen.aeticket.dto.request; + +public record SignupRequestDto(String email, String password, String firstname, String lastname) { +} diff --git a/src/main/java/me/jweissen/aeticket/dto/request/UserRequestDto.java b/src/main/java/me/jweissen/aeticket/dto/request/UserRequestDto.java deleted file mode 100644 index dee114f..0000000 --- a/src/main/java/me/jweissen/aeticket/dto/request/UserRequestDto.java +++ /dev/null @@ -1,4 +0,0 @@ -package me.jweissen.aeticket.dto.request; - -public record UserRequestDto(String email, String password, String firstname, String lastname) { -} diff --git a/src/main/java/me/jweissen/aeticket/model/User.java b/src/main/java/me/jweissen/aeticket/model/User.java index 3a319a1..6c41e4c 100644 --- a/src/main/java/me/jweissen/aeticket/model/User.java +++ b/src/main/java/me/jweissen/aeticket/model/User.java @@ -1,14 +1,14 @@ package me.jweissen.aeticket.model; import jakarta.persistence.*; -import lombok.Getter; -import lombok.NonNull; -import lombok.Setter; +import lombok.*; import java.util.List; @Entity @Table +@RequiredArgsConstructor +@NoArgsConstructor @Getter @Setter public class User { @@ -33,7 +33,6 @@ public class User { private String password; @Column - @NonNull private String token; @Column(nullable = false) diff --git a/src/main/java/me/jweissen/aeticket/service/JwtService.java b/src/main/java/me/jweissen/aeticket/service/JwtService.java index daab216..076b8e7 100644 --- a/src/main/java/me/jweissen/aeticket/service/JwtService.java +++ b/src/main/java/me/jweissen/aeticket/service/JwtService.java @@ -28,7 +28,7 @@ public class JwtService { public String generateToken(Long userId) { return JWT.create() .withSubject("aeticket user token") - .withClaim(userIdClaimKey , userId) + .withClaim(userIdClaimKey, userId) .withIssuedAt(new Date()) .withExpiresAt(new Date(System.currentTimeMillis() + tokenValidForMillis)) .sign(algorithm); diff --git a/src/main/java/me/jweissen/aeticket/service/UserService.java b/src/main/java/me/jweissen/aeticket/service/UserService.java index 7da5f4d..ee101e3 100644 --- a/src/main/java/me/jweissen/aeticket/service/UserService.java +++ b/src/main/java/me/jweissen/aeticket/service/UserService.java @@ -1,11 +1,15 @@ package me.jweissen.aeticket.service; +import me.jweissen.aeticket.dto.request.SignupRequestDto; +import me.jweissen.aeticket.dto.response.SignupResponseDto; import me.jweissen.aeticket.dto.response.UserResponseDto; +import me.jweissen.aeticket.model.Role; import me.jweissen.aeticket.model.User; import me.jweissen.aeticket.repository.UserRepository; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; @Service public class UserService { @@ -26,6 +30,16 @@ public class UserService { ); } + public static User fromDto(SignupRequestDto dto) { + return new User( + dto.firstname(), + dto.lastname(), + dto.email(), + dto.password(), + Role.USER + ); + } + public static List toDtos(List users) { return users.stream().map(UserService::toDto).toList(); } @@ -34,6 +48,14 @@ public class UserService { return UserService.toDtos(userRepository.findAll()); } + public SignupResponseDto create(SignupRequestDto dto) { + var user = UserService.fromDto(dto); + user = userRepository.save(user); + user.setToken(jwtService.generateToken(user.getId())); + userRepository.save(user); + return new SignupResponseDto(user.getToken()); + } + public void delete(Integer id) { userRepository.deleteById(id); } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 09a8c35..511a323 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,8 +1,18 @@ spring: + jpa: + hibernate: + ddl-auto: update + properties: + hibernate: + enable_lazy_load_no_trans: true + show-sql: true datasource: username: my password: ticket url: 'jdbc:mysql://localhost:4306/myticket' +server: + servlet: + context-path: '/api/v1' token: secret: "RATP loves Laravel more than Symfony" validForHours: 24 \ No newline at end of file