del front and add auth

This commit is contained in:
SlimusMinus
2026-05-04 00:46:20 +03:00
parent c2774cf534
commit dfcd77fe88
15 changed files with 131 additions and 11 deletions

View File

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

View File

@@ -24,7 +24,7 @@ public class ChatController {
@MessageMapping("/chat") @MessageMapping("/chat")
public void send(@Payload ChatMessage message, Principal principal) { public void send(@Payload ChatMessage message, Principal principal) {
Optional<User> sender = userRepository.findByEmail(principal.getName()); Optional<User> sender = userRepository.findByLogin(principal.getName());
Message saved = new Message(); Message saved = new Message();
if(sender.isPresent()){ if(sender.isPresent()){
saved = service.send(message.getReceiverId(), message.getContent()); saved = service.send(message.getReceiverId(), message.getContent());

View File

@@ -4,6 +4,6 @@ import lombok.Data;
@Data @Data
public class AuthRequest { public class AuthRequest {
private String email; private String login;
private String password; private String password;
} }

View File

@@ -1,5 +1,6 @@
package com.krylov.refound.dto; package com.krylov.refound.dto;
import com.krylov.refound.entity.User;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@@ -8,4 +9,5 @@ import lombok.Data;
public class AuthResponse { public class AuthResponse {
private String token; private String token;
private User user;
} }

View File

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

View File

@@ -1,10 +1,14 @@
package com.krylov.refound.entity; package com.krylov.refound.entity;
import com.krylov.refound.enums.Role;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.GeneratedValue; import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType; import jakarta.persistence.GenerationType;
import jakarta.persistence.Id; import jakarta.persistence.Id;
import jakarta.persistence.PrePersist;
import jakarta.persistence.Table; import jakarta.persistence.Table;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import lombok.Getter; import lombok.Getter;
@@ -18,10 +22,17 @@ public class User {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; private Long id;
private String name;
@Column(unique = true) @Column(unique = true)
private String email; private String login;
private String password; private String password;
private LocalDateTime createdAt; private LocalDateTime createdAt;
private String email;
@Enumerated(EnumType.STRING)
private Role role = Role.USER;
@PrePersist
public void prePersist() {
this.createdAt = LocalDateTime.now();
}
} }

View File

@@ -0,0 +1,5 @@
package com.krylov.refound.enums;
public enum Role {
ADMIN, USER
}

View File

@@ -11,6 +11,6 @@ public interface PostMapper {
Post toEntity(PostRequest request); Post toEntity(PostRequest request);
@Mapping(source = "user.email", target = "userEmail") @Mapping(source = "user.login", target = "userEmail")
PostResponse toResponse(Post post); PostResponse toResponse(Post post);
} }

View File

@@ -5,5 +5,7 @@ import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> { public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email); Optional<User> findByLogin(String email);
Boolean existsByLogin(String login);
} }

View File

@@ -58,8 +58,8 @@ public class MessageService {
: m.getSender().getId(); : m.getSender().getId();
String email = isMeSender String email = isMeSender
? m.getReceiver().getEmail() ? m.getReceiver().getLogin()
: m.getSender().getEmail(); : m.getSender().getLogin();
int unread = messageRepository.countUnread(userId, otherUserId); int unread = messageRepository.countUnread(userId, otherUserId);

View File

@@ -15,7 +15,7 @@ public class UserService {
public User getCurrentUser() { public User getCurrentUser() {
return repository.findByEmail("moscow_city231@rambler.ru") return repository.findByLogin("moscow_city231@rambler.ru")
.orElseThrow(() -> new ApiException( .orElseThrow(() -> new ApiException(
ErrorCode.NOT_FOUND, ErrorCode.NOT_FOUND,
"User not found", "User not found",

View File

@@ -0,0 +1,11 @@
databaseChangeLog:
- changeSet:
id: 011-add-name-column
author: you
changes:
- addColumn:
tableName: users
columns:
- column:
name: name
type: VARCHAR(255)

View File

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

View File

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

View File

@@ -8,3 +8,6 @@ databaseChangeLog:
- include: { file: db/changelog/constraint/007-fk-post-user-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/008-fk-message-user.yaml }
- include: { file: db/changelog/constraint/009-fk-favorite-user.yaml } - 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}