desvergue-de-alexandro
java 95 lines 3.91 KB
Raw
1 package com.tecmilenio.mapsconect.service;
2
3 import com.tecmilenio.mapsconect.dto.EstudianteDTO;
4 import com.tecmilenio.mapsconect.dto.EstudianteRequestDTO;
5 import com.tecmilenio.mapsconect.entity.Estudiante;
6 import com.tecmilenio.mapsconect.entity.Usuario;
7 import com.tecmilenio.mapsconect.exception.ResourceNotFoundException;
8 import com.tecmilenio.mapsconect.repository.EstudianteRepository;
9 import com.tecmilenio.mapsconect.repository.UsuarioRepository;
10 import org.springframework.beans.factory.annotation.Autowired;
11 import org.springframework.stereotype.Service;
12
13 import java.util.List;
14
15 @Service
16 public class EstudianteService {
17
18 @Autowired
19 private EstudianteRepository estudianteRepository;
20
21 @Autowired
22 private UsuarioRepository usuarioRepository;
23
24 public List<EstudianteDTO> listar() {
25 return estudianteRepository.findAll().stream().map(this::mapearADTO).toList();
26 }
27
28 public EstudianteDTO obtenerPorId(Integer id) {
29 Estudiante estudiante = estudianteRepository.findById(id)
30 .orElseThrow(() -> new ResourceNotFoundException("Estudiante no encontrado"));
31 return mapearADTO(estudiante);
32 }
33
34 public EstudianteDTO obtenerPerfilActual(String email) {
35 Usuario usuario = obtenerUsuario(email);
36 Estudiante estudiante = estudianteRepository.findByUsuario_Id(usuario.getId())
37 .orElseThrow(() -> new ResourceNotFoundException("Aún no has completado tu perfil de estudiante"));
38 return mapearADTO(estudiante);
39 }
40
41 public EstudianteDTO crearPerfil(String email, EstudianteRequestDTO dto) {
42 Usuario usuario = obtenerUsuario(email);
43
44 if (estudianteRepository.findByUsuario_Id(usuario.getId()).isPresent()) {
45 throw new RuntimeException("Ya existe un perfil de estudiante para este usuario");
46 }
47 if (estudianteRepository.existsByMatricula(dto.getMatricula())) {
48 throw new RuntimeException("La matrícula ya está registrada");
49 }
50
51 Estudiante estudiante = Estudiante.builder()
52 .usuario(usuario)
53 .idCarrera(dto.getIdCarrera())
54 .matricula(dto.getMatricula())
55 .semestreActual(dto.getSemestreActual())
56 .propositoVida(dto.getPropositoVida())
57 .puntosReputacion(0)
58 .build();
59
60 return mapearADTO(estudianteRepository.save(estudiante));
61 }
62
63 public EstudianteDTO actualizarPerfil(String email, EstudianteRequestDTO dto) {
64 Usuario usuario = obtenerUsuario(email);
65 Estudiante estudiante = estudianteRepository.findByUsuario_Id(usuario.getId())
66 .orElseThrow(() -> new ResourceNotFoundException("Aún no has completado tu perfil de estudiante"));
67
68 estudiante.setIdCarrera(dto.getIdCarrera());
69 estudiante.setSemestreActual(dto.getSemestreActual());
70 estudiante.setPropositoVida(dto.getPropositoVida());
71
72 return mapearADTO(estudianteRepository.save(estudiante));
73 }
74
75 private Usuario obtenerUsuario(String email) {
76 return usuarioRepository.findByEmail(email)
77 .orElseThrow(() -> new ResourceNotFoundException("Usuario no encontrado"));
78 }
79
80 private EstudianteDTO mapearADTO(Estudiante estudiante) {
81 Usuario usuario = estudiante.getUsuario();
82 return EstudianteDTO.builder()
83 .id(estudiante.getId())
84 .idUsuario(usuario != null ? usuario.getId() : null)
85 .nombreCompleto(usuario != null ? (usuario.getNombre() + " " + usuario.getApellido()) : null)
86 .email(usuario != null ? usuario.getEmail() : null)
87 .idCarrera(estudiante.getIdCarrera())
88 .matricula(estudiante.getMatricula())
89 .semestreActual(estudiante.getSemestreActual())
90 .propositoVida(estudiante.getPropositoVida())
91 .puntosReputacion(estudiante.getPuntosReputacion())
92 .build();
93 }
94
95 }