desvergue-de-alexandro
java 87 lines 3.09 KB
Raw
1 package com.tecmilenio.mapsconect.service;
2
3 import com.tecmilenio.mapsconect.dto.LoginDTO;
4 import com.tecmilenio.mapsconect.dto.RegistroDTO;
5 import com.tecmilenio.mapsconect.dto.TokenDTO;
6 import com.tecmilenio.mapsconect.dto.UsuarioDTO;
7 import com.tecmilenio.mapsconect.entity.Usuario;
8 import com.tecmilenio.mapsconect.exception.ResourceNotFoundException;
9 import com.tecmilenio.mapsconect.repository.UsuarioRepository;
10 import com.tecmilenio.mapsconect.security.JwtTokenProvider;
11 import org.springframework.beans.factory.annotation.Autowired;
12 import org.springframework.security.crypto.password.PasswordEncoder;
13 import org.springframework.stereotype.Service;
14
15 @Service
16 public class UsuarioService {
17
18 @Autowired
19 private UsuarioRepository usuarioRepository;
20
21 @Autowired
22 private PasswordEncoder passwordEncoder;
23
24 @Autowired
25 private JwtTokenProvider jwtTokenProvider;
26
27 public TokenDTO registrar(RegistroDTO registroDTO) {
28 if (usuarioRepository.existsByEmail(registroDTO.getEmail())) {
29 throw new RuntimeException("El email ya está registrado");
30 }
31
32 Usuario usuario = Usuario.builder()
33 .email(registroDTO.getEmail())
34 .nombre(registroDTO.getNombre())
35 .apellido(registroDTO.getApellido())
36 .contrasena(passwordEncoder.encode(registroDTO.getContrasena()))
37 .rol(Usuario.Rol.ESTUDIANTE)
38 .activo(true)
39 .build();
40
41 Usuario usuarioGuardado = usuarioRepository.save(usuario);
42 String token = jwtTokenProvider.generateToken(usuarioGuardado.getEmail());
43
44 return TokenDTO.builder()
45 .token(token)
46 .tipo("Bearer")
47 .expiresIn(86400L)
48 .usuario(mapearADTO(usuarioGuardado))
49 .build();
50 }
51
52 public TokenDTO login(LoginDTO loginDTO) {
53 Usuario usuario = usuarioRepository.findByEmail(loginDTO.getEmail())
54 .orElseThrow(() -> new ResourceNotFoundException("Usuario no encontrado"));
55
56 if (!passwordEncoder.matches(loginDTO.getContrasena(), usuario.getContrasena())) {
57 throw new RuntimeException("Contraseña incorrecta");
58 }
59
60 String token = jwtTokenProvider.generateToken(usuario.getEmail());
61
62 return TokenDTO.builder()
63 .token(token)
64 .tipo("Bearer")
65 .expiresIn(86400L)
66 .usuario(mapearADTO(usuario))
67 .build();
68 }
69
70 public UsuarioDTO obtenerPorEmail(String email) {
71 Usuario usuario = usuarioRepository.findByEmail(email)
72 .orElseThrow(() -> new ResourceNotFoundException("Usuario no encontrado"));
73 return mapearADTO(usuario);
74 }
75
76 private UsuarioDTO mapearADTO(Usuario usuario) {
77 return UsuarioDTO.builder()
78 .id(usuario.getId())
79 .email(usuario.getEmail())
80 .nombre(usuario.getNombre())
81 .apellido(usuario.getApellido())
82 .rol(usuario.getRol().toString())
83 .activo(usuario.getActivo())
84 .build();
85 }
86
87 }