How clancymendonca/patient-management works
Purpose and runtime
This repository implements a standalone patient-management REST service. It is a Java/Spring Boot application built with Maven, with its process entry point at patient-service/src/main/java/com/pm/patientservice/PatientServiceApplication.java and build/dependency definition in patient-service/pom.xml.
HTTP API boundary
PatientController exposes the patient-facing HTTP endpoints and is the primary inbound boundary: patient-service/src/main/java/com/pm/patientservice/controller/PatientController.java. Example requests for retrieving, creating, and updating patients are supplied under api-requests/patient-service/get-patients.http, api-requests/patient-service/set-patient.http, and api-requests/patient-service/update-patient.http.
Request/response contract and validation
The API separates external payloads from persistence entities through DTOs:
• patient-service/src/main/java/com/pm/patientservice/dto/PatientRequestDTO.java
• patient-service/src/main/java/com/pm/patientservice/dto/PatientResponseDTO.java
Creation-specific validation is modeled with patient-service/src/main/java/com/pm/patientservice/dto/validators/CreatePatientValidationGroup.java, allowing validation rules to vary by operation rather than being coupled directly to the database model.
Application service flow
PatientService owns patient use cases and mediates between controller, mapping, and persistence: patient-service/src/main/java/com/pm/patientservice/service/PatientService.java. The expected control path is HTTP request → validated request DTO → service operation → repository access → mapped response DTO. This keeps HTTP handling and database operations out of the central business-operation layer.
Mapping and domain persistence
PatientMapper translates between API DTOs and the patient domain/persistence entity: patient-service/src/main/java/com/pm/patientservice/mapper/PatientMapper.java. Persistent patient state is represented by patient-service/src/main/java/com/pm/patientservice/model/Patient.java and accessed through patient-service/src/main/java/com/pm/patientservice/repository/PatientRepository.java, indicating a Spring Data/JPA-style database boundary.
Error semantics
Domain failures are explicit: missing patients use patient-service/src/main/java/com/pm/patientservice/exception/PatientNotFoundException.java, while uniqueness conflicts use patient-service/src/main/java/com/pm/patientservice/exception/EmailAlreadyExistsException.java. patient-service/src/main/java/com/pm/patientservice/exception/GlobalExceptionHandler.java centralizes translation of these failures into consistent HTTP error responses, preventing exception details from leaking across the API boundary.
Configuration and data initialization
Runtime configuration resides in patient-service/src/main/resources/application.properties. Initial database content is provisioned through patient-service/src/main/resources/data.sql, making database initialization part of the application startup boundary. No external service integrations are evident from the repository structure; the material infrastructure dependency is the configured relational persistence layer.
Main entry points: PatientService.java Patient service · PatientController.java Patient controller · PatientServiceApplication.java Spring Boot application · PatientMapper.java Patient mapper
Components 16
Runtime
- Maven build
patient-service/pom.xml - Spring Boot application
patient-service/src/main/java/com/pm/patientservice/PatientServiceApplication.java - Runtime configuration
patient-service/src/main/resources/application.properties
HTTP API
- Patient controller · Primary inbound HTTP boundary.
patient-service/src/main/java/com/pm/patientservice/controller/PatientController.java - Patient request DTO
patient-service/src/main/java/com/pm/patientservice/dto/PatientRequestDTO.java - Create validation group · Applies creation-specific request validation.
patient-service/src/main/java/com/pm/patientservice/dto/validators/CreatePatientValidationGroup.java - Patient response DTO
patient-service/src/main/java/com/pm/patientservice/dto/PatientResponseDTO.java - Global exception handler
patient-service/src/main/java/com/pm/patientservice/exception/GlobalExceptionHandler.java
Application
- Patient service · Owns patient use cases.
patient-service/src/main/java/com/pm/patientservice/service/PatientService.java - Patient mapper
patient-service/src/main/java/com/pm/patientservice/mapper/PatientMapper.java - Patient not found
patient-service/src/main/java/com/pm/patientservice/exception/PatientNotFoundException.java - Email already exists
patient-service/src/main/java/com/pm/patientservice/exception/EmailAlreadyExistsException.java
Persistence
- Patient repository
patient-service/src/main/java/com/pm/patientservice/repository/PatientRepository.java - Patient · Persistent patient state.
patient-service/src/main/java/com/pm/patientservice/model/Patient.java - Relational database
- Initial patient data · Provisioned during application startup.
patient-service/src/main/resources/data.sql
Connections 19
- Maven build → Spring Boot application: builds
- Spring Boot application → Runtime configuration: loads
- Spring Boot application → Initial patient data: initializes
- Patient controller → Patient request DTO: accepts
- Patient request DTO → Create validation group: validated for create
- Patient controller → Patient service: invokes
- Patient service → Patient mapper: maps through
- Patient mapper → Patient response DTO: produces
- Patient service → Patient repository: accesses
- Patient mapper → Patient: maps to/from
- Patient repository → Patient: persists
- Patient repository → Relational database: reads and writes
- Runtime configuration → Relational database: configures
- Initial patient data → Relational database: seeds
- Patient service → Patient not found: raises
- Patient service → Email already exists: raises
- Global exception handler → Patient not found: translates
- Global exception handler → Email already exists: translates
- Patient controller → Global exception handler: routes failures to