Novo repositorio do projeto

This commit is contained in:
2026-03-31 19:21:11 -03:00
commit 02cfd71cf4
57 changed files with 3734 additions and 0 deletions
@@ -0,0 +1,92 @@
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()
);
}
}