70 lines
2.7 KiB
Java
70 lines
2.7 KiB
Java
package es.recursoscatolicos.controller;
|
|
|
|
import es.recursoscatolicos.dto.EntradaDiarioDTO;
|
|
import es.recursoscatolicos.dto.EntradaDiarioRequest;
|
|
import es.recursoscatolicos.model.Usuario;
|
|
import es.recursoscatolicos.service.DiarioService;
|
|
import jakarta.validation.Valid;
|
|
import lombok.RequiredArgsConstructor;
|
|
import org.springframework.format.annotation.DateTimeFormat;
|
|
import org.springframework.http.HttpStatus;
|
|
import org.springframework.http.ResponseEntity;
|
|
import org.springframework.security.access.AccessDeniedException;
|
|
import org.springframework.security.core.annotation.AuthenticationPrincipal;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import java.time.LocalDate;
|
|
import java.util.List;
|
|
|
|
@RestController
|
|
@RequestMapping("/diario")
|
|
@RequiredArgsConstructor
|
|
public class DiarioController {
|
|
|
|
private final DiarioService diarioService;
|
|
|
|
/** GET /diario — todas las entradas del usuario autenticado */
|
|
@GetMapping
|
|
public ResponseEntity<List<EntradaDiarioDTO>> getEntradas(
|
|
@AuthenticationPrincipal Usuario usuario) {
|
|
return ResponseEntity.ok(diarioService.getEntradas(usuario.getId()));
|
|
}
|
|
|
|
/** GET /diario/{fecha} — entrada de un día concreto (yyyy-MM-dd) */
|
|
@GetMapping("/{fecha}")
|
|
public ResponseEntity<EntradaDiarioDTO> getEntradaPorFecha(
|
|
@PathVariable @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate fecha,
|
|
@AuthenticationPrincipal Usuario usuario) {
|
|
EntradaDiarioDTO dto = diarioService.getEntradaPorFecha(usuario.getId(), fecha);
|
|
return dto != null ? ResponseEntity.ok(dto) : ResponseEntity.notFound().build();
|
|
}
|
|
|
|
/** POST /diario — crea o actualiza la entrada del día indicado (upsert) */
|
|
@PostMapping
|
|
public ResponseEntity<?> guardar(
|
|
@Valid @RequestBody EntradaDiarioRequest request,
|
|
@AuthenticationPrincipal Usuario usuario) {
|
|
try {
|
|
EntradaDiarioDTO dto = diarioService.guardar(request, usuario.getId());
|
|
return ResponseEntity.status(HttpStatus.CREATED).body(dto);
|
|
} catch (IllegalArgumentException e) {
|
|
return ResponseEntity.badRequest().body(e.getMessage());
|
|
}
|
|
}
|
|
|
|
/** DELETE /diario/{id} — elimina una entrada por su id */
|
|
@DeleteMapping("/{id}")
|
|
public ResponseEntity<?> eliminar(
|
|
@PathVariable Long id,
|
|
@AuthenticationPrincipal Usuario usuario) {
|
|
try {
|
|
diarioService.eliminar(id, usuario.getId());
|
|
return ResponseEntity.noContent().build();
|
|
} catch (IllegalArgumentException e) {
|
|
return ResponseEntity.notFound().build();
|
|
} catch (AccessDeniedException e) {
|
|
return ResponseEntity.status(HttpStatus.FORBIDDEN).build();
|
|
}
|
|
}
|
|
}
|