diff --git a/src/main/java/com/krylov/refound/controller/AuthController.java b/src/main/java/com/krylov/refound/controller/AuthController.java new file mode 100644 index 0000000..f6fe51c --- /dev/null +++ b/src/main/java/com/krylov/refound/controller/AuthController.java @@ -0,0 +1,56 @@ +package com.krylov.refound.controller; + +import com.krylov.refound.dto.AuthRequest; +import com.krylov.refound.dto.AuthResponse; +import com.krylov.refound.dto.RegisterRequest; +import com.krylov.refound.entity.User; +import com.krylov.refound.repository.UserRepository; +import java.util.Map; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/v1/auth") +@Slf4j +@RequiredArgsConstructor +public class AuthController { + + private final UserRepository userRepository; + + @PostMapping("/register") + public ResponseEntity register(@RequestBody RegisterRequest request) { + + // Проверка что логин не занят + if (userRepository.findByLogin(request.getLogin()).isPresent()) { + return ResponseEntity + .badRequest() + .body(Map.of("message", "Логин уже занят")); + } + + // Создание пользователя + User user = new User(); + user.setName(request.getName()); + user.setLogin(request.getLogin()); + user.setPassword(request.getPassword()); // позже добавить BCrypt + + userRepository.save(user); + + String token = "fake-jwt-token"; + + return ResponseEntity.ok(new AuthResponse(token, user)); + } + + @GetMapping("/check-login") + public ResponseEntity checkLogin(@RequestParam String login) { + boolean exists = userRepository.existsByLogin(login); + return ResponseEntity.ok(Map.of("exists", exists)); + } + +} diff --git a/src/main/java/com/krylov/refound/controller/ChatController.java b/src/main/java/com/krylov/refound/controller/ChatController.java index d4dc79f..3602bab 100644 --- a/src/main/java/com/krylov/refound/controller/ChatController.java +++ b/src/main/java/com/krylov/refound/controller/ChatController.java @@ -24,7 +24,7 @@ public class ChatController { @MessageMapping("/chat") public void send(@Payload ChatMessage message, Principal principal) { - Optional sender = userRepository.findByEmail(principal.getName()); + Optional sender = userRepository.findByLogin(principal.getName()); Message saved = new Message(); if(sender.isPresent()){ saved = service.send(message.getReceiverId(), message.getContent()); diff --git a/src/main/java/com/krylov/refound/dto/AuthRequest.java b/src/main/java/com/krylov/refound/dto/AuthRequest.java index c2cc5db..1b0d047 100644 --- a/src/main/java/com/krylov/refound/dto/AuthRequest.java +++ b/src/main/java/com/krylov/refound/dto/AuthRequest.java @@ -4,6 +4,6 @@ import lombok.Data; @Data public class AuthRequest { - private String email; + private String login; private String password; } diff --git a/src/main/java/com/krylov/refound/dto/AuthResponse.java b/src/main/java/com/krylov/refound/dto/AuthResponse.java index 227e6ba..939b030 100644 --- a/src/main/java/com/krylov/refound/dto/AuthResponse.java +++ b/src/main/java/com/krylov/refound/dto/AuthResponse.java @@ -1,5 +1,6 @@ package com.krylov.refound.dto; +import com.krylov.refound.entity.User; import lombok.AllArgsConstructor; import lombok.Data; @@ -8,4 +9,5 @@ import lombok.Data; public class AuthResponse { private String token; + private User user; } diff --git a/src/main/java/com/krylov/refound/dto/RegisterRequest.java b/src/main/java/com/krylov/refound/dto/RegisterRequest.java new file mode 100644 index 0000000..4aafdb3 --- /dev/null +++ b/src/main/java/com/krylov/refound/dto/RegisterRequest.java @@ -0,0 +1,10 @@ +package com.krylov.refound.dto; + +import lombok.Data; + +@Data +public class RegisterRequest { + private String name; + private String login; + private String password; +} diff --git a/src/main/java/com/krylov/refound/entity/User.java b/src/main/java/com/krylov/refound/entity/User.java index 80f73ca..61e8cd9 100644 --- a/src/main/java/com/krylov/refound/entity/User.java +++ b/src/main/java/com/krylov/refound/entity/User.java @@ -1,10 +1,14 @@ package com.krylov.refound.entity; +import com.krylov.refound.enums.Role; import jakarta.persistence.Column; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; +import jakarta.persistence.PrePersist; import jakarta.persistence.Table; import java.time.LocalDateTime; import lombok.Getter; @@ -18,10 +22,17 @@ public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - + private String name; @Column(unique = true) - private String email; + private String login; private String password; - private LocalDateTime createdAt; + private String email; + @Enumerated(EnumType.STRING) + private Role role = Role.USER; + + @PrePersist + public void prePersist() { + this.createdAt = LocalDateTime.now(); + } } diff --git a/src/main/java/com/krylov/refound/enums/Role.java b/src/main/java/com/krylov/refound/enums/Role.java new file mode 100644 index 0000000..1aa7413 --- /dev/null +++ b/src/main/java/com/krylov/refound/enums/Role.java @@ -0,0 +1,5 @@ +package com.krylov.refound.enums; + +public enum Role { + ADMIN, USER +} diff --git a/src/main/java/com/krylov/refound/mapper/PostMapper.java b/src/main/java/com/krylov/refound/mapper/PostMapper.java index fe03703..3ff4bb9 100644 --- a/src/main/java/com/krylov/refound/mapper/PostMapper.java +++ b/src/main/java/com/krylov/refound/mapper/PostMapper.java @@ -11,6 +11,6 @@ public interface PostMapper { Post toEntity(PostRequest request); - @Mapping(source = "user.email", target = "userEmail") + @Mapping(source = "user.login", target = "userEmail") PostResponse toResponse(Post post); } diff --git a/src/main/java/com/krylov/refound/repository/UserRepository.java b/src/main/java/com/krylov/refound/repository/UserRepository.java index 1c1fd00..fe423fb 100644 --- a/src/main/java/com/krylov/refound/repository/UserRepository.java +++ b/src/main/java/com/krylov/refound/repository/UserRepository.java @@ -5,5 +5,7 @@ import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository { - Optional findByEmail(String email); + Optional findByLogin(String email); + + Boolean existsByLogin(String login); } diff --git a/src/main/java/com/krylov/refound/service/MessageService.java b/src/main/java/com/krylov/refound/service/MessageService.java index ef80768..9e6566d 100644 --- a/src/main/java/com/krylov/refound/service/MessageService.java +++ b/src/main/java/com/krylov/refound/service/MessageService.java @@ -58,8 +58,8 @@ public class MessageService { : m.getSender().getId(); String email = isMeSender - ? m.getReceiver().getEmail() - : m.getSender().getEmail(); + ? m.getReceiver().getLogin() + : m.getSender().getLogin(); int unread = messageRepository.countUnread(userId, otherUserId); diff --git a/src/main/java/com/krylov/refound/service/UserService.java b/src/main/java/com/krylov/refound/service/UserService.java index 3ca10f4..90ca9fa 100644 --- a/src/main/java/com/krylov/refound/service/UserService.java +++ b/src/main/java/com/krylov/refound/service/UserService.java @@ -15,7 +15,7 @@ public class UserService { public User getCurrentUser() { - return repository.findByEmail("moscow_city231@rambler.ru") + return repository.findByLogin("moscow_city231@rambler.ru") .orElseThrow(() -> new ApiException( ErrorCode.NOT_FOUND, "User not found", diff --git a/src/main/resources/db/changelog/add/011-add-name-user.yaml b/src/main/resources/db/changelog/add/011-add-name-user.yaml new file mode 100644 index 0000000..d405b78 --- /dev/null +++ b/src/main/resources/db/changelog/add/011-add-name-user.yaml @@ -0,0 +1,11 @@ +databaseChangeLog: + - changeSet: + id: 011-add-name-column + author: you + changes: + - addColumn: + tableName: users + columns: + - column: + name: name + type: VARCHAR(255) \ No newline at end of file diff --git a/src/main/resources/db/changelog/add/012-add-email-role.yaml b/src/main/resources/db/changelog/add/012-add-email-role.yaml new file mode 100644 index 0000000..6743981 --- /dev/null +++ b/src/main/resources/db/changelog/add/012-add-email-role.yaml @@ -0,0 +1,10 @@ +databaseChangeLog: + - changeSet: + id: 012-add-email-role + author: you + changes: + - addColumn: + tableName: users + columns: + - column: { name: role, type: VARCHAR(255) } + - column: { name: email, type: VARCHAR(255) } \ No newline at end of file diff --git a/src/main/resources/db/changelog/alter/010-alter-user.yaml b/src/main/resources/db/changelog/alter/010-alter-user.yaml new file mode 100644 index 0000000..2402a41 --- /dev/null +++ b/src/main/resources/db/changelog/alter/010-alter-user.yaml @@ -0,0 +1,10 @@ +databaseChangeLog: + - changeSet: + id: 010-rename-email-to-login + author: you + changes: + - renameColumn: + tableName: users + oldColumnName: email + newColumnName: login + columnDataType: VARCHAR(255) \ No newline at end of file diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 73c5227..e4cd3e6 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -7,4 +7,7 @@ databaseChangeLog: - include: { file: db/changelog/constraint/006-fk-images-post-constraint.yaml } - include: { file: db/changelog/constraint/007-fk-post-user-constraint.yaml } - include: { file: db/changelog/constraint/008-fk-message-user.yaml } - - include: { file: db/changelog/constraint/009-fk-favorite-user.yaml } \ No newline at end of file + - include: { file: db/changelog/constraint/009-fk-favorite-user.yaml } + - include: { file: db/changelog/alter/010-alter-user.yaml } + - include: { file: db/changelog/add/011-add-name-user.yaml } + - include: { file: db/changelog/add/012-add-email-role.yaml} \ No newline at end of file