93 lines
3.5 KiB
Java
93 lines
3.5 KiB
Java
package com.agendaestudantil.servico;
|
|
|
|
import com.agendaestudantil.dto.RespostaDisciplinaDTO;
|
|
import com.agendaestudantil.entidade.Disciplina;
|
|
import com.agendaestudantil.excecao.ExcecaoRecursoNaoEncontrado;
|
|
import com.agendaestudantil.repositorio.DisciplinaRepositorio;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.security.core.context.SecurityContextHolder;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.web.server.ResponseStatusException;
|
|
|
|
import java.util.List;
|
|
|
|
@Service
|
|
public class DisciplinaServico {
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(DisciplinaServico.class);
|
|
|
|
private final DisciplinaRepositorio disciplinaRepositorio;
|
|
|
|
public DisciplinaServico(DisciplinaRepositorio disciplinaRepositorio) {
|
|
this.disciplinaRepositorio = disciplinaRepositorio;
|
|
}
|
|
|
|
private void validarAcesso(String estudanteId) {
|
|
String authUser = SecurityContextHolder.getContext().getAuthentication().getName();
|
|
if (!authUser.equals(estudanteId)) {
|
|
log.error("Acesso negado. Usuário {} tentou acessar recurso do estudante {}", authUser, estudanteId);
|
|
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "Acesso negado");
|
|
}
|
|
}
|
|
|
|
public RespostaDisciplinaDTO criarDisciplina(Disciplina disciplina, String estudanteId) {
|
|
log.debug("Criando disciplina para estudante: {}", estudanteId);
|
|
validarAcesso(estudanteId);
|
|
|
|
disciplina.setEstudanteId(estudanteId);
|
|
Disciplina salva = disciplinaRepositorio.save(disciplina);
|
|
return toDTO(salva);
|
|
}
|
|
|
|
public List<RespostaDisciplinaDTO> listarPorEstudante(String estudanteId) {
|
|
log.debug("Listando disciplinas para estudante: {}", estudanteId);
|
|
validarAcesso(estudanteId);
|
|
|
|
return disciplinaRepositorio.findByEstudanteId(estudanteId).stream()
|
|
.map(this::toDTO)
|
|
.toList();
|
|
}
|
|
|
|
public RespostaDisciplinaDTO buscarPorId(String id, String estudanteId) {
|
|
Disciplina disciplina = getDisciplinaEntity(id);
|
|
validarAcesso(disciplina.getEstudanteId());
|
|
return toDTO(disciplina);
|
|
}
|
|
|
|
public RespostaDisciplinaDTO atualizarDisciplina(String id, Disciplina disciplinaAtualizada, String estudanteId) {
|
|
Disciplina disciplina = getDisciplinaEntity(id);
|
|
validarAcesso(disciplina.getEstudanteId());
|
|
|
|
disciplina.setNome(disciplinaAtualizada.getNome());
|
|
disciplina.setProfessor(disciplinaAtualizada.getProfessor());
|
|
disciplina.setSala(disciplinaAtualizada.getSala());
|
|
disciplina.setCor(disciplinaAtualizada.getCor());
|
|
|
|
return toDTO(disciplinaRepositorio.save(disciplina));
|
|
}
|
|
|
|
public void excluirDisciplina(String id, String estudanteId) {
|
|
Disciplina disciplina = getDisciplinaEntity(id);
|
|
validarAcesso(disciplina.getEstudanteId());
|
|
disciplinaRepositorio.delete(disciplina);
|
|
}
|
|
|
|
private Disciplina getDisciplinaEntity(String id) {
|
|
return disciplinaRepositorio.findById(id)
|
|
.orElseThrow(() -> new ExcecaoRecursoNaoEncontrado("Disciplina não encontrada"));
|
|
}
|
|
|
|
private RespostaDisciplinaDTO toDTO(Disciplina disciplina) {
|
|
return new RespostaDisciplinaDTO(
|
|
disciplina.getId(),
|
|
disciplina.getEstudanteId(),
|
|
disciplina.getNome(),
|
|
disciplina.getProfessor(),
|
|
disciplina.getSala(),
|
|
disciplina.getCor()
|
|
);
|
|
}
|
|
}
|