Skip to content

Commit fbf4208

Browse files
authored
Merge pull request #39 from TP-RENTPLACE/feature/add-registration
Feature/add registration
2 parents beeaf49 + 68f7200 commit fbf4208

13 files changed

Lines changed: 149 additions & 14 deletions

File tree

rentplace/src/main/java/kattsyn/dev/rentplace/controllers/AuthController.java

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
@RestController
1515
@RequestMapping("${api.path}/auth")
1616
@RequiredArgsConstructor
17-
@Tag(name = "Аутентификация", description = "Для аутентификации, регистрации, обновлении и запроса токенов и отправки запросов кода на почту.")
17+
@Tag(name = "Authentication", description = "Для аутентификации, регистрации, обновлении и запроса токенов и отправки запросов кода на почту.")
1818
public class AuthController {
1919

2020
private final AuthService authService;
@@ -25,9 +25,8 @@ public class AuthController {
2525
summary = "Запросить код по почте",
2626
description = "Запрос на получение кода авторизации по почте"
2727
)
28-
public ResponseEntity<JwtResponse> login(@RequestBody CodeRequest codeRequest) {
29-
verificationCodeService.generateAndSendCode(codeRequest.getEmail());
30-
return ResponseEntity.ok().build();
28+
public ResponseEntity<CodeResponse> requestCode(@RequestBody CodeRequest codeRequest) {
29+
return ResponseEntity.ok(verificationCodeService.generateAndSendCode(codeRequest.getEmail()));
3130
}
3231

3332
@Operation(
@@ -68,6 +67,32 @@ public ResponseEntity<JwtResponse> login(@RequestBody JwtRequest authRequest/*,
6867
.body(tokens);
6968
}
7069

70+
@Operation(
71+
summary = "Запрос на регистрацию",
72+
description = "Получает email и код с почты, а также имя и фамилию пользователя. Возвращает JWT токены"
73+
)
74+
@PostMapping("/register")
75+
public ResponseEntity<JwtResponse> register(@RequestBody RegisterRequest registerRequest/*,
76+
HttpServletResponse response*/) throws AuthException {
77+
JwtResponse tokens = authService.register(registerRequest);
78+
79+
return ResponseEntity.ok()
80+
.body(tokens);
81+
}
82+
83+
@Operation(
84+
summary = "Проверка валидности введенного кода пользователем",
85+
description = "Проверяет правильность введенного кода, отправленного на почту. Использовать в случае, если пользователь новый."
86+
)
87+
@PostMapping("/validate-code")
88+
public ResponseEntity<Void> checkCode(@RequestBody JwtRequest authRequest/*,
89+
HttpServletResponse response*/) throws AuthException {
90+
authService.validateCode(authRequest);
91+
return ResponseEntity.ok().build();
92+
}
93+
94+
95+
7196
@Operation(
7297
summary = "Запрос на обновление AccessToken'а",
7398
description = "Получает RefreshToken, возвращает новый AccessToken"

rentplace/src/main/java/kattsyn/dev/rentplace/controllers/UserController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public ResponseEntity<UserDTO> createUser(@ModelAttribute @Valid UserCreateEditD
121121
@PreAuthorize("hasAuthority('ROLE_ADMIN') or hasAuthority('ROLE_USER')" )
122122
@SecurityRequirement(name = "JWT")
123123
@PatchMapping(path = "/{id}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
124-
public ResponseEntity<UserDTO> updateUser(
124+
public ResponseEntity<UserDTO> updateUserById(
125125
@PathVariable
126126
@Parameter(description = "id пользователя", example = "1") long id,
127127
@ModelAttribute @Valid UserCreateEditDTO userCreateEditDTO,
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package kattsyn.dev.rentplace.dtos;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import kattsyn.dev.rentplace.enums.AuthType;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Getter;
7+
import lombok.Setter;
8+
9+
@Setter
10+
@Getter
11+
@AllArgsConstructor
12+
public class CodeResponse {
13+
14+
@Schema(description = "Тип аутентификации. AUTH_LOGIN, если пользователь существует, иначе AUTH_REGISTER")
15+
private AuthType authType;
16+
17+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package kattsyn.dev.rentplace.dtos;
2+
3+
import io.swagger.v3.oas.annotations.media.Schema;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import lombok.Setter;
8+
9+
@AllArgsConstructor
10+
@NoArgsConstructor
11+
@Getter
12+
@Setter
13+
public class RegisterRequest {
14+
15+
@Schema(description = "Почта пользователя", example = "warshard1337@gmail.com")
16+
private String email;
17+
@Schema(description = "Код, который пользователь получил на почту", example = "12345")
18+
private String code;
19+
@Schema(description = "Имя нового пользователя")
20+
private String name;
21+
@Schema(description = "Фамилия нового пользователя")
22+
private String surname;
23+
24+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package kattsyn.dev.rentplace.enums;
2+
3+
public enum AuthType {
4+
5+
AUTH_LOGIN,
6+
AUTH_REGISTER
7+
8+
}

rentplace/src/main/java/kattsyn/dev/rentplace/mappers/UserMapper.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package kattsyn.dev.rentplace.mappers;
22

3+
import kattsyn.dev.rentplace.dtos.RegisterRequest;
34
import kattsyn.dev.rentplace.dtos.UserCreateEditDTO;
45
import kattsyn.dev.rentplace.dtos.UserDTO;
56
import kattsyn.dev.rentplace.entities.User;
@@ -13,6 +14,7 @@
1314
public interface UserMapper {
1415

1516

17+
User fromRegisterRequest(RegisterRequest registerRequest);
1618
User fromDTO(UserDTO userDTO);
1719
@Mapping(target = "imageDTO", source = "image")
1820
UserDTO fromUser(User user);

rentplace/src/main/java/kattsyn/dev/rentplace/repositories/UserRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@
88
public interface UserRepository extends JpaRepository<User, Long> {
99

1010
Optional<User> findByEmail(String email);
11+
boolean existsByEmail(String email);
1112

1213
}

rentplace/src/main/java/kattsyn/dev/rentplace/services/AuthService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
import kattsyn.dev.rentplace.auth.JwtAuthentication;
55
import kattsyn.dev.rentplace.dtos.JwtRequest;
66
import kattsyn.dev.rentplace.dtos.JwtResponse;
7+
import kattsyn.dev.rentplace.dtos.RegisterRequest;
78
import kattsyn.dev.rentplace.dtos.UserDTO;
89

910
public interface AuthService {
1011

1112
JwtResponse login(JwtRequest authRequest) throws AuthException;
1213

14+
JwtResponse register(RegisterRequest registerRequest) throws AuthException;
15+
1316
JwtResponse getAccessToken(String refreshToken);
1417

1518
JwtResponse refresh(String refreshToken) throws AuthException;
@@ -18,4 +21,5 @@ public interface AuthService {
1821

1922
UserDTO getUserInfo() throws AuthException;
2023

24+
boolean validateCode(JwtRequest request) throws AuthException;
2125
}
Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package kattsyn.dev.rentplace.services;
22

3-
import kattsyn.dev.rentplace.dtos.ImageDTO;
4-
import kattsyn.dev.rentplace.dtos.UserCreateEditDTO;
5-
import kattsyn.dev.rentplace.dtos.UserDTO;
3+
import kattsyn.dev.rentplace.dtos.*;
64
import kattsyn.dev.rentplace.entities.User;
75
import org.springframework.web.multipart.MultipartFile;
86

@@ -11,15 +9,28 @@
119
public interface UserService {
1210

1311
List<UserDTO> findAll();
12+
1413
User getUserByEmail(String email);
14+
15+
boolean existsByEmail(String email);
16+
1517
UserDTO getUserDTOByEmail(String email);
18+
1619
UserDTO findById(Long id);
20+
1721
User getUserById(Long id);
22+
1823
UserDTO save(UserDTO userDTO);
24+
1925
UserDTO createWithImage(UserCreateEditDTO userCreateEditDTO);
26+
2027
void deleteById(long id);
28+
2129
ImageDTO uploadImage(MultipartFile file, long id);
30+
2231
UserDTO update(long id, UserCreateEditDTO userCreateEditDTO);
2332

2433
boolean allowedToEditUser(long id, String email);
34+
35+
User createUserWithRegisterRequest(RegisterRequest registerRequest);
2536
}

rentplace/src/main/java/kattsyn/dev/rentplace/services/VerificationCodeService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package kattsyn.dev.rentplace.services;
22

3+
import kattsyn.dev.rentplace.dtos.CodeResponse;
4+
35
public interface VerificationCodeService {
46
boolean validateCode(String email, String code);
57

6-
void generateAndSendCode(String email);
8+
CodeResponse generateAndSendCode(String email);
79

810
String generateCode();
911

0 commit comments

Comments
 (0)