signup bast

This commit is contained in:
Jonas Weissengruber 2023-12-18 08:50:32 +01:00
parent baa24b4b86
commit ddaad2f2de
9 changed files with 60 additions and 13 deletions

View file

@ -0,0 +1,5 @@
{
"dev": {
"url": "http://localhost:8080/api/v1"
}
}

View file

@ -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"
}
###

View file

@ -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<SignupResponseDto> signUp(@RequestBody UserRequestDto user) {
// TODO
return new ResponseEntity<>(null, HttpStatus.OK);
public ResponseEntity<SignupResponseDto> signUp(@RequestBody SignupRequestDto user) {
return new ResponseEntity<>(userService.create(user), HttpStatus.CREATED);
}
@PostMapping("/signin")

View file

@ -0,0 +1,4 @@
package me.jweissen.aeticket.dto.request;
public record SignupRequestDto(String email, String password, String firstname, String lastname) {
}

View file

@ -1,4 +0,0 @@
package me.jweissen.aeticket.dto.request;
public record UserRequestDto(String email, String password, String firstname, String lastname) {
}

View file

@ -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)

View file

@ -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);

View file

@ -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<UserResponseDto> toDtos(List<User> 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);
}

View file

@ -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