package com.agendaestudantil.controlador; import com.agendaestudantil.dto.RespostaApi; import com.agendaestudantil.dto.RequisicaoAtualizacaoEstudanteDTO; import com.agendaestudantil.dto.RequisicaoCadastroDTO; import com.agendaestudantil.dto.RespostaDadosCompletoDTO; import com.agendaestudantil.dto.RespostaEstudanteDTO; import com.agendaestudantil.dto.RequisicaoLoginDTO; import com.agendaestudantil.dto.RespostaLoginDTO; import com.agendaestudantil.dto.RequisicaoTrocaSenhaDTO; import com.agendaestudantil.servico.EstudanteServico; import jakarta.validation.Valid; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/estudantes") public class EstudanteControlador { private final EstudanteServico estudanteServico; public EstudanteControlador(EstudanteServico estudanteServico) { this.estudanteServico = estudanteServico; } @PostMapping("/cadastro") public ResponseEntity> cadastrar(@Valid @RequestBody RequisicaoCadastroDTO dto) { RespostaEstudanteDTO resposta = estudanteServico.cadastrar(dto); return ResponseEntity.status(HttpStatus.CREATED).body(RespostaApi.sucesso(resposta)); } @PostMapping("/login") public ResponseEntity> login(@Valid @RequestBody RequisicaoLoginDTO dto) { RespostaLoginDTO resposta = estudanteServico.login(dto); return ResponseEntity.ok(RespostaApi.sucesso(resposta)); } @GetMapping("/me") public ResponseEntity> me(@AuthenticationPrincipal UserDetails userDetails) { RespostaEstudanteDTO resposta = estudanteServico.buscarPorId(userDetails.getUsername()); return ResponseEntity.ok(RespostaApi.sucesso(resposta)); } @GetMapping("/me/dados") public ResponseEntity> exportarDados( @AuthenticationPrincipal UserDetails userDetails) { RespostaDadosCompletoDTO dados = estudanteServico.exportarDados(userDetails.getUsername()); return ResponseEntity.ok(RespostaApi.sucesso(dados)); } @PutMapping("/me") public ResponseEntity> atualizar( @AuthenticationPrincipal UserDetails userDetails, @Valid @RequestBody RequisicaoAtualizacaoEstudanteDTO dto) { RespostaEstudanteDTO resposta = estudanteServico.atualizar(userDetails.getUsername(), dto); return ResponseEntity.ok(RespostaApi.sucesso(resposta)); } @PutMapping("/senha") public ResponseEntity> trocarSenha( @AuthenticationPrincipal UserDetails userDetails, @Valid @RequestBody RequisicaoTrocaSenhaDTO dto) { estudanteServico.trocarSenha(userDetails.getUsername(), dto); return ResponseEntity.ok(RespostaApi.sucesso(null)); } @DeleteMapping("/me") public ResponseEntity> excluirConta(@AuthenticationPrincipal UserDetails userDetails) { estudanteServico.excluirConta(userDetails.getUsername()); return ResponseEntity.ok(RespostaApi.sucesso(null)); } }