package com.voidsoftware.map02.controllers; import com.voidsoftware.map02.config.CurrentUser; import com.voidsoftware.map02.entities.AppUser; import com.voidsoftware.map02.entities.Professional; import com.voidsoftware.map02.services.DataConversionService; import com.voidsoftware.map02.services.PatientDetailService; import com.voidsoftware.map02.services.PermissionsValidatorService; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestParam; import java.time.LocalDate; import java.util.Optional; import java.util.UUID; @Controller public class PatientDetailController { private final PatientDetailService patientDetailService; private final PermissionsValidatorService permissionsValidatorService; private final DataConversionService dataConversionService; public PatientDetailController(PatientDetailService patientDetailService, PermissionsValidatorService permissionsValidatorService, DataConversionService dataConversionService) { this.patientDetailService = patientDetailService; this.permissionsValidatorService = permissionsValidatorService; this.dataConversionService = dataConversionService; } @GetMapping("/patients/{id}") public String patientDetail(@CurrentUser AppUser sessionUser, @PathVariable UUID id, @RequestParam(defaultValue = "weekly") String view, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate date, Model model) { Optional professional = permissionsValidatorService.validateProfessional(sessionUser); if (professional.isEmpty()) { return "redirect:/login"; } return patientDetailService.build(id, professional.get(), view, date) .map(patient -> { model.addAttribute("pageTitle", patient.getName()); model.addAttribute("patient", patient); model.addAttribute("professionalName", professional.get().getName()); model.addAttribute("professionalPhoto", professional.get().getResourceId() == null ? null : dataConversionService.getImageResource(professional.get().getResourceId()).orElse(null)); return "patient-detail"; }) .orElse("redirect:/dashboard"); } }