это мои сущности.
пользовательская сущность

субъект администратора, у него есть внешний ключ с таблицей пользователей по идентификатору

когда я использую конечную точку, я получаю что-то вроде этого
< img alt="user result" src="https://i.sstatic.net/Wg1HrpwX.png" />
и таблица администратора выглядит так
конечная точка аутентификации выглядит так
Код: Выделить всё
package com.ApiRestfulBackendVet.ApiRestfulBackendVet.Auth;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.models.adminModel;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.user.role;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.user.user;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.Jwt.jwtService;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.user.userRepository;
import org.springframework.security.crypto.password.PasswordEncoder;
import com.ApiRestfulBackendVet.ApiRestfulBackendVet.repositories.IAdminRepository;
@Service
@RequiredArgsConstructor
public class authService {
private final userRepository userRepository;
private final jwtService jwtService;
private final PasswordEncoder passwordEncoder;
private final AuthenticationManager authenticationManager;
private final IAdminRepository adminRepository;
private static final Logger logger = LoggerFactory.getLogger(authService.class);
public authResponse login (loginRequest request) {
logger.info("Intento de inicio de sesión para: {}", request.getUsername());
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(request.getUsername(), request.getContraseña()));
UserDetails userDetails = userRepository.findByUsername(request.getUsername()).orElseThrow();
String token = jwtService.getToken(userDetails);
logger.info("Inicio de sesión exitoso para: {}", request.getUsername());
return authResponse.builder()
.token(token)
.build();
}
// Registro de admindios
public authResponse register (registerRequest request) {
logger.info("Registro solicitado para: {}", request.getUsername());
// Verificar si el usuario ya existe
if (userRepository.findByEmail(request.getEmail()).isPresent() || userRepository.findByUsername(request.getUsername()).isPresent()) {
logger.error("El correo o el nombre de usuario ya están registrados: {}", request.getUsername());
throw new IllegalArgumentException("El correo o el nombre de usuario ya están registrados.");
}
user user1 = user.builder()
.email(request.getEmail())
.username(request.getUsername())
.contrasena(passwordEncoder.encode(request.getContraseña()))
.role(role.ADMINDIOS)
.build();
userRepository.save(user1);
logger.info("Usuario registrado exitosamente: {}", user1.getUsername());
return authResponse.builder()
.token(jwtService.getToken(user1))
.build();
}
public authResponse registerAdmin(registerRequest request) {
logger.info("Registro de admin solicitado para: {}", request.getUsername());
if (request.getIdSucursal() == null) {
throw new IllegalArgumentException("IdSucursal must not be null.");
}
// Verificar si el usuario ya existe
if (userRepository.findByEmail(request.getEmail()).isPresent() || userRepository.findByUsername(request.getUsername()).isPresent()) {
logger.error("El correo o el nombre de usuario ya están registrados: {}", request.getUsername());
throw new IllegalArgumentException("El correo o el nombre de usuario ya están registrados.");
}
user user1 = user.builder()
.email(request.getEmail())
.username(request.getUsername())
.contrasena(passwordEncoder.encode(request.getContraseña()))
.estatus("ACTIVO")
.role(role.ADMIN)
.build();
logger.info("Guardando el usuario: {}", user1.getUsername());
userRepository.save(user1);
logger.info("Usuario admin registrado exitosamente: {}", user1.getUsername());
// Crear el registro en adminModel
adminModel admin = new adminModel();
admin.setIdSucursal(request.getIdSucursal());
logger.info("Guardando el adminModel para la sucursal ID: {}", request.getIdSucursal());
adminRepository.save(admin);
logger.info("Registro en adminModel creado para la sucursal ID: {}", request.getIdSucursal());
return authResponse.builder()
.token(jwtService.getToken(user1))
.build();
}
}
это модель пользователя
Код: Выделить всё
package com.ApiRestfulBackendVet.ApiRestfulBackendVet.user;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "user")
public class user implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "email")
private String email;
@Column(name = "contraseña")
private String contrasena;
@Column(name = "username")
private String username;
@Column(name = "estatus")
private String estatus;
@Enumerated(EnumType.STRING)
role role;
@Override
public Collection
Подробнее здесь: [url]https://stackoverflow.com/questions/79077932/problem-with-auth-causing-double-insertion-in-database[/url]
Мобильная версия