Spring Boot project for modeling and managing vaccine appointments with a layered Java backend.
This repository documents my transition from PHP to Java and Spring Boot. I keep it public as a portfolio project so the progress, structure, and quality improvements are visible over time.
- Current stage: Active development
- Focus: Domain modeling, booking rules, REST endpoints, and persistence work
- Last updated milestone: Spring Boot migration and API foundation
- OOP and domain modeling in Java (
User,Appointment,DoctorProfile,StaffProfile) - Layered backend structure (
controller,service,repository,model,dto,exception) - Constructor-based validation and custom runtime exceptions
- REST API design with Spring Web
- JPA-based repository structure for future persistence work
- Domain models:
UserAppointmentDoctorProfileStaffProfileShiftAssignment
- REST endpoints:
GET /api/appointmentsPOST /api/appointments
- Service layer for booking appointments and applying business rules
- Centralized exception handling with custom API error responses
- Demo data seeding for local development
- Replace demo booking data with fully persistent appointment flows
- Expand validation for request payloads and domain rules
- Add appointment lookup and cancellation operations
- Improve test coverage for service and controller behavior
- Clean up the API response structure for production use
- Java 21
- Spring Boot 4.1.x
- Spring Web
- Spring Data JPA
- Maven
- MySQL connector
src/main/java/com/cvam/cvam_v2_spring/
CvamV2SpringApplication.java
controller/
AppointmentController.java
dto/
AppointmentRequest.java
AppointmentImportDto.java
DoctorImportDto.java
StaffImportDto.java
UserImportDto.java
exception/
ApiError.java
AppointmentConflictException.java
AppointmentNotFoundException.java
EmailAlreadyRegisteredException.java
FiscalCodeAlreadyRegisteredException.java
GlobalExceptionHandler.java
InvalidAppointmentException.java
model/
Appointment.java
DoctorProfile.java
StaffProfile.java
ShiftAssignment.java
User.java
repository/
AppointmentRepository.java
DoctorProfileRepository.java
StaffProfileRepository.java
ShiftAssignmentRepository.java
UserRepository.java
service/
AppointmentService.java
DoctorService.java
StaffService.java
UserService.java
util/
DataSeeder.java
- JDK 21
- Maven is optional because the project includes the Maven Wrapper
./mvnw spring-boot:runOn Windows:
.\mvnw.cmd spring-boot:runThen open http://localhost:8080/api/appointments.
I keep this repository public to show how the project evolves from a learning backend into a more complete Java application. The goal is to make the structure, design choices, and feature growth easy to follow as the codebase matures.
The long-term goal is to turn this into a portfolio-ready appointment management API with real persistence, stronger validation, and cleaner workflows around booking, cancellation, and user management. I want the project to show steady progress from a simple learning exercise into a well-structured Spring backend.
- This project still includes development/demo behavior in some places.
- It is a learning and portfolio project, not production software.
- Database credentials are supplied through IntelliJ run configuration environment variables, not committed files.
Licensed under the MIT License. See LICENSE.